From 057b52ba1fb5021f659c93d97897f8c6381734a2 Mon Sep 17 00:00:00 2001 From: naibo Date: Thu, 23 Mar 2023 06:56:25 +0800 Subject: [PATCH] New Version 0.2.0 --- .gitignore | 7 +- C#/ServiceWrapperEntry/.gitignore | 2 - C#/ServiceWrapperEntry/EasySpiderEntry.sln | 25 - C#/ServiceWrapperEntry/Readme.md | 11 - .../ServiceWrapperEntry/.gitignore | 2 - .../ServiceWrapperEntry/App.config | 6 - .../ServiceWrapperEntry/Class1.cs | 174 - .../ServiceWrapperEntry/Flow.Designer.cs | 90 - .../ServiceWrapperEntry/Flow.cs | 123 - .../ServiceWrapperEntry/Flow.resx | 408 - .../ServiceWrapperEntry/Program.cs | 99 - .../Properties/AssemblyInfo.cs | 36 - .../Properties/Resources.Designer.cs | 63 - .../Properties/Resources.resx | 117 - .../Properties/Settings.Designer.cs | 26 - .../Properties/Settings.settings | 7 - .../ServiceWrapperEntry/PublicVariable.cs | 32 - .../ServiceWrapperEntry.csproj | 179 - .../ServiceWrapperEntry.csproj.user | 13 - .../ServiceWrapperEntry/Start.Designer.cs | 107 - .../ServiceWrapperEntry/Start.cs | 263 - .../ServiceWrapperEntry/Start.resx | 408 - .../ServiceWrapperEntry/favicon.ico | Bin 16958 -> 0 bytes .../ServiceWrapperEntry/packages.config | 10 - ...23f98718-32b2-4c38-b5b9-aa3fd9241e3a.vsidx | Bin 12927 -> 0 bytes ...392fedf3-4ef0-474a-95e3-6021f9c8513e.vsidx | Bin 192 -> 0 bytes ...7456acef-50d7-43b8-aef3-f3c1a9799585.vsidx | Bin 34457 -> 0 bytes .../.vs/shortcut/FileContentIndex/read.lock | 0 C#/shortcut/.vs/shortcut/v17/.suo | Bin 48128 -> 0 bytes C#/shortcut/shortcut.sln | 25 - C#/shortcut/shortcut/App.config | 6 - C#/shortcut/shortcut/Form1.Designer.cs | 48 - C#/shortcut/shortcut/Form1.cs | 26 - C#/shortcut/shortcut/Form1.resx | 120 - C#/shortcut/shortcut/Program.cs | 28 - .../shortcut/Properties/AssemblyInfo.cs | 36 - .../shortcut/Properties/Resources.Designer.cs | 71 - .../shortcut/Properties/Resources.resx | 117 - .../shortcut/Properties/Settings.Designer.cs | 30 - .../shortcut/Properties/Settings.settings | 7 - .../shortcut/bin/Debug/shortcut.exe.config | 6 - C#/shortcut/shortcut/bin/Debug/shortcut.pdb | Bin 32256 -> 0 bytes .../Release/EasySpider_ShortCut.exe.config | 6 - .../bin/Release/EasySpider_ShortCut.pdb | Bin 32256 -> 0 bytes C#/shortcut/shortcut/favicon.ico | Bin 16958 -> 0 bytes ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 - .../DesignTimeResolveAssemblyReferences.cache | Bin 2117 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7243 -> 0 bytes .../obj/Debug/shortcut.Form1.resources | Bin 180 -> 0 bytes .../shortcut.Properties.Resources.resources | Bin 180 -> 0 bytes .../shortcut.csproj.AssemblyReference.cache | Bin 6030 -> 0 bytes .../shortcut.csproj.CoreCompileInputs.cache | 1 - .../shortcut.csproj.FileListAbsolute.txt | 11 - .../shortcut.csproj.GenerateResource.cache | Bin 126 -> 0 bytes ...cut.csproj.SuggestedBindingRedirects.cache | 0 C#/shortcut/shortcut/obj/Debug/shortcut.pdb | Bin 32256 -> 0 bytes ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 - ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7247 -> 0 bytes .../obj/Release/EasySpider_ShortCut.pdb | Bin 32256 -> 0 bytes .../obj/Release/shortcut.Form1.resources | Bin 180 -> 0 bytes .../shortcut.Properties.Resources.resources | Bin 180 -> 0 bytes .../shortcut.csproj.AssemblyReference.cache | Bin 1618 -> 0 bytes .../shortcut.csproj.CoreCompileInputs.cache | 1 - .../shortcut.csproj.FileListAbsolute.txt | 11 - .../shortcut.csproj.GenerateResource.cache | Bin 126 -> 0 bytes ...cut.csproj.SuggestedBindingRedirects.cache | 0 C#/shortcut/shortcut/shortcut.csproj | 89 - ElectronJS/.gitignore | 7 +- ElectronJS/EasySpider_en.crx | Bin 276644 -> 199653 bytes ElectronJS/EasySpider_zh.crx | Bin 275556 -> 199653 bytes ElectronJS/README.md | 14 +- ElectronJS/clean_win64.cmd | 9 + ElectronJS/config.json | 7 +- ElectronJS/execution_instances/0.json | 741 +- ElectronJS/execution_instances/1.json | 740 - ElectronJS/execution_instances/2.json | 1 - ElectronJS/execution_instances/3.json | 1 - ElectronJS/execution_instances/4.json | 1 - ElectronJS/execution_instances/5.json | 1 - ElectronJS/execution_instances/6.json | 1 - ElectronJS/execution_instances/7.json | 740 - ElectronJS/execution_instances/8.json | 1 - ElectronJS/main.js | 92 +- ElectronJS/mime.json | 483 + ElectronJS/package.cmd | 2 - ElectronJS/package.json | 2 +- ElectronJS/package_win64.cmd | 24 + ElectronJS/server.js | 100 +- ElectronJS/src/bootstrap/test2.html | 2 +- ElectronJS/src/index.html | 212 +- ElectronJS/{ => src/js}/preload.js | 2 +- ElectronJS/src/js/renderer.js | 16 - ElectronJS/src/taskGrid/FlowChart.css | 2 +- ElectronJS/src/taskGrid/FlowChart.html | 8 +- ElectronJS/src/taskGrid/FlowChart_CN.html | 8 +- ElectronJS/src/taskGrid/bootstrap/test2.html | 2 +- ElectronJS/src/taskGrid/invokeTask.html | 50 +- ElectronJS/src/taskGrid/logic.js | 16 +- ElectronJS/src/taskGrid/logic_CN.js | 36 +- ElectronJS/src/taskGrid/newTask.html | 12 +- ElectronJS/src/taskGrid/taskInfo.html | 12 +- ElectronJS/src/taskGrid/taskList.html | 16 +- ElectronJS/stealth.min.js | 7 + ElectronJS/tasks/1.json | 1 - ElectronJS/tasks/11.json | 1 + ElectronJS/tasks/15.json | 1 + ElectronJS/tasks/16.json | 1 + ElectronJS/tasks/17.json | 1 + ElectronJS/tasks/19.json | 1 + ElectronJS/tasks/2.json | 1 + ElectronJS/tasks/20.json | 1 + ElectronJS/tasks/23.json | 1 + ElectronJS/tasks/25.json | 1 + ElectronJS/tasks/27.json | 1 + ElectronJS/tasks/28.json | 1 + ElectronJS/tasks/29.json | 1 + ElectronJS/tasks/3.json | 1 - ElectronJS/tasks/30.json | 1 + ElectronJS/tasks/31.json | 1 + ElectronJS/tasks/32.json | 1 + ElectronJS/tasks/4.json | 53 +- ElectronJS/tasks/5.json | 741 +- ElectronJS/tasks/6.json | 2 +- ElectronJS/tasks/7.json | 1 + Examples/Sample Tasks/services.js | 69548 ++++++++++++++++ ExecuteStage/Program.ipynb | 911 - ExecuteStage/Readme.md | 8 +- ExecuteStage/easyspider_executestage.py | 137 +- ExecuteStage/generateEXE.cmd | 3 - ExecuteStage/generateEXE_win64.cmd | 5 + ExecuteStage/requirements.txt | 1 + ExecuteStage/stealth.min.js | 7 + .../EasySpider_en/_locales/en/messages.json | 18 - .../EasySpider_en/images/api_thumb_450.jpg | Bin 13973 -> 0 bytes Extension/EasySpider_en/images/icon-128.png | Bin 19077 -> 0 bytes Extension/EasySpider_en/images/icon-16.png | Bin 3706 -> 0 bytes Extension/EasySpider_en/images/icon-19.png | Bin 4031 -> 0 bytes Extension/EasySpider_en/images/icon-38.png | Bin 5969 -> 0 bytes Extension/EasySpider_en/manifest.json | 78 - Extension/EasySpider_en/manifest.json.bak | 78 - Extension/EasySpider_en/pages/devtools.html | 14 - Extension/EasySpider_en/pages/options.html | 17 - Extension/EasySpider_en/pages/popup.html | 15 - Extension/EasySpider_en/scripts/background.js | 68 - .../EasySpider_en/scripts/baozhuangscript.js | 276 - .../EasySpider_en/scripts/contentscript.js | 933 - Extension/EasySpider_en/scripts/devtools.js | 1 - .../EasySpider_en/scripts/jquery-3.4.1.min.js | 2 - Extension/EasySpider_en/scripts/jquery.js | 10598 --- .../scripts/messageInteraction.js | 165 - Extension/EasySpider_en/scripts/options.js | 1 - Extension/EasySpider_en/scripts/popup.js | 1 - Extension/EasySpider_en/scripts/vue.js | 11965 --- .../EasySpider_en/styles/contentscript.css | 139 - Extension/EasySpider_en/styles/devtools.css | 0 Extension/EasySpider_en/styles/options.css | 0 Extension/EasySpider_en/styles/popup.css | 0 Extension/EasySpider_mac.crx | Bin 276640 -> 0 bytes .../EasySpider_mac/_locales/en/messages.json | 18 - .../EasySpider_mac/images/api_thumb_450.jpg | Bin 13973 -> 0 bytes Extension/EasySpider_mac/images/icon-128.png | Bin 19077 -> 0 bytes Extension/EasySpider_mac/images/icon-16.png | Bin 3706 -> 0 bytes Extension/EasySpider_mac/images/icon-19.png | Bin 4031 -> 0 bytes Extension/EasySpider_mac/images/icon-38.png | Bin 5969 -> 0 bytes Extension/EasySpider_mac/manifest.json | 78 - Extension/EasySpider_mac/manifest.json.bak | 78 - Extension/EasySpider_mac/pages/devtools.html | 14 - Extension/EasySpider_mac/pages/options.html | 17 - Extension/EasySpider_mac/pages/popup.html | 15 - .../EasySpider_mac/scripts/background.js | 68 - .../EasySpider_mac/scripts/baozhuangscript.js | 276 - .../EasySpider_mac/scripts/contentscript.js | 933 - Extension/EasySpider_mac/scripts/devtools.js | 1 - .../scripts/jquery-3.4.1.min.js | 2 - Extension/EasySpider_mac/scripts/jquery.js | 10598 --- .../scripts/messageInteraction.js | 165 - Extension/EasySpider_mac/scripts/options.js | 1 - Extension/EasySpider_mac/scripts/popup.js | 1 - Extension/EasySpider_mac/scripts/vue.js | 11965 --- .../EasySpider_mac/styles/contentscript.css | 139 - Extension/EasySpider_mac/styles/devtools.css | 0 Extension/EasySpider_mac/styles/options.css | 0 Extension/EasySpider_mac/styles/popup.css | 0 Extension/EasySpider_zh.crx | Bin 275556 -> 0 bytes Extension/EasySpider_zh.pem | 28 - .../EasySpider_zh/_locales/en/messages.json | 18 - .../EasySpider_zh/images/api_thumb_450.jpg | Bin 13973 -> 0 bytes Extension/EasySpider_zh/images/icon-128.png | Bin 19077 -> 0 bytes Extension/EasySpider_zh/images/icon-16.png | Bin 3706 -> 0 bytes Extension/EasySpider_zh/images/icon-19.png | Bin 4031 -> 0 bytes Extension/EasySpider_zh/images/icon-38.png | Bin 5969 -> 0 bytes Extension/EasySpider_zh/manifest.json | 78 - Extension/EasySpider_zh/pages/devtools.html | 14 - Extension/EasySpider_zh/pages/options.html | 17 - Extension/EasySpider_zh/pages/popup.html | 15 - Extension/EasySpider_zh/scripts/background.js | 66 - .../EasySpider_zh/scripts/baozhuangscript.js | 261 - .../EasySpider_zh/scripts/contentscript.js | 933 - Extension/EasySpider_zh/scripts/devtools.js | 1 - .../EasySpider_zh/scripts/jquery-3.4.1.min.js | 2 - Extension/EasySpider_zh/scripts/jquery.js | 10598 --- .../scripts/messageInteraction.js | 164 - Extension/EasySpider_zh/scripts/options.js | 1 - Extension/EasySpider_zh/scripts/popup.js | 1 - Extension/EasySpider_zh/scripts/vue.js | 11965 --- .../EasySpider_zh/styles/contentscript.css | 139 - Extension/EasySpider_zh/styles/devtools.css | 0 Extension/EasySpider_zh/styles/options.css | 0 Extension/EasySpider_zh/styles/popup.css | 0 Extension/manifest_v3 | 1 + Readme.md | 6 +- ServiceGrid/backEnd/.gitignore | 3 - ServiceGrid/backEnd/backEnd/.gitignore | 1 - ServiceGrid/backEnd/backEnd/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 221 -> 0 bytes .../__pycache__/settings.cpython-37.pyc | Bin 2649 -> 0 bytes .../backEnd/__pycache__/urls.cpython-37.pyc | Bin 1279 -> 0 bytes .../backEnd/__pycache__/view.cpython-37.pyc | Bin 2902 -> 0 bytes .../backEnd/__pycache__/wsgi.cpython-37.pyc | Bin 624 -> 0 bytes ServiceGrid/backEnd/backEnd/settings.py | 149 - ServiceGrid/backEnd/backEnd/urls.py | 30 - ServiceGrid/backEnd/backEnd/view.py | 119 - ServiceGrid/backEnd/backEnd/wsgi.py | 16 - ServiceGrid/backEnd/db.sqlite3 | Bin 131072 -> 0 bytes ServiceGrid/backEnd/manage.py | 21 - ServiceGrid/backEnd/server.conf | 40 - ServiceGrid/frontEnd/FlowChart.css | 203 - ServiceGrid/frontEnd/FlowChart.html | 320 - ServiceGrid/frontEnd/FlowChart.js | 561 - ServiceGrid/frontEnd/FlowChart_CN.html | 317 - ServiceGrid/frontEnd/FlowChart_CN.js | 561 - ServiceGrid/frontEnd/bootstrap/CURD.html | 525 - .../bootstrap/ToolBox - linkList.html | 456 - ServiceGrid/frontEnd/bootstrap/ToolKit.html | 138 - .../frontEnd/bootstrap/baozhuangscript.js | 136 - .../frontEnd/bootstrap/baozhuangscript3.js | 83 - ServiceGrid/frontEnd/bootstrap/content.html | 66 - .../frontEnd/bootstrap/css/bootstrap-grid.css | 3899 - .../bootstrap/css/bootstrap-grid.css.map | 1 - .../bootstrap/css/bootstrap-grid.min.css | 7 - .../bootstrap/css/bootstrap-grid.min.css.map | 1 - .../bootstrap/css/bootstrap-reboot.css | 327 - .../bootstrap/css/bootstrap-reboot.css.map | 1 - .../bootstrap/css/bootstrap-reboot.min.css | 8 - .../css/bootstrap-reboot.min.css.map | 1 - .../frontEnd/bootstrap/css/bootstrap.css | 10594 --- .../frontEnd/bootstrap/css/bootstrap.css.map | 1 - .../frontEnd/bootstrap/css/bootstrap.min.css | 7 - .../bootstrap/css/bootstrap.min.css.map | 1 - .../fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../frontEnd/bootstrap/jquery-1.4.2.min.js | 2 - .../frontEnd/bootstrap/js/bootstrap.bundle.js | 7134 -- .../bootstrap/js/bootstrap.bundle.js.map | 1 - .../bootstrap/js/bootstrap.bundle.min.js | 7 - .../bootstrap/js/bootstrap.bundle.min.js.map | 1 - .../frontEnd/bootstrap/js/bootstrap.js | 4521 - .../frontEnd/bootstrap/js/bootstrap.js.map | 1 - .../frontEnd/bootstrap/js/bootstrap.min.js | 7 - .../bootstrap/js/bootstrap.min.js.map | 1 - ServiceGrid/frontEnd/bootstrap/test.html | 41 - ServiceGrid/frontEnd/bootstrap/test2.html | 117 - ServiceGrid/frontEnd/bootstrap/test3.html | 24 - ServiceGrid/frontEnd/bootstrap/test4.html | 113 - ServiceGrid/frontEnd/favicon.ico | Bin 16958 -> 0 bytes ServiceGrid/frontEnd/global.js | 14 - ServiceGrid/frontEnd/invokeTask.html | 230 - ServiceGrid/frontEnd/jquery-3.4.1.min.js | 2 - ServiceGrid/frontEnd/logic.js | 352 - ServiceGrid/frontEnd/logic_CN.js | 335 - ServiceGrid/frontEnd/logo.jpg | Bin 13973 -> 0 bytes ServiceGrid/frontEnd/newTask.html | 105 - ServiceGrid/frontEnd/package-lock.json | 11 - ServiceGrid/frontEnd/taskInfo.html | 157 - ServiceGrid/frontEnd/taskList.html | 121 - ServiceGrid/frontEnd/vue.js | 11965 --- ServiceGrid/static/.gitattributes | 1 - 280 files changed, 70628 insertions(+), 124219 deletions(-) delete mode 100644 C#/ServiceWrapperEntry/.gitignore delete mode 100644 C#/ServiceWrapperEntry/EasySpiderEntry.sln delete mode 100644 C#/ServiceWrapperEntry/Readme.md delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/.gitignore delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/App.config delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Program.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/AssemblyInfo.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/PublicVariable.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.Designer.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.cs delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.resx delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/favicon.ico delete mode 100644 C#/ServiceWrapperEntry/ServiceWrapperEntry/packages.config delete mode 100644 C#/shortcut/.vs/shortcut/FileContentIndex/23f98718-32b2-4c38-b5b9-aa3fd9241e3a.vsidx delete mode 100644 C#/shortcut/.vs/shortcut/FileContentIndex/392fedf3-4ef0-474a-95e3-6021f9c8513e.vsidx delete mode 100644 C#/shortcut/.vs/shortcut/FileContentIndex/7456acef-50d7-43b8-aef3-f3c1a9799585.vsidx delete mode 100644 C#/shortcut/.vs/shortcut/FileContentIndex/read.lock delete mode 100644 C#/shortcut/.vs/shortcut/v17/.suo delete mode 100644 C#/shortcut/shortcut.sln delete mode 100644 C#/shortcut/shortcut/App.config delete mode 100644 C#/shortcut/shortcut/Form1.Designer.cs delete mode 100644 C#/shortcut/shortcut/Form1.cs delete mode 100644 C#/shortcut/shortcut/Form1.resx delete mode 100644 C#/shortcut/shortcut/Program.cs delete mode 100644 C#/shortcut/shortcut/Properties/AssemblyInfo.cs delete mode 100644 C#/shortcut/shortcut/Properties/Resources.Designer.cs delete mode 100644 C#/shortcut/shortcut/Properties/Resources.resx delete mode 100644 C#/shortcut/shortcut/Properties/Settings.Designer.cs delete mode 100644 C#/shortcut/shortcut/Properties/Settings.settings delete mode 100644 C#/shortcut/shortcut/bin/Debug/shortcut.exe.config delete mode 100644 C#/shortcut/shortcut/bin/Debug/shortcut.pdb delete mode 100644 C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.exe.config delete mode 100644 C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.pdb delete mode 100644 C#/shortcut/shortcut/favicon.ico delete mode 100644 C#/shortcut/shortcut/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs delete mode 100644 C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferences.cache delete mode 100644 C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.Form1.resources delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.Properties.Resources.resources delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.csproj.AssemblyReference.cache delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.csproj.CoreCompileInputs.cache delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.csproj.FileListAbsolute.txt delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.csproj.GenerateResource.cache delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.csproj.SuggestedBindingRedirects.cache delete mode 100644 C#/shortcut/shortcut/obj/Debug/shortcut.pdb delete mode 100644 C#/shortcut/shortcut/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs delete mode 100644 C#/shortcut/shortcut/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 C#/shortcut/shortcut/obj/Release/EasySpider_ShortCut.pdb delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.Form1.resources delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.Properties.Resources.resources delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.csproj.AssemblyReference.cache delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.csproj.CoreCompileInputs.cache delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.csproj.FileListAbsolute.txt delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.csproj.GenerateResource.cache delete mode 100644 C#/shortcut/shortcut/obj/Release/shortcut.csproj.SuggestedBindingRedirects.cache delete mode 100644 C#/shortcut/shortcut/shortcut.csproj create mode 100644 ElectronJS/clean_win64.cmd delete mode 100644 ElectronJS/execution_instances/1.json delete mode 100644 ElectronJS/execution_instances/2.json delete mode 100644 ElectronJS/execution_instances/3.json delete mode 100644 ElectronJS/execution_instances/4.json delete mode 100644 ElectronJS/execution_instances/5.json delete mode 100644 ElectronJS/execution_instances/6.json delete mode 100644 ElectronJS/execution_instances/7.json delete mode 100644 ElectronJS/execution_instances/8.json create mode 100644 ElectronJS/mime.json delete mode 100644 ElectronJS/package.cmd create mode 100644 ElectronJS/package_win64.cmd rename ElectronJS/{ => src/js}/preload.js (78%) delete mode 100644 ElectronJS/src/js/renderer.js create mode 100644 ElectronJS/stealth.min.js delete mode 100644 ElectronJS/tasks/1.json create mode 100644 ElectronJS/tasks/11.json create mode 100644 ElectronJS/tasks/15.json create mode 100644 ElectronJS/tasks/16.json create mode 100644 ElectronJS/tasks/17.json create mode 100644 ElectronJS/tasks/19.json create mode 100644 ElectronJS/tasks/2.json create mode 100644 ElectronJS/tasks/20.json create mode 100644 ElectronJS/tasks/23.json create mode 100644 ElectronJS/tasks/25.json create mode 100644 ElectronJS/tasks/27.json create mode 100644 ElectronJS/tasks/28.json create mode 100644 ElectronJS/tasks/29.json delete mode 100644 ElectronJS/tasks/3.json create mode 100644 ElectronJS/tasks/30.json create mode 100644 ElectronJS/tasks/31.json create mode 100644 ElectronJS/tasks/32.json create mode 100644 ElectronJS/tasks/7.json create mode 100644 Examples/Sample Tasks/services.js delete mode 100644 ExecuteStage/Program.ipynb delete mode 100644 ExecuteStage/generateEXE.cmd create mode 100644 ExecuteStage/generateEXE_win64.cmd create mode 100644 ExecuteStage/stealth.min.js delete mode 100644 Extension/EasySpider_en/_locales/en/messages.json delete mode 100644 Extension/EasySpider_en/images/api_thumb_450.jpg delete mode 100644 Extension/EasySpider_en/images/icon-128.png delete mode 100644 Extension/EasySpider_en/images/icon-16.png delete mode 100644 Extension/EasySpider_en/images/icon-19.png delete mode 100644 Extension/EasySpider_en/images/icon-38.png delete mode 100644 Extension/EasySpider_en/manifest.json delete mode 100644 Extension/EasySpider_en/manifest.json.bak delete mode 100644 Extension/EasySpider_en/pages/devtools.html delete mode 100644 Extension/EasySpider_en/pages/options.html delete mode 100644 Extension/EasySpider_en/pages/popup.html delete mode 100644 Extension/EasySpider_en/scripts/background.js delete mode 100644 Extension/EasySpider_en/scripts/baozhuangscript.js delete mode 100644 Extension/EasySpider_en/scripts/contentscript.js delete mode 100644 Extension/EasySpider_en/scripts/devtools.js delete mode 100644 Extension/EasySpider_en/scripts/jquery-3.4.1.min.js delete mode 100644 Extension/EasySpider_en/scripts/jquery.js delete mode 100644 Extension/EasySpider_en/scripts/messageInteraction.js delete mode 100644 Extension/EasySpider_en/scripts/options.js delete mode 100644 Extension/EasySpider_en/scripts/popup.js delete mode 100644 Extension/EasySpider_en/scripts/vue.js delete mode 100644 Extension/EasySpider_en/styles/contentscript.css delete mode 100644 Extension/EasySpider_en/styles/devtools.css delete mode 100644 Extension/EasySpider_en/styles/options.css delete mode 100644 Extension/EasySpider_en/styles/popup.css delete mode 100644 Extension/EasySpider_mac.crx delete mode 100644 Extension/EasySpider_mac/_locales/en/messages.json delete mode 100644 Extension/EasySpider_mac/images/api_thumb_450.jpg delete mode 100644 Extension/EasySpider_mac/images/icon-128.png delete mode 100644 Extension/EasySpider_mac/images/icon-16.png delete mode 100644 Extension/EasySpider_mac/images/icon-19.png delete mode 100644 Extension/EasySpider_mac/images/icon-38.png delete mode 100644 Extension/EasySpider_mac/manifest.json delete mode 100644 Extension/EasySpider_mac/manifest.json.bak delete mode 100644 Extension/EasySpider_mac/pages/devtools.html delete mode 100644 Extension/EasySpider_mac/pages/options.html delete mode 100644 Extension/EasySpider_mac/pages/popup.html delete mode 100644 Extension/EasySpider_mac/scripts/background.js delete mode 100644 Extension/EasySpider_mac/scripts/baozhuangscript.js delete mode 100644 Extension/EasySpider_mac/scripts/contentscript.js delete mode 100644 Extension/EasySpider_mac/scripts/devtools.js delete mode 100644 Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js delete mode 100644 Extension/EasySpider_mac/scripts/jquery.js delete mode 100644 Extension/EasySpider_mac/scripts/messageInteraction.js delete mode 100644 Extension/EasySpider_mac/scripts/options.js delete mode 100644 Extension/EasySpider_mac/scripts/popup.js delete mode 100644 Extension/EasySpider_mac/scripts/vue.js delete mode 100644 Extension/EasySpider_mac/styles/contentscript.css delete mode 100644 Extension/EasySpider_mac/styles/devtools.css delete mode 100644 Extension/EasySpider_mac/styles/options.css delete mode 100644 Extension/EasySpider_mac/styles/popup.css delete mode 100644 Extension/EasySpider_zh.crx delete mode 100644 Extension/EasySpider_zh.pem delete mode 100644 Extension/EasySpider_zh/_locales/en/messages.json delete mode 100644 Extension/EasySpider_zh/images/api_thumb_450.jpg delete mode 100644 Extension/EasySpider_zh/images/icon-128.png delete mode 100644 Extension/EasySpider_zh/images/icon-16.png delete mode 100644 Extension/EasySpider_zh/images/icon-19.png delete mode 100644 Extension/EasySpider_zh/images/icon-38.png delete mode 100644 Extension/EasySpider_zh/manifest.json delete mode 100644 Extension/EasySpider_zh/pages/devtools.html delete mode 100644 Extension/EasySpider_zh/pages/options.html delete mode 100644 Extension/EasySpider_zh/pages/popup.html delete mode 100644 Extension/EasySpider_zh/scripts/background.js delete mode 100644 Extension/EasySpider_zh/scripts/baozhuangscript.js delete mode 100644 Extension/EasySpider_zh/scripts/contentscript.js delete mode 100644 Extension/EasySpider_zh/scripts/devtools.js delete mode 100644 Extension/EasySpider_zh/scripts/jquery-3.4.1.min.js delete mode 100644 Extension/EasySpider_zh/scripts/jquery.js delete mode 100644 Extension/EasySpider_zh/scripts/messageInteraction.js delete mode 100644 Extension/EasySpider_zh/scripts/options.js delete mode 100644 Extension/EasySpider_zh/scripts/popup.js delete mode 100644 Extension/EasySpider_zh/scripts/vue.js delete mode 100644 Extension/EasySpider_zh/styles/contentscript.css delete mode 100644 Extension/EasySpider_zh/styles/devtools.css delete mode 100644 Extension/EasySpider_zh/styles/options.css delete mode 100644 Extension/EasySpider_zh/styles/popup.css create mode 160000 Extension/manifest_v3 delete mode 100644 ServiceGrid/backEnd/.gitignore delete mode 100644 ServiceGrid/backEnd/backEnd/.gitignore delete mode 100644 ServiceGrid/backEnd/backEnd/__init__.py delete mode 100644 ServiceGrid/backEnd/backEnd/__pycache__/__init__.cpython-37.pyc delete mode 100644 ServiceGrid/backEnd/backEnd/__pycache__/settings.cpython-37.pyc delete mode 100644 ServiceGrid/backEnd/backEnd/__pycache__/urls.cpython-37.pyc delete mode 100644 ServiceGrid/backEnd/backEnd/__pycache__/view.cpython-37.pyc delete mode 100644 ServiceGrid/backEnd/backEnd/__pycache__/wsgi.cpython-37.pyc delete mode 100644 ServiceGrid/backEnd/backEnd/settings.py delete mode 100644 ServiceGrid/backEnd/backEnd/urls.py delete mode 100644 ServiceGrid/backEnd/backEnd/view.py delete mode 100644 ServiceGrid/backEnd/backEnd/wsgi.py delete mode 100644 ServiceGrid/backEnd/db.sqlite3 delete mode 100644 ServiceGrid/backEnd/manage.py delete mode 100644 ServiceGrid/backEnd/server.conf delete mode 100644 ServiceGrid/frontEnd/FlowChart.css delete mode 100644 ServiceGrid/frontEnd/FlowChart.html delete mode 100644 ServiceGrid/frontEnd/FlowChart.js delete mode 100644 ServiceGrid/frontEnd/FlowChart_CN.html delete mode 100644 ServiceGrid/frontEnd/FlowChart_CN.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/CURD.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/ToolBox - linkList.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/ToolKit.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/baozhuangscript.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/baozhuangscript3.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/content.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap.css delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap.css.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap.min.css delete mode 100644 ServiceGrid/frontEnd/bootstrap/css/bootstrap.min.css.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100644 ServiceGrid/frontEnd/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100644 ServiceGrid/frontEnd/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100644 ServiceGrid/frontEnd/bootstrap/fonts/glyphicons-halflings-regular.woff delete mode 100644 ServiceGrid/frontEnd/bootstrap/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 ServiceGrid/frontEnd/bootstrap/jquery-1.4.2.min.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.bundle.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.bundle.js.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.bundle.min.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.bundle.min.js.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.js.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.min.js delete mode 100644 ServiceGrid/frontEnd/bootstrap/js/bootstrap.min.js.map delete mode 100644 ServiceGrid/frontEnd/bootstrap/test.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/test2.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/test3.html delete mode 100644 ServiceGrid/frontEnd/bootstrap/test4.html delete mode 100644 ServiceGrid/frontEnd/favicon.ico delete mode 100644 ServiceGrid/frontEnd/global.js delete mode 100644 ServiceGrid/frontEnd/invokeTask.html delete mode 100644 ServiceGrid/frontEnd/jquery-3.4.1.min.js delete mode 100644 ServiceGrid/frontEnd/logic.js delete mode 100644 ServiceGrid/frontEnd/logic_CN.js delete mode 100644 ServiceGrid/frontEnd/logo.jpg delete mode 100644 ServiceGrid/frontEnd/newTask.html delete mode 100644 ServiceGrid/frontEnd/package-lock.json delete mode 100644 ServiceGrid/frontEnd/taskInfo.html delete mode 100644 ServiceGrid/frontEnd/taskList.html delete mode 100644 ServiceGrid/frontEnd/vue.js delete mode 100644 ServiceGrid/static/.gitattributes diff --git a/.gitignore b/.gitignore index 577f7839..2b9048cd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,12 @@ node_modules/ ServiceWrapper/ Data/ /GPUCache +C#/ +ServiceGrid/ +Releases/ +old_code *.exe *.ini *.7z -*.mp4 \ No newline at end of file +*.mp4 + diff --git a/C#/ServiceWrapperEntry/.gitignore b/C#/ServiceWrapperEntry/.gitignore deleted file mode 100644 index d8ab7f44..00000000 --- a/C#/ServiceWrapperEntry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.vs -packages diff --git a/C#/ServiceWrapperEntry/EasySpiderEntry.sln b/C#/ServiceWrapperEntry/EasySpiderEntry.sln deleted file mode 100644 index 52f1cbeb..00000000 --- a/C#/ServiceWrapperEntry/EasySpiderEntry.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32929.385 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceWrapperEntry", "ServiceWrapperEntry\ServiceWrapperEntry.csproj", "{8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}.Debug|x64.ActiveCfg = Debug|x64 - {8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}.Debug|x64.Build.0 = Debug|x64 - {8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}.Release|x64.ActiveCfg = Release|x64 - {8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {F3EC44B3-E8DF-40FA-ABEB-9F5BAC89A723} - EndGlobalSection -EndGlobal diff --git a/C#/ServiceWrapperEntry/Readme.md b/C#/ServiceWrapperEntry/Readme.md deleted file mode 100644 index 11d21dee..00000000 --- a/C#/ServiceWrapperEntry/Readme.md +++ /dev/null @@ -1,11 +0,0 @@ -# 客户端开发编译方式 - -0. 安装VS2019或以上版本,勾选windows应用程序开发(.Net Framework 4.7.2版本及以上)。 - -1. 拷贝客户端(可执行程序)servicewrapper文件夹内所有文件到\ServiceWrapperEntry\bin\x64\Debug文件夹(包括Chrome文件夹) - -2. 打开sln文件,右键点击解决方案,点击“清理解决方案”后,再点击“还原Nuget包”。 - -3. 右键点击项目,点击“清理”后,再点击“重新生成项目”。 - -4. 编译即成功。 diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/.gitignore b/C#/ServiceWrapperEntry/ServiceWrapperEntry/.gitignore deleted file mode 100644 index 557ab36b..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -obj/* -bin/* \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/App.config b/C#/ServiceWrapperEntry/ServiceWrapperEntry/App.config deleted file mode 100644 index 56efbc7b..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs deleted file mode 100644 index 5ef37ad1..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs +++ /dev/null @@ -1,174 +0,0 @@ -using CefSharp; -using CefSharp.Internals; -using CefSharp.Web; -using CefSharp.WinForms; -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Runtime.InteropServices; - -namespace EasySpider -{ - public class MouseHelper - { - [System.Runtime.InteropServices.DllImport("user32")] - public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); - //移动鼠标 - public const int MOUSEEVENTF_MOVE = 0x0001; - //模拟鼠标左键按下 - public const int MOUSEEVENTF_LEFTDOWN = 0x0002; - //模拟鼠标左键抬起 - public const int MOUSEEVENTF_LEFTUP = 0x0004; - //模拟鼠标右键按下 - public const int MOUSEEVENTF_RIGHTDOWN = 0x0008; - //模拟鼠标右键抬起 - public const int MOUSEEVENTF_RIGHTUP = 0x0010; - //模拟鼠标中键按下 - public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; - //模拟鼠标中键抬起 - public const int MOUSEEVENTF_MIDDLEUP = 0x0040; - //标示是否采用绝对坐标 - public const int MOUSEEVENTF_ABSOLUTE = 0x8000; - [DllImport("user32.dll")] - public static extern bool SetCursorPos(int X, int Y); - } - public class Parameters - { - /// - /// - /// - public string url { get; set; } - } - - public class Data - { - /// - /// - /// - public int option { get; set; } - /// - /// - /// - public Parameters parameters { get; set; } - } - - public class FlowMessage - { - /// - /// - /// - public int type { get; set; } - /// - /// - /// - public Data data { get; set; } - } - - public class Message - { - /// - /// - /// - public int id { get; set; } - public string links { get; set; } - public string link { get; set; } - //键盘输入的值 - public string keyboardStr { get; set; } - //直接转接流程图的消息 - public string pipe { get; set; } - } - - - public class Msg - { - /// - /// - /// - public int type { get; set; } - /// - /// 从哪里来 - /// - public int from { get; set; } - public Message message { get; set; } - } - - public class RequestContextHandler : IRequestContextHandler - { - public IResourceRequestHandler GetResourceRequestHandler(IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) - { - return null; - } - - public bool OnBeforePluginLoad(string mimeType, string url, bool isMainFrame, string topOriginUrl, WebPluginInfo pluginInfo, ref PluginPolicy pluginPolicy) - { - return true; - } - - public void OnRequestContextInitialized(IRequestContext requestContext) - { - - } - } - //加载窗口时的事件设置 - public class RenderProcessMessageHandler : IRenderProcessMessageHandler - { - public void OnContextReleased(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame) - { - //throw new NotImplementedException(); - } - - public void OnFocusedNodeChanged(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IDomNode node) - { - //throw new NotImplementedException(); - } - - public void OnUncaughtException(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, JavascriptException exception) - { - //throw new NotImplementedException(); - } - - // Wait for the underlying JavaScript Context to be created. This is only called for the main frame. - // If the page has no JavaScript, no context will be created. - void IRenderProcessMessageHandler.OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame) - { - //MessageBox.Show("zhixing"); - - } - } - - /// - /// 在自己窗口打开链接 - /// - internal class OpenPageSelf : ILifeSpanHandler - { - public bool DoClose(IWebBrowser browserControl, IBrowser browser) - { - return false; - } - - public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser) - { - - } - - public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser) - { - - } - - public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, -string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, -IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) - { - newBrowser = null; - var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; - chromiumWebBrowser.Load(targetUrl); - return true; //Return true to cancel the popup creation copyright by codebye.com. - } - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs deleted file mode 100644 index e0928024..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs +++ /dev/null @@ -1,90 +0,0 @@ -namespace EasySpider -{ - partial class Flow - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows 窗体设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要修改 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Flow)); - this.panel1 = new System.Windows.Forms.Panel(); - this.button1 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // panel1 - // - this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.AutoSize = true; - this.panel1.Location = new System.Drawing.Point(3, 4); - this.panel1.Margin = new System.Windows.Forms.Padding(4); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(1231, 845); - this.panel1.TabIndex = 0; - this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint_1); - // - // button1 - // - this.button1.AutoSize = true; - this.button1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.button1.Font = new System.Drawing.Font("SimSun", 16.125F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.button1.Location = new System.Drawing.Point(0, 622); - this.button1.Margin = new System.Windows.Forms.Padding(2); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(1241, 37); - this.button1.TabIndex = 1; - this.button1.Text = "←"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Visible = false; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // Flow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1241, 659); - this.Controls.Add(this.button1); - this.Controls.Add(this.panel1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(4); - this.Name = "Flow"; - this.Text = "EasySpider: NoCode Visual Web Crawler"; - this.Load += new System.EventHandler(this.Flow_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - - - - #endregion - - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Button button1; - } -} - diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs deleted file mode 100644 index 55fc2eed..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using CefSharp; -using CefSharp.WinForms; -using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码 -using System.Net; -using System.Diagnostics; - -namespace EasySpider -{ - - public partial class Flow : Form, IMessageFilter - { - public ChromiumWebBrowser chromeBrowser; - public bool ChromeNow = false; //标记现在所在窗口是否为chrome - public static string flowChartUrl = PublicVariable.frontEndAddress + "/FlowChart.html?id="; //流程图所在的位置 - public string url = flowChartUrl + "-1&backEndAddressServiceWrapper=" + PublicVariable.backEndAddress; - public Flow() - { - InitializeComponent(); - } - public Flow(string link) - { - InitializeComponent(); - url = link; - button1.Show(); - } - // P/Invoke declarations - [DllImport("user32.dll")] - public static extern IntPtr GetForegroundWindow(); - [DllImport("user32.dll")] - private extern static bool SwapMouseButton(bool fSwap); - [System.Runtime.InteropServices.DllImport("user32.dll")] - public static extern int SetForegroundWindow(IntPtr hwnd); - public const int WM_CLOSE = 0x10; - public bool closedriver = true; - [DllImport("user32.dll", EntryPoint = "SendMessage")] - private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); - - public bool PreFilterMessage(ref System.Windows.Forms.Message SystemMessage) - { - if (SystemMessage.Msg >= 513 && SystemMessage.Msg <= 515) - {//不响应鼠标左键消息 - return true; - } - return false; - } - private void Flow_Load(object sender, EventArgs e) - { - InitializeChromium(); - PublicVariable.isInitialized = true; - //保证并排平铺 - int width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Width; - int height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Height; - StartPosition = FormStartPosition.Manual; //窗体的位置由Location属性决定 - Location = (Point)new Size(0, 0); //窗体的起始位置为(x,y) - Width = width; - Height = Convert.ToInt32(height * 0.8); - FormClosing += Flow_FormClosing; - } - - //初始化浏览器并启动 - public void InitializeChromium() - { - if (!PublicVariable.isInitialized)//只初始化一次 - { - CefSettings settings = new CefSettings(); - Cef.Initialize(settings); - } - // Create a browser component - chromeBrowser = new ChromiumWebBrowser(url); - //跨域访问允许 - chromeBrowser.BrowserSettings.FileAccessFromFileUrls = CefState.Enabled; - chromeBrowser.BrowserSettings.UniversalAccessFromFileUrls = CefState.Enabled; - //textBox1.Text = url; - // Add it to the form and fill it to the form window. - panel1.Controls.Add(chromeBrowser); - chromeBrowser.Dock = DockStyle.Fill; - chromeBrowser.RenderProcessMessageHandler = new RenderProcessMessageHandler(); - } - - //窗体关闭时,记得停止浏览器 - private void Flow_FormClosing(object sender, FormClosingEventArgs e) - { - if(closedriver) - { - //Cef.Shutdown();//关掉内嵌控件 - try - { - //PublicVariable.chrome.Kill();//关掉chrome - //SendMessage(Start.chromeId, WM_CLOSE, 0, 0);//关掉chrome - Start.browser.Quit();//关掉chromedriver - } - catch (Exception) - { - } - } - PublicVariable.start.Show(); //重新显示初始框 - } - - private void panel1_Paint(object sender, PaintEventArgs e) - { - SetForegroundWindow(Start.chromeId); //打开流程图窗口后将chrome窗口显示到最前方 - } - - private void button1_Click(object sender, EventArgs e) - { - chromeBrowser.Back(); - } - - private void panel1_Paint_1(object sender, PaintEventArgs e) - { - - } - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx deleted file mode 100644 index 023beaa3..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx +++ /dev/null @@ -1,408 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA - AAD///////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7//v7+///////+/v7//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+//7+/v/+/v7///////// - /////////////////////////v7+//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/+/v7//v7+///////+/v7//v7+//////////////////7+/v/+/v7//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////+/v7//v7+/////////////v7+//7+/v/+/v7////////////+/v7//v7+//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+//// - /////////v7+//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//7+/v/+/v7////////////////////////////+/v7/+vr6/5eX - l/+YmJj/+vr6//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7///////////////////////// - ///9/f3/4uLi/0lJSf8AAAD/AAAA/0lJSf/j4+P//f39//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////9/f3/ubm5/xkZGf8BAQH/AAAA/wAAAP8BAQH/GRkZ/7m5uf/+/v7//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////9/f3/kpKS/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB - Af8GBgb/kpKS//7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////9/f3/hoaG/wICAv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv+FhYX//f39//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////7+/v/+/v7/q6ur/wQE - BP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/6ysrP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7/9PT0/x8fH/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB - Af8dHR3/9fX1//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+/7W1tf8AAAD/AAAA/wICAv8aGhr/AwMD/wAAAP8AAAD/AAAA/wAA - AP8EBAT/Ghoa/wICAv8AAAD/AAAA/7a2tv////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v+RkZH/AAAA/wAAAP8gICD/+/v7/9fX - 1/9UVFT/AgIC/wICAv9VVVX/2NjY//v7+/8fHx//AAAA/wAAAP+SkpL///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/mpqa/wAA - AP8AAAD/Nzc3//7+/v/+/v7/ysrK/8TExP/Dw8P/ycnJ//7+/v/9/f3/ODg4/wAAAP8AAAD/mpqa//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+/8PDw/8AAAD/AAAA/zU1Nf/+/v7//v7+/83Nzf+Wlpb/lpaW/87Ozv/+/v7//f39/zU1 - Nf8AAAD/AAAA/8PDw/////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/19fX/EBAQ/wAAAP8YGBj/4uLi/6mpqf8tLS3/AgIC/wEB - Af8tLS3/qqqq/+Hh4f8YGBj/AAAA/xAQEP/19fX///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////v7+//7+/v/+/v7//v7+/1lZWf8AAAD/AQEB/wMD - A/8DAwP/Li4u/2xsbP9vb2//NDQ0/wICAv8DAwP/AAAA/wAAAP9ZWVn//f39//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////7+/v/+/v7///////// - //+0tLT/AAAA/wAAAP8JCQn/np6e/+/v7/+1tbX/srKy/+7u7v+qqqr/DAwM/wAAAP8BAQH/tLS0//// - //////////////7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+////////////+Pj4/x4eHv8CAgL/mJiY/8XFxf8fHx//AQEB/wAAAP8aGhr/vr6+/6Wl - pf8BAQH/HR0d//j4+P/////////////////+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v99fX3/LS0t/+bm5v8YGBj/AAAA/wAA - AP8AAAD/AAAA/xQUFP/j4+P/MjIy/319ff/9/f3///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/3t7e/4GB - gf+BgYH/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/enp6/4WFhf/e3t7//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////39/f/n5+f/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zIyMv/o6Oj//f39//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+//// - ///////////////////////////////////+/v7/7+/v/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8HBwf/8fHx//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v///////////////////////////////////////f39/9jY2P+IiIj/fX19/zEx - Mf8ICAj/CAgI/y4uLv99fX3/iIiI/9nZ2f/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////Hx - 8f9mZmb/KSkp/zY2Nv+ioqL/QUFB/z09Pf+kpKT/PDw8/ygoKP9oaGj/8fHx//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+//7+/v+CgoL/BwcH/wcHB/8BAQH/DQ0N/7Gxsf+rq6v/Dg4O/wEBAf8GBgb/BwcH/4OD - g//9/f3//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+//7+/v/+/v7//v7+//j4+P/29vb/LCws/wcHB/8HBwf/AAAA/wMDA/9lZWX/Y2Nj/wAA - AP8AAAD/BgYG/wcHB/8sLCz/9fX1//f39//+/v7//v7+//7+/v/+/v7//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//Pz8//X19f/vr6+/4iIiP8yMjL/srKy/wEBAf8GBgb/BAQE/wEB - Af8nJyf/aGho/2FhYf8lJSX/AQEB/wcHB/8HBwf/AQEB/7Kysv80NDT/iIiI/729vf/X19f/8vLy//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////6Ojo/1RUVP8FBQX/AAAA/wAAAP8AAAD/AgIC/6Cg - oP/V1dX/rq6u/62trf+rq6v/ioqK/05OTv9QUFD/kJCQ/7CwsP+pqan/rq6u/9XV1f+fn5//AwMD/wAA - AP8AAAD/AAAA/wYGBv9UVFT/6enp//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////+vr6/z8/P/8BAQH/AAAA/wAA - AP8AAAD/AAAA/wcHB/+vr6//+fn5/xQUFP8ICAj/CAgI/wcHB/8JCQn/CAgI/wcHB/8HBwf/CAgI/xQU - FP/4+Pj/sLCw/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP/6+vr///////////////////////// - /////////////////////////v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+/6am - pv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf+Li4v//v7+//z8/P++vr7/v7+//4ODg/95eXn/2NjY/9LS - 0v9ycnL/eXl5/8DAwP+9vb3//Pz8//39/f+Li4v/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/p6en//7+ - /v////////////////////////////////////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v////////////////////////////////////////////////////////////////////////////// - /////////v7+//z8/P86Ojr/AAAA/wAAAP8AAAD/AAAA/wEBAf9QUFD/+/v7//7+/v/q6ur/GBgY/wkJ - Cf+ampr//f39//7+/v/+/v7//f39/5mZmf8ICAj/GBgY/+vr6//+/v7/+vr6/09PT/8BAQH/AAAA/wAA - AP8AAAD/AAAA/zo6Ov/8/Pz///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/c3Nz/BQUF/wAAAP8AAAD/AAAA/wgICP9nZ2f/8vLy//7+ - /v/+/v7/pqam/wAAAP8BAQH/m5ub//7+/v////////////////+ampr/AAAA/wEBAf+mpqb//v7+//7+ - /v/y8vL/Z2dn/wgICP8BAQH/AAAA/wAAAP8EBAT/3Nzc//////////////////////////////////// - ///////////////////////////////////+/v7//v7+//////////////////////////////////// - ///////////////////////////////////////////////////+/v7/+fn5/93d3f/Gxsb/vLy8/8nJ - yf/v7+///f39//7+/v///////f39/0RERP8AAAD/AgIC/+Dg4P//////////////////////39/f/wEB - Af8AAAD/Q0ND//39/f/+/v7//v7+//39/f/v7+//ycnJ/729vf/Gxsb/3Nzc//n5+f////////////// - /////////////////////////////////////////////////////////v7+//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7//v7+/7y8vP8BAQH/AAAA/zMzM//9/f3///////// - //////////////39/f80NDT/AAAA/wICAv+8vLz//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7//v7+/+jo6P8lJSX/AAAA/wEB - Af+Dg4P//v7+///////////////////////+/v7/g4OD/wEBAf8AAAD/JCQk/+rq6v/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//f39/+np - 6f89PT3/AAAA/wAAAP8AAAD/y8vL//7+/v///////////////////////////8vLy/8AAAD/AAAA/wAA - AP86Ojr/6enp//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//f39/8jIyP8oKCj/AAAA/wEBAf8sLCz/DQ0N//j4+P/+/v7//v7+//7+/v////////////// - ///39/f/Dg4O/ywsLP8CAgL/AAAA/ykpKf/IyMj//v7+//7+/v////////////7+/v/+/v7///////// - //////////////////////////////////////////////////////////////7+/v/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/9/f3/5+fn/29vb/8HBwf/AAAA/wEBAf9NTU3/2NjY/ysrK//+/v7///////7+ - /v/+/v7//////////////////f39/ysrK//Y2Nj/TU1N/wEBAf8AAAD/BgYG/25ubv/o6Oj//f39//7+ - /v/+/v7//v7+/////////////v7+//7+/v/+/v7//v7+/////////////v7+//7+/v/+/v7///////// - ///+/v7//v7+//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////39/f/q6ur/fHx8/xAQEP8BAQH/AgIC/xISEv8qKir/9vb2//T0 - 9P86Ojr//v7+///////+/v7//v7+//////////////////39/f85OTn/8/Pz//X19f8qKir/ExMT/wEB - Af8AAAD/EBAQ/3x8fP/q6ur//v7+//7+/v////////////7+/v/+/v7//v7+//7+/v////////////7+ - /v/+/v7//v7+//////////////////7+/v/+/v7///////////////////////////////////////// - ///////////////////////////////////+/v7//f39//Ly8v+CgoL/EhIS/wICAv8BAQH/CAgI/62t - rf+rq6v/cXFx//7+/v/9/f3/QUFB//39/f/+/v7////////////////////////////9/f3/QUFB//39 - /f/+/v7/cXFx/6urq/+tra3/CAgI/wEBAf8CAgL/ExMT/4KCgv/x8fH//f39//////////////////// - ///////////////////+/v7//v7+//7+/v////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7//f39/7S0tP8iIiL/AQEB/y4u - Lv9mZmb/AgIC/2ZmZv/9/f3/3t7e/7a2tv/+/v7//f39/4uLi//8/Pz//v7+//////////////////// - /////////Pz8/4uLi//9/f3//v7+/7e3t//e3t7//f39/2ZmZv8CAgL/ZmZm/y4uLv8CAgL/IiIi/7Oz - s//9/f3//v7+//7+/v///////////////////////v7+//7+/v/+/v7///////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/+vr6/3t7 - e/8FBQX/ExMT/6Kiov/5+fn/ZWVl/wQEBP/U1NT//v7+//7+/v/+/v7//v7+//7+/v/9/f3//f39//// - //////////////////////////////7+/v/9/f3//v7+//7+/v/+/v7//v7+///////U1NT/BAQE/2Vl - Zf/5+fn/oqKi/xISEv8FBQX/enp6//r6+v/+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7/+/v7/2xsbP8CAgL/BQUF/8HBwf/9/f3/9/f3/xYWFv83Nzf//f39//////////////////// - ///+/v7//v7+//////////////////////////////////////////////////////////////////// - /////////Pz8/zg4OP8YGBj/+Pj4//7+/v/BwcH/BwcH/wMDA/9sbGz//Pz8//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////f39/5WVlf8RERH/YWFh/1JSUv/+/v7//v7+/9LS0v8BAQH/fn5+//39 - /f////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////9+fn7/AgIC/9LS0v///////v7+/1NTU/9iYmL/ExMT/5SU - lP/9/f3///////////////////////////////////////////////////////////////////////7+ - /v/+/v7//v7+/////////////////////////////////9/f3/8VFRX/vLy8/5aWlv+Ojo7//v7+//7+ - /v+qqqr/AQEB/6qqqv/+/v7///////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////qamp/wEBAf+rq6v///////7+ - /v+Ojo7/lpaW/7y8vP8WFhb/39/f//39/f////////////////////////////////////////////// - //////////////7+/v/+/v7//v7+//7+/v////////////////////////////39/f9oaGj/dnZ2//z8 - /P+cnJz/n5+f////////////lZWV/wAAAP+4uLj///////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////7e3 - t/8AAAD/lpaW///////+/v7/n5+f/5ycnP/9/f3/dnZ2/2hoaP/9/f3///////////////////////// - ///////////////////////////////////+/v7//v7+//7+/v/+/v7///////////////////////// - ///9/f3/Xl5e/+rq6v/+/v7/sbGx/5eXl////////////5OTk/8BAQH/oKCg//39/f////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////+hoaH/AQEB/5OTk//+/v7//v7+/5aWlv+wsLD//v7+/+np6f9eXl7//f39//// - ///////////////////////////////////////////////////+/v7//v7+//7+/v////////////// - /////////////////////////v7+//39/f/9/f3//v7+/+3t7f/Z2dn///////////+enp7/Hh4e/11d - Xf/9/f3///////7+/v/+/v7//v7+//////////////////////////////////////////////////// - ///////////////////////////////////9/f3/XV1d/x4eHv+fn5///v7+//7+/v/Z2dn/7e3t//7+ - /v/+/v7//f39//7+/v///////////////////////////////////////////////////////v7+//7+ - /v/+/v7//v7+//7+/v/+/v7////////////////////////////////////////////+/v7//v7+//// - ////////t7e3/3R0dP9LS0v/0dHR//7+/v/+/v7//v7+//7+/v////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7/0dHR/0tLS/9zc3P/t7e3//// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////////////////////// - /////////////////////////////9ra2v9ra2v/5+fn/1RUVP/c3Nz//v7+//////////////////// - //////////////////////////////////////////////////////////////7+/v/9/f3/3Nzc/1RU - VP/o6Oj/a2tr/9ra2v////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//////////////////// - ///////////////////////////////////////////////////4+Pj/XV1d//z8/P/r6+v/bGxs/9HR - 0f////////////////////////////////////////////////////////////////////////////// - ///+/v7/0dHR/2tra//r6+v//f39/1xcXP/4+Pj///////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+//7+ - /v///////////////////////////////////////////////////////////////////////v7+/19f - X//8/Pz///////7+/v/8/Pz///////////////////////////////////////////////////////// - /////////////////////////v7+//z8/P/8/Pz//v7+//v7+/9gYGD//f39//////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v/+/v7///////////////////////////////////////7+/v/+/v7//v7+//// - //////////////7+/v+4uLj/+fn5///////+/v7//v7+//////////////////////////////////// - ///////////////////////////////////////////////////+/v7//v7+//7+/v/5+fn/t7e3//39 - /f////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/////////////////+/v7//v7+//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+//////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7//v7+//7+/v/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//7+/v////////////////////////////////////////////// - ////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - - \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Program.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Program.cs deleted file mode 100644 index 0df94d0f..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Program.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace EasySpider -{ - static class Program - { - [DllImport("kernel32")] - private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); - - [DllImport("kernel32")] - private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - private static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName); - - private static string ReadString(string section, string key, string def, string filePath) - { - StringBuilder temp = new StringBuilder(1024); - - try - { - GetPrivateProfileString(section, key, def, temp, 1024, filePath); - } - catch - { } - return temp.ToString(); - } - /// - /// 根据section取所有key - /// - /// - /// - /// - public static string[] ReadIniAllKeys(string section, string filePath) - { - UInt32 MAX_BUFFER = 32767; - - string[] items = new string[0]; - - IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char)); - - UInt32 bytesReturned = GetPrivateProfileSection(section, pReturnedString, MAX_BUFFER, filePath); - - if (!(bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0)) - { - string returnedString = Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned); - - items = returnedString.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); - } - - Marshal.FreeCoTaskMem(pReturnedString); - - return items; - } - - /// - /// 根据section,key取值 - /// - /// - /// - /// ini文件路径 - /// - public static string ReadIniKeys(string section, string keys, string filePath) - { - return ReadString(section, keys, "", filePath); - } - - /// - /// 保存ini - /// - /// - /// - /// - /// ini文件路径 - public static void WriteIniKeys(string section, string key, string value, string filePath) - { - WritePrivateProfileString(section, key, value, filePath); - } - - /// - /// 应用程序的主入口点。 - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - PublicVariable.frontEndAddress = ReadIniKeys("serverAddress", "frontEndAddress", "./config.ini"); - PublicVariable.backEndAddress = ReadIniKeys("serverAddress", "backEndAddress", "./config.ini"); - Application.Run(new Start()); - } - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/AssemblyInfo.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/AssemblyInfo.cs deleted file mode 100644 index 678a5afb..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// 有关程序集的一般信息由以下 -// 控制。更改这些特性值可修改 -// 与程序集关联的信息。 -[assembly: AssemblyTitle("EasySpider")] -[assembly: AssemblyDescription("Visual Web Crawler")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Zhejiang University and National University of Singapore")] -[assembly: AssemblyProduct("Web Crawler")] -[assembly: AssemblyCopyright("Copyright © 2023")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// 将 ComVisible 设置为 false 会使此程序集中的类型 -//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 -//请将此类型的 ComVisible 特性设置为 true。 -[assembly: ComVisible(false)] - -// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID -[assembly: Guid("8ff781cb-5c33-4c3f-872d-1fe0e114a8d0")] - -// 程序集的版本信息由下列四个值组成: -// -// 主版本 -// 次版本 -// 生成号 -// 修订号 -// -//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 -//通过使用 "*",如下所示: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs deleted file mode 100644 index 2db5ad0d..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace EasySpider.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EasySpider.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx deleted file mode 100644 index af7dbebb..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs deleted file mode 100644 index e98c9e82..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace EasySpider.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings deleted file mode 100644 index 39645652..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/PublicVariable.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/PublicVariable.cs deleted file mode 100644 index 35f263c1..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/PublicVariable.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using OpenQA.Selenium; -using OpenQA.Selenium.Chrome; -using OpenQA.Selenium.Interactions; -using OpenQA.Selenium.Internal; -using OpenQA.Selenium.Support; -using Fleck; -using Newtonsoft.Json; -using System.Runtime.InteropServices; -using System.Diagnostics; - -namespace EasySpider -{ - class PublicVariable - { - public static bool isInitialized = false; - public static double ratio = 0.5; //上面流程图窗口所占的大小比率 - public static Start start = null; - public static Flow fr = null; - public static Process chrome = null; - public static string frontEndAddress = "https://servicewrapper.systems"; - public static string backEndAddress = "https://servicewrapper.systems"; - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj b/C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj deleted file mode 100644 index 062ce893..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - Debug - AnyCPU - {8FF781CB-5C33-4C3F-872D-1FE0E114A8D0} - WinExe - EasySpider - EasySpider - v4.7.2 - 512 - true - true - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - 7.3 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - 7.3 - prompt - MinimumRecommendedRules.ruleset - true - - - favicon.ico - - - - ..\packages\Fleck.1.1.0\lib\net45\Fleck.dll - - - ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - ..\packages\Selenium.WebDriver.3.141.0\lib\net45\WebDriver.dll - - - - - - Form - - - Flow.cs - - - - - - Form - - - Start.cs - - - Flow.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - Start.cs - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - False - Microsoft .NET Framework 4.7.2 %28x86 和 x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - - - - - - - - \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user b/C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user deleted file mode 100644 index 95a1d1a4..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user +++ /dev/null @@ -1,13 +0,0 @@ - - - - publish\ - - - - - - zh-CN - false - - \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.Designer.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.Designer.cs deleted file mode 100644 index af479640..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.Designer.cs +++ /dev/null @@ -1,107 +0,0 @@ -namespace EasySpider -{ - partial class Start - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Start)); - this.button1 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.State = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(60, 66); - this.button1.Margin = new System.Windows.Forms.Padding(4); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(322, 75); - this.button1.TabIndex = 1; - this.button1.Text = "Design Task"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(41, 29); - this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(89, 20); - this.label1.TabIndex = 2; - this.label1.Text = "Status: "; - // - // State - // - this.State.AutoSize = true; - this.State.Location = new System.Drawing.Point(113, 30); - this.State.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.State.Name = "State"; - this.State.Size = new System.Drawing.Size(289, 20); - this.State.TabIndex = 3; - this.State.Text = "Click Button below to start."; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(60, 163); - this.button2.Margin = new System.Windows.Forms.Padding(4); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(322, 75); - this.button2.TabIndex = 4; - this.button2.Text = "View/Manage/Invoke Tasks"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // Start - // - this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 20F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(455, 260); - this.Controls.Add(this.button2); - this.Controls.Add(this.State); - this.Controls.Add(this.label1); - this.Controls.Add(this.button1); - this.Font = new System.Drawing.Font("SimSun", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(4); - this.MaximizeBox = false; - this.Name = "Start"; - this.Text = "EasySpider: NoCode Visual Web Crawler"; - this.Load += new System.EventHandler(this.Start_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label State; - private System.Windows.Forms.Button button2; - } -} \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.cs b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.cs deleted file mode 100644 index 8660ba61..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.cs +++ /dev/null @@ -1,263 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using OpenQA.Selenium; -using OpenQA.Selenium.Chrome; -using OpenQA.Selenium.Interactions; -using OpenQA.Selenium.Internal; -using OpenQA.Selenium.Support; -using Fleck; -using Newtonsoft.Json; -using System.Runtime.InteropServices; -using System.Diagnostics; -using System.Threading; - -namespace EasySpider -{ - public partial class Start : Form - { - public static IWebDriver browser; - public static IWebSocketConnection socket_start; //输入网址页面的socket - public static IWebSocketConnection socket_window; //正式使用的窗口的socket - public static IWebSocketConnection socket_flowchart; //流程图的socket - public static WebSocketServer server; - public static IntPtr chromeId; - public static string[] links; - public Flow fr; - public string serviceListUrl = PublicVariable.frontEndAddress + "/serviceList.html?backEndAddressServiceWrapper=" + PublicVariable.backEndAddress; - - [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "MoveWindow")] - public static extern bool MoveWindow(System.IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); - - [DllImport("user32.dll")] - public static extern IntPtr GetForegroundWindow(); - [System.Runtime.InteropServices.DllImport("user32.dll")] - public static extern int SetForegroundWindow(IntPtr hwnd); - - [DllImport("user32", EntryPoint = "GetWindowThreadProcessId")] - private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int pid); - - [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)] - private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam); - [DllImport("user32.dll")] - private extern static bool SwapMouseButton(bool fSwap); - [DllImport("user32.dll", SetLastError = true)] - static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab); - - [DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)] - public static extern int ShowWindow(IntPtr hwnd, int nCmdShow); - - const int WM_SYSCOMMAND = 0x0112; - const int SC_CLOSE = 0xF060; - const int SC_MINIMIZE = 0xF020; - const int SC_MAXIMIZE = 0xF030; - const int SC_RESTORE = 0xF120; - - public Start() - { - InitializeComponent(); - PublicVariable.start = this; - } - - private void Start_Load(object sender, EventArgs e) - { - //string title = (string)Scripts().ExecuteScript("return document.title"); - server = new WebSocketServer("ws://0.0.0.0:8084"); - server.Start(socke => - { - socke.OnOpen = () => - { - BeginInvoke(new ConnectionChange(ModifyState), new object[] { "Connected to the browser, can start now." }); - }; - socke.OnClose = () => - { - //BeginInvoke(new ConnectionChange(ModifyState), new object[] { "与浏览器连接已断开。" }); - }; - socke.OnMessage = message => - { - - Msg msg = JsonConvert.DeserializeObject(message);//result为上面的Json数据 - //处理连接操作 - if (msg.type == 0)//如果是第一次连接操作,设定socket - { - if (msg.message.id == 0) - { - socket_window = socke; - Console.WriteLine("Socket Window Connected."); - } - else if (msg.message.id == 1) - { - socket_start = socke; - Console.WriteLine("Socket Start Connected."); - } - else - { - socket_flowchart = socke; - Console.WriteLine("Socket Flowchart Connected."); - //发送打开网页指令 - //FlowMessage fmsg = JsonConvert.DeserializeObject("{\"type\":0,\"data\":{\"option\":1,\"parameters\":{\"url\":\"https://www.baidu.com\"}}}"); - //fmsg.data.parameters.url = links[0]; - //string json = JsonConvert.SerializeObject(fmsg); - //socket_flowchart.Send(json); - } - } - else //其他情况放在进程外处理 - { - try - { - BeginInvoke(new GetMessage(HandleEvent), new object[] { message }); - } - catch (Exception) - { - - throw; - } - } - - }; - }); - try - { - SendKeys.Send("+"); - SendKeys.Send("+"); //测试是否能正常使用输入模块 - } - catch (Exception) - { - MessageBox.Show("Initialization failed, please quit anti-virus softwares such as 360!"); - Application.Exit(); - } - } - - delegate void ConnectionChange(object input);//委托 - delegate void GetMessage(object input); - - //正式处理程序入口 - public void HandleEvent(object input) - { - - Msg msg = JsonConvert.DeserializeObject(input.ToString());//result为上面的Json数据 - if (msg.type == 1) //开始的时候输入网址 - { - chromeId = GetForegroundWindow(); //记录下所在浏览器的进程Id号 - Console.WriteLine(chromeId); - Console.WriteLine(); - //links = msg.message.links.Split(new string[] { "\n" }, StringSplitOptions.None); - //List list = links.ToList(); - //int l = links.Length; - //if (links[l - 1].Length == 0)//如果最后一行是空行则删掉 - //{ - // list.RemoveAt(l - 1); - //} - //links = list.ToArray(); - //if (browser != null) - //{ - // browser.Navigate().GoToUrl(links[0]); - //} - int width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Width; - int height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Height; - SendMessage(chromeId, WM_SYSCOMMAND, SC_RESTORE, 0); // 最大化 - MoveWindow(chromeId, 0, Convert.ToInt32(height * PublicVariable.ratio) - 120, width, 120 + Convert.ToInt32(height * (1.0 - PublicVariable.ratio)), true); - if(fr!=null) - { - if (msg.message.id != -1) //读取服务流程,不是新增的时候 - { - fr.chromeBrowser.Load(Flow.flowChartUrl + msg.message.id.ToString() + "&backEndAddressServiceWrapper=" + PublicVariable.backEndAddress); - } - //SwapMouseButton(true); - fr.Show(); - } - Hide(); - //SwitchToThisWindow(chromeId,true); - //ShowWindow(System.UIntPtr(browser.CurrentWindowHandle),2); - SetForegroundWindow(Start.chromeId); //打开流程图窗口后将chrome窗口显示到最前方 - SetForegroundWindow(Handle); //打开流程图窗口后将chrome窗口显示到最前方 - SetForegroundWindow(Start.chromeId); //打开流程图窗口后将chrome窗口显示到最前方 - //MouseHelper.SetCursorPos(400, Convert.ToInt32(height * PublicVariable.ratio) - 110); - //MouseHelper.mouse_event(MouseHelper.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); - - //MouseHelper.mouse_event(MouseHelper.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); - } - else if (msg.type == 2) - { - try - { - SendKeys.Send(msg.message.keyboardStr); - SendKeys.Send("+"); - SendKeys.Send("+"); //两个shift是为了防止有人按用中文输入法输入了英文按了回车,这样切换两次输入法就可以达到效果 - } - catch (Exception) - { - MessageBox.Show("Input form/textbox failed, please quit anti-virus softwares such as 360!"); - } - - } - else if (msg.type == 3) - { - try - { //null reference error, see later - if (msg.from == 0) - { - socket_flowchart.Send(msg.message.pipe); //直接把消息转接 - } - else - { - socket_window.Send(msg.message.pipe); - } - } - catch (Exception) - { - - } - } - else if (msg.type == 5) - { - string FileName = Application.StartupPath + @"/Chrome/easyspider_executestage.exe"; //启动的应用程序名称 - string arguments = msg.message.id.ToString() + " " + PublicVariable.backEndAddress; - Process.Start(FileName, arguments); //启动执行程序 - } - } - - public void ModifyState(object input) - { - State.Text = (string)input; - } - - - public static IJavaScriptExecutor Scripts() - { - return (IJavaScriptExecutor)browser; - } - - private void button1_Click(object sender, EventArgs e) - { - fr = new Flow(); //先创造流程图界面,暂时隐藏不显示 - fr.Show(); - //fr.Hide(); - State.Text = "Loading..."; - ChromeOptions options = new ChromeOptions(); - options.AddExtension(Application.StartupPath + @"/EasySpider.crx"); - browser = new ChromeDriver(Application.StartupPath +@"/Chrome", options); - browser.Navigate().GoToUrl(serviceListUrl); //默认可以修改服务 - //ProcessStartInfo startInfo = new ProcessStartInfo(); - //startInfo.FileName = Application.StartupPath + @"/Chrome/chrome.exe"; //启动的应用程序名称 - //SwapMouseButton(false);//此时此刻的鼠标应该是默认状态 - //PublicVariable.chrome = Process.Start(startInfo); - //browser.Navigate().GoToUrl("file:///Start.html"); - } - - private void button2_Click(object sender, EventArgs e) - { - Flow fr2 = new Flow(serviceListUrl+"&type=1"); //加载的页面不可增加和修改服务 - fr2.closedriver = false; - fr2.WindowState = FormWindowState.Maximized; //最大化窗口 - fr2.Show(); - Hide(); - } - } -} diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.resx b/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.resx deleted file mode 100644 index 023beaa3..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.resx +++ /dev/null @@ -1,408 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA - AAD///////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7//v7+///////+/v7//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+//7+/v/+/v7///////// - /////////////////////////v7+//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/+/v7//v7+///////+/v7//v7+//////////////////7+/v/+/v7//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////+/v7//v7+/////////////v7+//7+/v/+/v7////////////+/v7//v7+//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+//// - /////////v7+//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//7+/v/+/v7////////////////////////////+/v7/+vr6/5eX - l/+YmJj/+vr6//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7///////////////////////// - ///9/f3/4uLi/0lJSf8AAAD/AAAA/0lJSf/j4+P//f39//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////9/f3/ubm5/xkZGf8BAQH/AAAA/wAAAP8BAQH/GRkZ/7m5uf/+/v7//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////9/f3/kpKS/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB - Af8GBgb/kpKS//7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////9/f3/hoaG/wICAv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv+FhYX//f39//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////7+/v/+/v7/q6ur/wQE - BP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/6ysrP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7/9PT0/x8fH/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB - Af8dHR3/9fX1//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+/7W1tf8AAAD/AAAA/wICAv8aGhr/AwMD/wAAAP8AAAD/AAAA/wAA - AP8EBAT/Ghoa/wICAv8AAAD/AAAA/7a2tv////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v+RkZH/AAAA/wAAAP8gICD/+/v7/9fX - 1/9UVFT/AgIC/wICAv9VVVX/2NjY//v7+/8fHx//AAAA/wAAAP+SkpL///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/mpqa/wAA - AP8AAAD/Nzc3//7+/v/+/v7/ysrK/8TExP/Dw8P/ycnJ//7+/v/9/f3/ODg4/wAAAP8AAAD/mpqa//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+/8PDw/8AAAD/AAAA/zU1Nf/+/v7//v7+/83Nzf+Wlpb/lpaW/87Ozv/+/v7//f39/zU1 - Nf8AAAD/AAAA/8PDw/////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/19fX/EBAQ/wAAAP8YGBj/4uLi/6mpqf8tLS3/AgIC/wEB - Af8tLS3/qqqq/+Hh4f8YGBj/AAAA/xAQEP/19fX///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////v7+//7+/v/+/v7//v7+/1lZWf8AAAD/AQEB/wMD - A/8DAwP/Li4u/2xsbP9vb2//NDQ0/wICAv8DAwP/AAAA/wAAAP9ZWVn//f39//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////7+/v/+/v7///////// - //+0tLT/AAAA/wAAAP8JCQn/np6e/+/v7/+1tbX/srKy/+7u7v+qqqr/DAwM/wAAAP8BAQH/tLS0//// - //////////////7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+////////////+Pj4/x4eHv8CAgL/mJiY/8XFxf8fHx//AQEB/wAAAP8aGhr/vr6+/6Wl - pf8BAQH/HR0d//j4+P/////////////////+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v99fX3/LS0t/+bm5v8YGBj/AAAA/wAA - AP8AAAD/AAAA/xQUFP/j4+P/MjIy/319ff/9/f3///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/3t7e/4GB - gf+BgYH/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/enp6/4WFhf/e3t7//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////39/f/n5+f/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zIyMv/o6Oj//f39//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+//// - ///////////////////////////////////+/v7/7+/v/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8HBwf/8fHx//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v///////////////////////////////////////f39/9jY2P+IiIj/fX19/zEx - Mf8ICAj/CAgI/y4uLv99fX3/iIiI/9nZ2f/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////Hx - 8f9mZmb/KSkp/zY2Nv+ioqL/QUFB/z09Pf+kpKT/PDw8/ygoKP9oaGj/8fHx//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+//7+/v+CgoL/BwcH/wcHB/8BAQH/DQ0N/7Gxsf+rq6v/Dg4O/wEBAf8GBgb/BwcH/4OD - g//9/f3//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+//7+/v/+/v7//v7+//j4+P/29vb/LCws/wcHB/8HBwf/AAAA/wMDA/9lZWX/Y2Nj/wAA - AP8AAAD/BgYG/wcHB/8sLCz/9fX1//f39//+/v7//v7+//7+/v/+/v7//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//Pz8//X19f/vr6+/4iIiP8yMjL/srKy/wEBAf8GBgb/BAQE/wEB - Af8nJyf/aGho/2FhYf8lJSX/AQEB/wcHB/8HBwf/AQEB/7Kysv80NDT/iIiI/729vf/X19f/8vLy//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////6Ojo/1RUVP8FBQX/AAAA/wAAAP8AAAD/AgIC/6Cg - oP/V1dX/rq6u/62trf+rq6v/ioqK/05OTv9QUFD/kJCQ/7CwsP+pqan/rq6u/9XV1f+fn5//AwMD/wAA - AP8AAAD/AAAA/wYGBv9UVFT/6enp//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////+vr6/z8/P/8BAQH/AAAA/wAA - AP8AAAD/AAAA/wcHB/+vr6//+fn5/xQUFP8ICAj/CAgI/wcHB/8JCQn/CAgI/wcHB/8HBwf/CAgI/xQU - FP/4+Pj/sLCw/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP/6+vr///////////////////////// - /////////////////////////v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+/6am - pv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf+Li4v//v7+//z8/P++vr7/v7+//4ODg/95eXn/2NjY/9LS - 0v9ycnL/eXl5/8DAwP+9vb3//Pz8//39/f+Li4v/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/p6en//7+ - /v////////////////////////////////////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v////////////////////////////////////////////////////////////////////////////// - /////////v7+//z8/P86Ojr/AAAA/wAAAP8AAAD/AAAA/wEBAf9QUFD/+/v7//7+/v/q6ur/GBgY/wkJ - Cf+ampr//f39//7+/v/+/v7//f39/5mZmf8ICAj/GBgY/+vr6//+/v7/+vr6/09PT/8BAQH/AAAA/wAA - AP8AAAD/AAAA/zo6Ov/8/Pz///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/c3Nz/BQUF/wAAAP8AAAD/AAAA/wgICP9nZ2f/8vLy//7+ - /v/+/v7/pqam/wAAAP8BAQH/m5ub//7+/v////////////////+ampr/AAAA/wEBAf+mpqb//v7+//7+ - /v/y8vL/Z2dn/wgICP8BAQH/AAAA/wAAAP8EBAT/3Nzc//////////////////////////////////// - ///////////////////////////////////+/v7//v7+//////////////////////////////////// - ///////////////////////////////////////////////////+/v7/+fn5/93d3f/Gxsb/vLy8/8nJ - yf/v7+///f39//7+/v///////f39/0RERP8AAAD/AgIC/+Dg4P//////////////////////39/f/wEB - Af8AAAD/Q0ND//39/f/+/v7//v7+//39/f/v7+//ycnJ/729vf/Gxsb/3Nzc//n5+f////////////// - /////////////////////////////////////////////////////////v7+//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7//v7+/7y8vP8BAQH/AAAA/zMzM//9/f3///////// - //////////////39/f80NDT/AAAA/wICAv+8vLz//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7//v7+/+jo6P8lJSX/AAAA/wEB - Af+Dg4P//v7+///////////////////////+/v7/g4OD/wEBAf8AAAD/JCQk/+rq6v/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//f39/+np - 6f89PT3/AAAA/wAAAP8AAAD/y8vL//7+/v///////////////////////////8vLy/8AAAD/AAAA/wAA - AP86Ojr/6enp//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//f39/8jIyP8oKCj/AAAA/wEBAf8sLCz/DQ0N//j4+P/+/v7//v7+//7+/v////////////// - ///39/f/Dg4O/ywsLP8CAgL/AAAA/ykpKf/IyMj//v7+//7+/v////////////7+/v/+/v7///////// - //////////////////////////////////////////////////////////////7+/v/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/9/f3/5+fn/29vb/8HBwf/AAAA/wEBAf9NTU3/2NjY/ysrK//+/v7///////7+ - /v/+/v7//////////////////f39/ysrK//Y2Nj/TU1N/wEBAf8AAAD/BgYG/25ubv/o6Oj//f39//7+ - /v/+/v7//v7+/////////////v7+//7+/v/+/v7//v7+/////////////v7+//7+/v/+/v7///////// - ///+/v7//v7+//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////39/f/q6ur/fHx8/xAQEP8BAQH/AgIC/xISEv8qKir/9vb2//T0 - 9P86Ojr//v7+///////+/v7//v7+//////////////////39/f85OTn/8/Pz//X19f8qKir/ExMT/wEB - Af8AAAD/EBAQ/3x8fP/q6ur//v7+//7+/v////////////7+/v/+/v7//v7+//7+/v////////////7+ - /v/+/v7//v7+//////////////////7+/v/+/v7///////////////////////////////////////// - ///////////////////////////////////+/v7//f39//Ly8v+CgoL/EhIS/wICAv8BAQH/CAgI/62t - rf+rq6v/cXFx//7+/v/9/f3/QUFB//39/f/+/v7////////////////////////////9/f3/QUFB//39 - /f/+/v7/cXFx/6urq/+tra3/CAgI/wEBAf8CAgL/ExMT/4KCgv/x8fH//f39//////////////////// - ///////////////////+/v7//v7+//7+/v////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7//f39/7S0tP8iIiL/AQEB/y4u - Lv9mZmb/AgIC/2ZmZv/9/f3/3t7e/7a2tv/+/v7//f39/4uLi//8/Pz//v7+//////////////////// - /////////Pz8/4uLi//9/f3//v7+/7e3t//e3t7//f39/2ZmZv8CAgL/ZmZm/y4uLv8CAgL/IiIi/7Oz - s//9/f3//v7+//7+/v///////////////////////v7+//7+/v/+/v7///////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/+vr6/3t7 - e/8FBQX/ExMT/6Kiov/5+fn/ZWVl/wQEBP/U1NT//v7+//7+/v/+/v7//v7+//7+/v/9/f3//f39//// - //////////////////////////////7+/v/9/f3//v7+//7+/v/+/v7//v7+///////U1NT/BAQE/2Vl - Zf/5+fn/oqKi/xISEv8FBQX/enp6//r6+v/+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7/+/v7/2xsbP8CAgL/BQUF/8HBwf/9/f3/9/f3/xYWFv83Nzf//f39//////////////////// - ///+/v7//v7+//////////////////////////////////////////////////////////////////// - /////////Pz8/zg4OP8YGBj/+Pj4//7+/v/BwcH/BwcH/wMDA/9sbGz//Pz8//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////f39/5WVlf8RERH/YWFh/1JSUv/+/v7//v7+/9LS0v8BAQH/fn5+//39 - /f////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////9+fn7/AgIC/9LS0v///////v7+/1NTU/9iYmL/ExMT/5SU - lP/9/f3///////////////////////////////////////////////////////////////////////7+ - /v/+/v7//v7+/////////////////////////////////9/f3/8VFRX/vLy8/5aWlv+Ojo7//v7+//7+ - /v+qqqr/AQEB/6qqqv/+/v7///////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////qamp/wEBAf+rq6v///////7+ - /v+Ojo7/lpaW/7y8vP8WFhb/39/f//39/f////////////////////////////////////////////// - //////////////7+/v/+/v7//v7+//7+/v////////////////////////////39/f9oaGj/dnZ2//z8 - /P+cnJz/n5+f////////////lZWV/wAAAP+4uLj///////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////7e3 - t/8AAAD/lpaW///////+/v7/n5+f/5ycnP/9/f3/dnZ2/2hoaP/9/f3///////////////////////// - ///////////////////////////////////+/v7//v7+//7+/v/+/v7///////////////////////// - ///9/f3/Xl5e/+rq6v/+/v7/sbGx/5eXl////////////5OTk/8BAQH/oKCg//39/f////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////+hoaH/AQEB/5OTk//+/v7//v7+/5aWlv+wsLD//v7+/+np6f9eXl7//f39//// - ///////////////////////////////////////////////////+/v7//v7+//7+/v////////////// - /////////////////////////v7+//39/f/9/f3//v7+/+3t7f/Z2dn///////////+enp7/Hh4e/11d - Xf/9/f3///////7+/v/+/v7//v7+//////////////////////////////////////////////////// - ///////////////////////////////////9/f3/XV1d/x4eHv+fn5///v7+//7+/v/Z2dn/7e3t//7+ - /v/+/v7//f39//7+/v///////////////////////////////////////////////////////v7+//7+ - /v/+/v7//v7+//7+/v/+/v7////////////////////////////////////////////+/v7//v7+//// - ////////t7e3/3R0dP9LS0v/0dHR//7+/v/+/v7//v7+//7+/v////////////////////////////// - //////////////////////////////////////////////7+/v/+/v7/0dHR/0tLS/9zc3P/t7e3//// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////////////////////// - /////////////////////////////9ra2v9ra2v/5+fn/1RUVP/c3Nz//v7+//////////////////// - //////////////////////////////////////////////////////////////7+/v/9/f3/3Nzc/1RU - VP/o6Oj/a2tr/9ra2v////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//////////////////// - ///////////////////////////////////////////////////4+Pj/XV1d//z8/P/r6+v/bGxs/9HR - 0f////////////////////////////////////////////////////////////////////////////// - ///+/v7/0dHR/2tra//r6+v//f39/1xcXP/4+Pj///////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7//v7+//7+ - /v///////////////////////////////////////////////////////////////////////v7+/19f - X//8/Pz///////7+/v/8/Pz///////////////////////////////////////////////////////// - /////////////////////////v7+//z8/P/8/Pz//v7+//v7+/9gYGD//f39//////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v/+/v7///////////////////////////////////////7+/v/+/v7//v7+//// - //////////////7+/v+4uLj/+fn5///////+/v7//v7+//////////////////////////////////// - ///////////////////////////////////////////////////+/v7//v7+//7+/v/5+fn/t7e3//39 - /f////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/////////////////+/v7//v7+//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//7+/v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7//v7+//////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7//v7+//7+/v/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//7+/v////////////////////////////////////////////// - ////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - - \ No newline at end of file diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/favicon.ico b/C#/ServiceWrapperEntry/ServiceWrapperEntry/favicon.ico deleted file mode 100644 index 4db29039175938c499317eb5fc7020d0228f9193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 zcmeI2XJ{2m6vuDuf{Hb$paxNl73>AY`1Fg218^=HA?EayRcy*gLZ`r~T)gshdzJDf2HaEtL725=#9m z6iN<-LaCWgW>x6#%!hiD(*DitU-^US_wV1L4{Gf4A5{Cl=v?jr^((nwQX0SZAlEB4 z#jo!+CaqH%yDjKt#ils)-Nx!wr}TN1+xErV2F0s#-S1kTmw9gD&r6)Sty_KV*T2+% z|NdQ;FJCSzR;(~(Kib^3Js$cLzn83EzkbQ%$B(6B$BvS@4>1qrCr_RTZTUHY@95E^ zQmIlUNlHp`@KdIaws3tHqD70ONRc8AZuLJoeLx#D`K=GYK700TDNvw*Cw99Z zpqVvmR=yYu>c{Qdw@aZyg|fx2{Xie=*s;UJL6Bn}{2xDllxo$gMT}j?LX|32plLI-O~N{amW@k4Iix+Oh( z_B2?*+pAYExqbV#X|rR6xiH9y_+PbZm4m-|^XAUne(BOBIeYf3oH=twE?&H7>X|27 zv}obb!yDuTe(-6GH*MO~!GGn-6e znlv$eVb6>3Fdl-K6ua7f;J^VVri&LZE^F7WmA7x-3Twl@ef#9in>WV)B}$ZV`UxI8 zxn6%$a5mfGOTBva9Q@3C?Dd8W86txR4|e7Q?!UkfEqmWDU%r^J zpt3Yi)IPz!4xpSw9`MGoFN|!EOq+7Rc zvS7gi*|TSla4v!d+Vu4FEcYbzA39#Vc#%;3z_*OHZQB|jy4Q64xqJ6+`S$Ib+2iS) zPd#S=-qr7v*#|Oa=nwF^6la)JCs79JWZ> zkcq9WTD8hzBX$$p+;>6u^5sjj@5krd>wr&fqP%kDN)rp5|6jd&W!i|Vu3fu&_5nK4 zotFvw@7=qXWy}-D!-fqLov)zN7@=QQuU?(ScY04oJG9z2$Uqh{?O0$QMR!h;%FYR| z&4V1q_5J(z<^1{ca_rbKbC<_HSN#h;m>6L`eE9I8Eyk2HGBO-|?c29^_|XAB zGPx&YEkGC8(VdeNFZ|i*Rz38K`i}Dtc-)CP);q>JeFP8uK}?F9oOO})9bEJQdpj>& z)X}E>RHH@>GiP|wCVHP>GyY_qW`A$b-}eEx=gytYT3@$r zUB~xcHoy-J=VW+vEU*t6HENV|H=?}cn(R8idM{e7izUZy*7qq>rkHzs?8bj(%a)Zo zb?TV&58pwFXSGf3we=#WWy_Z448i#a-g4#2IsL#l0d%0t&9Cp8t6Y62x0BY}b?6l6?lJj>tMu$=*|YiCLK`&NM~4p|HZpj(Wupr{=-$77 zzeDdOmpXm?@I+IOEcT_7Cr>u}K77Gl4to*K^X$uR+_>TBRNds@;PFdJWAjiZArsl? zKo>fRInJBh8)K95`N@y99{KF&`EEu3qx9{Q0@zoUyppZ4g{ zLk0~RWafk=OP1tVxB7?NFJ)w8NQDX&%-)o5*YoGkckuK57X0MlWcbOBq@Mc`bTB89 z(1Q)w!hV_f!$z<83n$;k?q@qPxtpCZVSYIdS{3)4`4Ao8 zC1EQzU<>wP8#ewa{Qdg%bJkw&Zu$RJO^X*VHooDmD_Z?3BfEV4`t?Q!y3}X%1$RZf zvscE(X!NTb@^FcE zW@OSAefspt^1l(W=ulp}AG9u-9RB|O`y2f5@lIdFl2nH7YuI}Y7%;$@Ut*E%=8Y7; zA073qeR?OSbZ$M-zN;K^WHa`OgWO2AZm+U!gWYb|$FrOpI&6DweST$|KEIXyFx&O{ z4YL;>8?U?UMW3JRZ2b8dr;W|VY?p1CL@BF%@w7)}Y93G7@s<^>jhW}k|I>fC2mS%# Cp=VD3 diff --git a/C#/ServiceWrapperEntry/ServiceWrapperEntry/packages.config b/C#/ServiceWrapperEntry/ServiceWrapperEntry/packages.config deleted file mode 100644 index f0246104..00000000 --- a/C#/ServiceWrapperEntry/ServiceWrapperEntry/packages.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/C#/shortcut/.vs/shortcut/FileContentIndex/23f98718-32b2-4c38-b5b9-aa3fd9241e3a.vsidx b/C#/shortcut/.vs/shortcut/FileContentIndex/23f98718-32b2-4c38-b5b9-aa3fd9241e3a.vsidx deleted file mode 100644 index 7df6586e91ecc3c2d09ab151848c964e78659428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12927 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 diff --git a/C#/shortcut/.vs/shortcut/FileContentIndex/read.lock b/C#/shortcut/.vs/shortcut/FileContentIndex/read.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/C#/shortcut/.vs/shortcut/v17/.suo b/C#/shortcut/.vs/shortcut/v17/.suo deleted file mode 100644 index 2f7095d922dbc810d04acf7e6f816bfb4deaab11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48128 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 diff --git a/C#/shortcut/shortcut.sln b/C#/shortcut/shortcut.sln deleted file mode 100644 index 3686974d..00000000 --- a/C#/shortcut/shortcut.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32929.385 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shortcut", "shortcut\shortcut.csproj", "{F7286090-1B9A-456C-A0C6-DB86E17C3C47}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {36A0EC28-3049-411D-AB6F-B20A562EE31D} - EndGlobalSection -EndGlobal diff --git a/C#/shortcut/shortcut/App.config b/C#/shortcut/shortcut/App.config deleted file mode 100644 index 56efbc7b..00000000 --- a/C#/shortcut/shortcut/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/C#/shortcut/shortcut/Form1.Designer.cs b/C#/shortcut/shortcut/Form1.Designer.cs deleted file mode 100644 index 60ba00d1..00000000 --- a/C#/shortcut/shortcut/Form1.Designer.cs +++ /dev/null @@ -1,48 +0,0 @@ -namespace shortcut -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Name = "Form1"; - this.Text = "Form1"; - this.Load += new System.EventHandler(this.Form1_Load); - this.ResumeLayout(false); - - } - - #endregion - } -} - diff --git a/C#/shortcut/shortcut/Form1.cs b/C#/shortcut/shortcut/Form1.cs deleted file mode 100644 index b22f8237..00000000 --- a/C#/shortcut/shortcut/Form1.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace shortcut -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - - private void Form1_Load(object sender, EventArgs e) - { - this.Hide(); - Application.Exit(); - } - } -} diff --git a/C#/shortcut/shortcut/Form1.resx b/C#/shortcut/shortcut/Form1.resx deleted file mode 100644 index 1af7de15..00000000 --- a/C#/shortcut/shortcut/Form1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/C#/shortcut/shortcut/Program.cs b/C#/shortcut/shortcut/Program.cs deleted file mode 100644 index 299de93d..00000000 --- a/C#/shortcut/shortcut/Program.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Diagnostics; -using System.IO; - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace shortcut -{ - internal static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - if (new DirectoryInfo(Application.StartupPath + "\\EasySpider\\").Exists) - Process.Start(Application.StartupPath + "\\EasySpider\\EasySpider.exe"); - else - Process.Start(Application.StartupPath + "\\Debug\\EasySpider.exe"); - } - } -} diff --git a/C#/shortcut/shortcut/Properties/AssemblyInfo.cs b/C#/shortcut/shortcut/Properties/AssemblyInfo.cs deleted file mode 100644 index 36e39ab6..00000000 --- a/C#/shortcut/shortcut/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("shortcut")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("shortcut")] -[assembly: AssemblyCopyright("Copyright © 2023")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f7286090-1b9a-456c-a0c6-db86e17c3c47")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/C#/shortcut/shortcut/Properties/Resources.Designer.cs b/C#/shortcut/shortcut/Properties/Resources.Designer.cs deleted file mode 100644 index 45513598..00000000 --- a/C#/shortcut/shortcut/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace shortcut.Properties -{ - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("shortcut.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/C#/shortcut/shortcut/Properties/Resources.resx b/C#/shortcut/shortcut/Properties/Resources.resx deleted file mode 100644 index af7dbebb..00000000 --- a/C#/shortcut/shortcut/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/C#/shortcut/shortcut/Properties/Settings.Designer.cs b/C#/shortcut/shortcut/Properties/Settings.Designer.cs deleted file mode 100644 index 69ebcf04..00000000 --- a/C#/shortcut/shortcut/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace shortcut.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/C#/shortcut/shortcut/Properties/Settings.settings b/C#/shortcut/shortcut/Properties/Settings.settings deleted file mode 100644 index 39645652..00000000 --- a/C#/shortcut/shortcut/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/C#/shortcut/shortcut/bin/Debug/shortcut.exe.config b/C#/shortcut/shortcut/bin/Debug/shortcut.exe.config deleted file mode 100644 index 56efbc7b..00000000 --- a/C#/shortcut/shortcut/bin/Debug/shortcut.exe.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/C#/shortcut/shortcut/bin/Debug/shortcut.pdb b/C#/shortcut/shortcut/bin/Debug/shortcut.pdb deleted file mode 100644 index f931d15db3c938f784366c2060d090f944d4b8bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32256 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 diff --git a/C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.exe.config b/C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.exe.config deleted file mode 100644 index 56efbc7b..00000000 --- a/C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.exe.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.pdb b/C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.pdb deleted file mode 100644 index 0ebb1bebd3899dda437289d714345c3562df766a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32256 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 Cp=VD3 diff --git a/C#/shortcut/shortcut/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/C#/shortcut/shortcut/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs deleted file mode 100644 index 3871b184..00000000 --- a/C#/shortcut/shortcut/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferences.cache deleted file mode 100644 index e201c85d29e1cd864f70752a0838efbea7d36e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2117 zcmcgs%TB^T6zxPM1VlpO#vMyd%mjt_U}Ff#PGi8RizcL$+h)Q%$V?Go!`iK1;?6H& z??3nhwxy`FY)Ff<>Kr}Z-E68xCzCY zQoy>DfYNV>DTNZ2qc`3EFcPw_n zo){_IbUCUODP=q%5lSzzM%!M-D-N0lkG={TO1tLAM1MG_e7^b~7iBL9+K|SGaC+JlO-^TY#cX*5lA6clJ0zJwimGgFQso9HV)N+o3zyp7D2e$_jIuz9mOP0K Sm2}(uSGkwAS5)XwxxWE&HLy+q diff --git a/C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 0e3be9f29bfa9413e600e4f8d9eb38dace1fcc08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7243 zcmeHMZBH9V5Vm>QUddtP)onej_mYHZH!+ zT~{{2d8RdZRkyW%V8AD<^fb=SOTQ-SMd89toBNJ%xPk6W>echLz;%m?d(f2XLw9JK zS8?pdiLs(|9o+9d>fGk44yL!P98@)!O;n;Eh`KKo6rje@6&t=bXkXvDw&KU1pVU^@ zo_b51uj1~R{^P4sF78vCQ)U)~0^3L>Kwob-hO07gW$$fqv!}1uPjyT+l&qnLXjd}| z>OvdU>Muy(#te`P=TOmcXB;&3;d*POnHfSx? zGqhe9+!KaeX9+l^z&FB!&XUub+FsJLfrb*)K!J~{ib{H@^gU|2rnjI_q8b?c2{x!4vVCy8&!*q24X@ zrk0Hoem$M?v@Mk@s{J#z_`i?X@-kntm!4!-bBmB!S=~v0&W=lJY7~Ch8LV3`xw?3K z7@|=`QSUTGq5P7^)PN7rFhHY-p<#dy>czPeCmx&_MKPHeqvkjXqyw?U6%_b2K_Wq7 zlEf5>Np=-wj7_5`9F{uF>1i2>bdxKn^vG_-+Fal6ame)kqP1)-q`MTfLpRqCj@UKS z#Pd%puQc+{%E#4}g1>7+bY^{t?J-Xam)*eDB=%;k zTqc)YO?-v_$0n2HRr;`-B&??JJ%`=G_L$|kE}IQoZ~#eid}tc6{nd-Pp~m-xEqx0G zo5SV5UTisXLd-V|^5seyj6r6mEhPG3gUzG9m5b?n)@WF04rV0m4z3os8X@YKeWb!< zB=zuM<;kN;@6Mz;!9WJ|!=~r%9r=JYJ~2*i*OV|gNN%f)ez<$!Z?w@ z^r*Cg5b0|~+K&>czzw%Z;GOU1lp%I1>RpD|bPDbx()&nv2@O}aJn&7pvu_Y@H%dI( z)VByyj}oMyI6hA5;f@|4*j|)in_#Tx#$4k@m($cfQjAxc1aXR{vPYS zv(8qChUFhB27j_r6-C?+`sNQf8GgGnF_CzPPrdGyq&$Pl}_r zR>abFoKl)F&pB>PoN}Bqy-7-X=t@%JL-w*XirK^bxwZBq_9KqY96lGmq3SA?T{rOX z95D;~=MJ~eFC@2)*iSeSt?(yJt;CX^>?RvWe9U6yz3MabdCNse2D$mFIvNgSnrpHovD8T<=}1% diff --git a/C#/shortcut/shortcut/obj/Debug/shortcut.Form1.resources b/C#/shortcut/shortcut/obj/Debug/shortcut.Form1.resources deleted file mode 100644 index 6c05a9776bd7cbae976fdcec7e3a254e93018279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/C#/shortcut/shortcut/obj/Debug/shortcut.Properties.Resources.resources b/C#/shortcut/shortcut/obj/Debug/shortcut.Properties.Resources.resources deleted file mode 100644 index 6c05a9776bd7cbae976fdcec7e3a254e93018279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.AssemblyReference.cache b/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.AssemblyReference.cache deleted file mode 100644 index f5b140ee5585df9cc5af33126b165204629e52dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6030 zcmeHL&2G~`5cUcvA#JG&2&oc>96>^>LMwiHK~;Xl0U}gaz`;_raW=`e_B!3&Buy_p zbLC06@g%+T4!i)njyK@g7t3SBfgGZ&9nH?p_kA-vvxYVt$3did;C&F$P>`_EVF8tm z#}}_&Jn@d`fC|ce+BlSwhP{AM>Ah#Zh-5TSUPu3*&LVN<;col*_iDP2U*hLpDE&wT ztcUwSfRNtD*=lb7{CZt;;sv^;pKS0*gsjgA=D~Q~Ecn3x<9FZuj{n35XYmWWh~J>P z-fI`{?e0B$?VyuNj^WOwqG8S3!VU|M4Y$ zqpdthwrNIuz=jh+6pMHvi{IXyTy0<153I#{V)1hr6ta`{%veiDc~oVTwX^sg2UNJEFv`jS+FmT)o4foYW-Xc0xQ z`EsdhUnt6@mV(S-gwY!qBW$e9#wB6}Lka6lGXe&VRRY|yB;ckyB4S)MRuHNK3Nb== z6Opy%oP^9T#GQ1`&g!gR30&4;qqA&nz5}T$2&ABL_5I}B$AWN4d{ba$A+%Q0>sDg0 zI|+5l_RATAzW_W;+_QD1N&FGx!$L<+6BMkXAheS>*XD|fv0#$wvNvTuEf&SJe^~*Y zRw^Jm4x)KTxyq5zZAckern%Ig2&U$xFoe<*gto!5u$9jz#{1Ds;*M@5icx7*-OIc# z$gG@fva}plO3Q`AIh+LTSRmlHs6ll-*+^H~t#qlvZf@vBa_dF;!5rd!AWl^iN?=wS%9N0kT WYY?zO-BWEU25Hl*F@T$R2KHaVBq4eL diff --git a/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.CoreCompileInputs.cache b/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.CoreCompileInputs.cache deleted file mode 100644 index 4a5524a1..00000000 --- a/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -8069502011d0681850e57a53d5a1673222f430a6 diff --git a/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.FileListAbsolute.txt b/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.FileListAbsolute.txt deleted file mode 100644 index 9e703cd1..00000000 --- a/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,11 +0,0 @@ -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.AssemblyReference.cache -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.SuggestedBindingRedirects.cache -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.Form1.resources -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.Properties.Resources.resources -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.GenerateResource.cache -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.CoreCompileInputs.cache -C:\Users\q9823\source\repos\shortcut\shortcut\bin\Debug\shortcut.exe.config -C:\Users\q9823\source\repos\shortcut\shortcut\bin\Debug\shortcut.exe -C:\Users\q9823\source\repos\shortcut\shortcut\bin\Debug\shortcut.pdb -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.exe -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.pdb diff --git a/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.GenerateResource.cache b/C#/shortcut/shortcut/obj/Debug/shortcut.csproj.GenerateResource.cache deleted file mode 100644 index ea5352ca27d3748f01543cb989efbb91fa46581b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 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 diff --git a/C#/shortcut/shortcut/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/C#/shortcut/shortcut/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs deleted file mode 100644 index 3871b184..00000000 --- a/C#/shortcut/shortcut/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/C#/shortcut/shortcut/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/C#/shortcut/shortcut/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index ba29c6b0caa41ad11143a4231daea42d3c01625e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7247 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 diff --git a/C#/shortcut/shortcut/obj/Release/shortcut.Properties.Resources.resources b/C#/shortcut/shortcut/obj/Release/shortcut.Properties.Resources.resources deleted file mode 100644 index 6c05a9776bd7cbae976fdcec7e3a254e93018279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/C#/shortcut/shortcut/obj/Release/shortcut.csproj.AssemblyReference.cache b/C#/shortcut/shortcut/obj/Release/shortcut.csproj.AssemblyReference.cache deleted file mode 100644 index 6fc7182c7146dbf741d5ae86c1397fbffc8856b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1618 zcmcJPO-chn5QV!pBBFSOS?Z>VM*Q2!n8AexafD>iAf1`Yq_uxyb(2Z1;oUrm7jQ;I zmz_;*3JMC|$K$=);rom+uJUX7h`vE(vqBpP+0pv){8&E091vUu*-Z#wXGTMi54u7h z{5;B{yNA}}n-t^G^Z&Lw6BpuC+E95kdM0XPIPY}WVSe!S@wwYe?sZ24F&qp}t{8tI z(Jwb4f=#P0DAlLdh Pk0hB<(wgKRA&Kw}DPIHi diff --git a/C#/shortcut/shortcut/obj/Release/shortcut.csproj.CoreCompileInputs.cache b/C#/shortcut/shortcut/obj/Release/shortcut.csproj.CoreCompileInputs.cache deleted file mode 100644 index c444ec1b..00000000 --- a/C#/shortcut/shortcut/obj/Release/shortcut.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -a05b2efad1c492f69cfd9e73a7de2300da2b5b0d diff --git a/C#/shortcut/shortcut/obj/Release/shortcut.csproj.FileListAbsolute.txt b/C#/shortcut/shortcut/obj/Release/shortcut.csproj.FileListAbsolute.txt deleted file mode 100644 index befe7a4c..00000000 --- a/C#/shortcut/shortcut/obj/Release/shortcut.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,11 +0,0 @@ -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.AssemblyReference.cache -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.SuggestedBindingRedirects.cache -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.Form1.resources -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.Properties.Resources.resources -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.GenerateResource.cache -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.CoreCompileInputs.cache -C:\Users\q9823\source\repos\shortcut\shortcut\bin\Release\EasySpider_ShortCut.exe.config -C:\Users\q9823\source\repos\shortcut\shortcut\bin\Release\EasySpider_ShortCut.exe -C:\Users\q9823\source\repos\shortcut\shortcut\bin\Release\EasySpider_ShortCut.pdb -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\EasySpider_ShortCut.exe -C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\EasySpider_ShortCut.pdb diff --git a/C#/shortcut/shortcut/obj/Release/shortcut.csproj.GenerateResource.cache b/C#/shortcut/shortcut/obj/Release/shortcut.csproj.GenerateResource.cache deleted file mode 100644 index ea5352ca27d3748f01543cb989efbb91fa46581b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmZQ$WMW`oVB~VkFUmF4D@rY{U - - - - Debug - AnyCPU - {F7286090-1B9A-456C-A0C6-DB86E17C3C47} - WinExe - shortcut - EasySpider_ShortCut - v4.7.2 - 512 - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - favicon.ico - - - - - - - - - - - - - - - - - Form - - - Form1.cs - - - - - Form1.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - \ No newline at end of file diff --git a/ElectronJS/.gitignore b/ElectronJS/.gitignore index 598cf465..f3b73282 100644 --- a/ElectronJS/.gitignore +++ b/ElectronJS/.gitignore @@ -1,5 +1,10 @@ node_modules out/ chrome_win32/ +chrome_win64/ chrome_linux64/ -chrome_macos/ \ No newline at end of file +chrome_macos/ +user-data/ +user_data/ +Data/ +execution_instances/*.json \ No newline at end of file diff --git a/ElectronJS/EasySpider_en.crx b/ElectronJS/EasySpider_en.crx index 05cd0b86ef031aaa0de012e2a3705d4cfb24c9af..a6f1b8db63b9dc31d4a3c928b3880395f8ebd840 100644 GIT binary patch delta 192208 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

bfb~4Fh}7i({(yCB12uAKWF| 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

yKX50*14X; zk2gx0Ha9lfW0GNX6uWSKlzGokd2VZ|9s-Z4r+3{EvF@)6k&nj6-Er%>Hv6bT)*gGn zS1dVA83mcarRp(5rCySZV@cuhGTYyDz=*1$yLl8Rjo!i7xRg{YBc<^h+%$7pQcKC{ zwchN)yRQN8&_1LL_kHorX(DW(=?|kyjT%3xK_xyqOnX-wMB4DzLYUo(GLfmTUgeO0 z_nzRaD*Lmf(asPxlE90+)AlI#hO`1!FXCw#NiNB%N{O;e#PC`l1!;w8BQFB?2vdiN zR}hrA199g!zGcr{7oN z{qQ@lM;C2p!-<-52cgTw9SrVow7lw8eM#yfrs?rxi4a2XP$GF$JwOx1ji?`J<*#Q- zyOC4Pa%%Fp!aiKb>nsy_nCt2)@=DLVM_pJTUoRCOr&UaR+{}^;D&OB)>!Vt2$J-!T z>aGKtdsoXD#hyx@s5nL)$m74*R@(m50P0Jr=Q1X4oCdf}BJztstaKC1uC#17(UHq( z2>AIukfkU%R=mgC8-hSj(S8?8YebizeSAKi{3)RSY~7`Te++Wl+(p{r;62yu|$A#4Op^HA<8cy<>{BPi?=rztU`qhmH2aw2jn%T_6#J#enBJ05Yo7|`C^T9Mt{n}z zoh~L=J1!?+kk#GPgV3bJJ3bto7hCahw5{%jq&$f$DC9KOv( z8ucA;MV|VXeWfg$#py@JD(daV3+x>~=Wfbic@a)J(n?b04nsUq3}i0;E>V%uHq`^` zBQ6Qj!hFIGvVuWK@6mD|(FTA?w-^P0jWP}N1Bypa1hJonK%K?!BWcJ8q#~>k=EkM| z1l4crz+c9%VE@?79}m3U`g`@V&s8PUx9n&Ni=AUd?}v?Solb5zyL-ALEe9!4 zSc#pS>>rc7O*?8BVa_Y38_us^`x{@2J3_ULE3Ndc1TIm{EU3p>@qXN1hnyC0I;SEz zWxGAz%nXU$87&Pu>!RO7K)3{V?=Adx0OOh)GdRYR_-nFWdj(ZWNr6vkp?>Ta)Ie&Lh0)aoEFd1%D5-A2+G%0L-8&-1;xqmW3)Mc$7hqL z;*>VT@F}?y7w;Rh+~(~Zaz_Be3cbA@uh}MbeyaQ@AG=f8u&CV_dq~48 zc&#>t6jfxDzA!bm5q#ydW&6D#x2+^PgdZ5gH+yw@uXp1 z(>SHgoN~n*=-?NE0%pFSsa1gEtc;rW4Z&t9^4RZKT_c}WJjioj`nV5Rv|yF-M`@=P zru9UnckNq^8%X2I5q9XnDFt~-Oo_(+SqYUcB$GZfs#03*Hye7dVY`r)frB!tp0I@| zg%3HxiyoI-t}L(~m$Y8aadGJ$>d~j8XVlS={Y5F?F~aN`ofn&f_>Hm-t6C|NOzg49 z!!){$S|TL5)qztq)*=KrE1&lqY&Z)XlOih{MG>skb;8p0t5@S$DXZW%hBz{-mY%kSIKX$l|g07e7 z#0YndN>YE$YrZ1|bXc>W;C^Lt@hyjQ2Di*Lgr~!prX6_NlEM@NX8Zi#n#$tT-UUA8 z&DSfRp0GP89i=T#AP_R#wxcoL?Z+KIR;evBD;Leq@pC-Y z1U?e7n%Srs;v8PleY~Ii`jMxGVr>e6GebbcO1)3jj5zf@&^n~zC)ig!EkHy52`uze z`z=tl3is$V#=qS)u6+@X=+-$@s8@0zL>vBI(98NnXLQt*pl_nLTou?G@#kJN*7vOL z63g8)0`uOGDuKl`se%pd#W?Jm#KQ(F6Z*y~?ypW#TR?ZLv*`DG&gi`W9d901@eoo( zgcL^^?G<+kYBzX!x%8=-;%gN2CUloB50;2-=)g zJYT5(0vW>CMfKIttER5=OtH&0=oi+-TD`Q@3>8Xl4Gwy9iC)asX<|EE=`H_gj#A_9 zx9DNqk28%?0y8Cv65d0`e%TW@rEVG_Yc0Jin{z_iwv%*PXYFt%gcIm;RqFwIzSpSl z{Xv*j%4~g4>=%S~j1JF!XvdfvdVm}8cky3Ez|3I@LjR|-nD~!Pw+|RuUAvp+HHnJy zQZTsRhwPT^l>O1534GBz=>_n<85gw3mF_s9SbG-n%(Iv`nx7Zr9<=F>p@(#Kew4qc zj&7%TOV@ZC@X1hI=)QS~25?2U5jQ0YZ+z|;esw5^3@PDt58F0x{Fd4HjTU2?j~4ET z4`7;iRBmQS_|6GeB4~A$oa4vMuTyLZhP~WIif>u7HlZuIHYMZ^MWHhy?cYw9=y{nl zRuvze-b_Dq8aq@~OFg?i5#VoRV&IY0%O5vd+-6VVW}qZcoPrU7V-=L$8JbAr70oL~ zn8-LO*K0F<-E{SX;0pgHsz4lNxhTH@*l*B5b`C!#rshOQrRwEe+#s)$EJ=BZsrbdEUu<5)=qA& zZ1(1^t|pe|a<6AyOibOZ9UWM0Tu*dX9cQ)hfVkgKr#%9kIad_l!XsE>S*e1uV0n^q zMzh4_KbfYMKojgodi8zJw15jWy(M)uEqC~(A}d%)`6XarAvPC6;8FcEThJ)lgPN@` z(roZ9%XLzuYh7f|Kw&t!oM@kQriKvuOPf2~D>;5Hvmlz&N>w9izX8jfE!60G_H(`} zxBTVN?MjYr77ePaSwNg{dhOaueY30CO*hdhod)hLFp{pj#I1m-9Ht!R@Qru|U5(4< z8tyRsJO8#aitC>0`?y4(Ez+$PMFRY2^d2{zshLQsp3j5w?TAOM>D?wqxiTTvv=*}E zIP*0*>iA?bQ>z+OaN1}uKRDl-@u-pE83!W~PJU=r<+j1!t;$BXeW1FJZzMkxAaTqp zo$S%J1rAt-MV;sCQmTA+Ud~c_x%G8I6w0>*-hI7*n9K3i1UIs0if$}AT33|0S&_pgVq!n13LaN!v%YT%=i{ zcF^?iiZ3dfk%pwwm&Ucn*9Ilp$>C+tFo{a90JP+>sX?F_S0GXiYVEUEzGNAZ+Lo!EF%Cdh^h;%!uDdeu2jmYu)lFg!mxv z5J9q`X8Eq{s2bI6wT&7aYQw=K+ShY z1o*!4e!K8?eX=s5-ol$DkmOSv9Ro5Elv1JAsBaLYBBpK&>t{`7q&0`vPJw4mrt$iI zJ&4)vJ6P&*npeQfdJ=!=H^2TKF!(&$eI&7^s4Q54YvwV{+<8q_Es3LHPBe%XK7tG~ zIkXRaM{Dy1heT)AWC*o9gV$K$PD^Hq08p|$&;?I&xWvd;}EAc`sxSHjKZpr$4w|)Yrp)Z=n+W(YSy& zk4g&R(A1E-iiK3>MCfre<%w=Mplk>8*kz45^_ZYIu%XDP+b4S7u^*|Mu|&N$257PR z3WEJi9E$O%UI7A9M*nB0Jaw;;Ygkop2y#F>XsEtHhPr|_@h)AeB$bh5c`l&$E>A7xmRTwK z&Q~p>x`ZP*(kHXT$I+Z9G~cY-1F$-gh%vEA(?VGAfQsiqi8OieO3+e_i|SDw)(cx* zwy@C$1O;uL95}+_<&UH`=jY_ge<+V<*0MF7=<41Ge%%E}GR}@1^S&{hRu428l&yBD z^3iWYmQn!jEeb@v-DZe77CYD8AN`7>un?qD`4iq!{zE)s1$EQbE+80^4)kZ~j`jX3 zbk^4p-k07g=d{D9{yTv4bO2%@&aS?lL7Py6%GXCV*LdvlgY~PY?Y6DAuNZsf4s1B%W*cI`F(e4XAkReZd(H|5=0U9Uz=tooYz2XKj z#Yt0_$muzEA7Pu_f`5)&8f&I{?*zNgHNMO0a(R|szgdg2V@AS$wvg@#8D6XmhC87g zbA!hL(*4Kuj5wkYZznJcef_t7iM$&o96=$pHrC+QyQ+;IK}swzJ{j!H8I|DMhp*k= zF9Yt77l^%fVZjKEul5H{Nc^sAP&Au&of^9vQ}@2BB4PTj3uNYS-D}Cvblz4@^3^3+ zQp`i>z;TZA-WN9%ZpNNrFEIb;j6Iy-@Hu!8C>$U3|Ir!fuR6ot#KGFa+|}(>GdMa_ zX^N=yv16@XF%f^Tfu_^CShIc5+zA=3l9+=f9h^L$ic&8%XmKL5?h8u_3zT+T#P=oW$dM!N=lYtMf zUY;q4BY-$rblOtfma&-Zp2#bIOFRAu%S6J$v8(+SWoZf6$$A!N34m_Y1tFoEv+}nB zgnSakrel+YSEd7Q9wX@!%G`98c&Og7rKApVpNSm~XKOzOrM9>c3%1Sl@OWysyVIf? zXEth8F-Nq9K7??MHOo6rof#X)tRLvF9TTsAQ#H5sJ*2fKYm-m%Wb%A&zYh)IdV^Ns zgydDjS>g?h)p094ZXzVVA)PW8d%VN_rs{=dw$0b9#Gl|= z61a9QJMt?&`Q9eTREFG^A}#Um@0SEvQ`z59#I7+#dgJGkqkB}C%T26;kK3UEhHE^i zl{Vn;I=5tuiVp7a{;dUpm#F1{GIX1s;b&xo{@ErDXJ-Y3&3O34_EfHDg zYg-~BRmIrqWW#_!jd1_8EzBD+*#E}}LN!7?!ev3AFnJIN_utq-Q_w#d6IWOBS6X2G z$`e>PIQdzf94!AQ03x=qCx8J0`TUdM{0G9|EAD?F@cuUde}2rH-jI%l`!6`mc9jG`m3K`C2u|C?L>39sFORDF_I?bb^vcrC@r#Mwf5CAQZX)-4 z6^nh1fhBtnHl~UEEmgO|1W+Xa6b_@Gp}0@AU7rO8#$X3gR#L-(dd(xg1{8!$XHq8Tvuk`PI>)-p`e^x9UEbM>IBdQAU2>)E-)p{bR;0*}0 J0tfq=`#*w@4m|(> literal 276644 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 z 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�M8FDeDT9nN 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

bfb~ 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%0DJlrtn|&UgBxM3* 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%0AtV&L}gLK{TSk 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 diff --git a/ElectronJS/README.md b/ElectronJS/README.md index 12ceb48a..c90fb10f 100644 --- a/ElectronJS/README.md +++ b/ElectronJS/README.md @@ -2,17 +2,18 @@ Remember to update EasySpider.crx everytime the extension updates. + + ## Run Instruction ``` npm install npm install @electron-forge/cli -npm start ``` + ## Package Instruction ``` - npx electron-forge import npm run package ``` @@ -21,4 +22,11 @@ optional: ``` npm run make -``` \ No newline at end of file +``` + +## For windows x64 +打开下面两个cmd即可打包 +``` +package_win64.cmd +clean_win64.cmd +``` diff --git a/ElectronJS/clean_win64.cmd b/ElectronJS/clean_win64.cmd new file mode 100644 index 00000000..e6d04b18 --- /dev/null +++ b/ElectronJS/clean_win64.cmd @@ -0,0 +1,9 @@ +move out\EasySpider-win32-x64 out\EasySpider +rmdir /s /q out\EasySpider\resources\app\chrome_win32 +rmdir /s /q out\EasySpider\resources\app\Data +rmdir /s /q out\EasySpider\resources\app\.idea +rmdir/s /q out\EasySpider\resources\app\tasks +rmdir/s /q out\EasySpider\resources\app\user-data +rmdir /s /q out\EasySpider\resources\app\execution_instances +rmdir /s /q ..\Releases\EasySpider_windows_amd64\EasySpider +move out\EasySpider ..\Releases\EasySpider_windows_amd64\EasySpider \ No newline at end of file diff --git a/ElectronJS/config.json b/ElectronJS/config.json index 201ddc85..f1f663bc 100644 --- a/ElectronJS/config.json +++ b/ElectronJS/config.json @@ -1,6 +1 @@ -{ - "backend_port": 8074, - "websocket_port": 8084, - "backend_address": "http://localhost", - "user_browser_config_path":"" -} \ No newline at end of file +{"webserver_address":"http://localhost","webserver_port":8074,"user_data_folder":"./user_data"} \ No newline at end of file diff --git a/ElectronJS/execution_instances/0.json b/ElectronJS/execution_instances/0.json index 5f797d43..296a5b1b 100644 --- a/ElectronJS/execution_instances/0.json +++ b/ElectronJS/execution_instances/0.json @@ -1,740 +1 @@ -{ - "id": 0, - "name": "eBay Names and Link Addresses - demo", - "url": "https://www.ebay.com", - "links": "https://www.ebay.com", - "containJudge": false, - "desc": "https://www.ebay.com\neBay Names and Link Addresses - demo", - "inputParameters": [ - { - "id": 0, - "name": "urlList_0", - "nodeId": 1, - "nodeName": "Open Page", - "value": "https://www.ebay.com", - "desc": "List of URLs to be collected, separated by \\n for multiple lines", - "type": "string", - "exampleValue": "https://www.ebay.com" - }, - { - "id": 1, - "name": "inputText_1", - "nodeName": "Input Text", - "nodeId": 2, - "desc": "The text to be entered, such as 'computer' at eBay search box", - "type": "string", - "exampleValue": "iPhone", - "value": "iPhone" - }, - { - "id": 2, - "name": "loopTimes_Loop Click Next Page_2", - "nodeId": 4, - "nodeName": "Loop Click Next Page", - "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", - "type": "int", - "exampleValue": 0, - "value": 0 - } - ], - "outputParameters": [ - { - "id": 0, - "name": "Name", - "desc": "", - "type": "string", - "exampleValue": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "id": 1, - "name": "Link Address", - "desc": "", - "type": "string", - "exampleValue": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - } - ], - "graph": [ - { - "index": 0, - "id": 0, - "parentId": 0, - "type": -1, - "option": 0, - "title": "root", - "sequence": [ - 1, - 2, - 3, - 4 - ], - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "wait": 0 - }, - "isInLoop": false - }, - { - "id": 1, - "index": 1, - "parentId": 0, - "type": 0, - "option": 1, - "title": "Open Page", - "sequence": [], - "isInLoop": false, - "position": 0, - "parameters": { - "useLoop": false, - "xpath": "", - "wait": 0, - "url": "https://www.ebay.com", - "links": "https://www.ebay.com", - "scrollType": 0, - "scrollCount": 0 - } - }, - { - "id": 2, - "index": 2, - "parentId": 0, - "type": 0, - "option": 4, - "title": "Input Text", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-ac\"]", - "wait": 0, - "value": "iPhone" - } - }, - { - "id": 3, - "index": 3, - "parentId": 0, - "type": 0, - "option": 2, - "title": "Click Element", - "sequence": [], - "isInLoop": false, - "position": 2, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-btn\"]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [] - } - }, - { - "id": 4, - "index": 4, - "parentId": 0, - "type": 1, - "option": 8, - "title": "Loop Click Next Page", - "sequence": [ - 6, - 5 - ], - "isInLoop": false, - "position": 3, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 0, - "pathList": "", - "textList": "", - "exitCount": 0, - "historyWait": 2 - } - }, - { - "id": 6, - "index": 5, - "parentId": 4, - "type": 0, - "option": 2, - "title": "Click Next", - "sequence": [], - "isInLoop": true, - "position": 1, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": true, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [], - "loopType": 0 - } - }, - { - "id": 5, - "index": 6, - "parentId": 4, - "type": 1, - "option": 8, - "title": "Loop Collection", - "sequence": [ - 7 - ], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 1, - "pathList": "", - "textList": "", - "exitCount": 0, - "historyWait": 2 - } - }, - { - "id": 7, - "index": 7, - "parentId": 5, - "type": 0, - "option": 3, - "title": "Collect Data", - "sequence": [], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "", - "wait": 0, - "paras": [ - { - "nodeType": 1, - "contentType": 0, - "relative": true, - "name": "Name", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "num": 1, - "value": "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 2, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab" - }, - { - "num": 3, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 4, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 5, - "value": "Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab" - }, - { - "num": 6, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 7, - "value": "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab" - }, - { - "num": 8, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 9, - "value": "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab" - }, - { - "num": 10, - "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 11, - "value": "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab" - }, - { - "num": 12, - "value": "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 13, - "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab" - }, - { - "num": 14, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab" - }, - { - "num": 15, - "value": "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab" - }, - { - "num": 16, - "value": "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab" - }, - { - "num": 17, - "value": "iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab" - }, - { - "num": 18, - "value": "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 19, - "value": "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab" - }, - { - "num": 20, - "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 21, - "value": "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 22, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 23, - "value": "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab" - }, - { - "num": 24, - "value": "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab" - }, - { - "num": 25, - "value": "Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab" - }, - { - "num": 26, - "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab" - }, - { - "num": 27, - "value": "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab" - }, - { - "num": 28, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab" - }, - { - "num": 29, - "value": "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab" - }, - { - "num": 30, - "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 31, - "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab" - }, - { - "num": 32, - "value": "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 33, - "value": "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab" - }, - { - "num": 34, - "value": "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 35, - "value": "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab" - }, - { - "num": 36, - "value": "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 37, - "value": "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab" - }, - { - "num": 38, - "value": "iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab" - }, - { - "num": 39, - "value": "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab" - }, - { - "num": 40, - "value": "New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab" - }, - { - "num": 41, - "value": "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 42, - "value": "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab" - }, - { - "num": 43, - "value": "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab" - }, - { - "num": 44, - "value": "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 45, - "value": "Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 46, - "value": "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 47, - "value": "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 48, - "value": "Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab" - }, - { - "num": 49, - "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab" - }, - { - "num": 50, - "value": "Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab" - }, - { - "num": 51, - "value": "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 52, - "value": "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 53, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 54, - "value": "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab" - }, - { - "num": 55, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 56, - "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab" - }, - { - "num": 57, - "value": "Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab" - }, - { - "num": 58, - "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab" - }, - { - "num": 59, - "value": "New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab" - } - ], - "default": "" - }, - { - "nodeType": 2, - "contentType": 0, - "relative": true, - "name": "Link Address", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 1, - "value": "https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 2, - "value": "https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 3, - "value": "https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 4, - "value": "https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 5, - "value": "https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 6, - "value": "https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 7, - "value": "https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 8, - "value": "https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 9, - "value": "https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 10, - "value": "https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 11, - "value": "https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 12, - "value": "https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 13, - "value": "https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 14, - "value": "https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 15, - "value": "https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 16, - "value": "https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 17, - "value": "https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 18, - "value": "https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 19, - "value": "https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 20, - "value": "https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 21, - "value": "https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 22, - "value": "https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 23, - "value": "https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 24, - "value": "https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 25, - "value": "https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 26, - "value": "https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 27, - "value": "https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 28, - "value": "https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 29, - "value": "https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 30, - "value": "https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 31, - "value": "https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 32, - "value": "https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 33, - "value": "https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 34, - "value": "https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 35, - "value": "https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 36, - "value": "https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 37, - "value": "https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 38, - "value": "https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 39, - "value": "https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 40, - "value": "https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 41, - "value": "https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 42, - "value": "https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 43, - "value": "https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 44, - "value": "https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 45, - "value": "https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 46, - "value": "https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 47, - "value": "https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 48, - "value": "https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 49, - "value": "https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 50, - "value": "https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 51, - "value": "https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 52, - "value": "https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 53, - "value": "https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 54, - "value": "https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 55, - "value": "https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 56, - "value": "https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 57, - "value": "https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 58, - "value": "https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh" - }, - { - "num": 59, - "value": "https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh" - } - ], - "default": "" - } - ], - "loopType": 1 - } - } - ] -} \ No newline at end of file +{"id":0,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com","containJudge":false,"desc":"eBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"string","exampleValue":"iPhone","value":"iPhone"}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Computer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/execution_instances/1.json b/ElectronJS/execution_instances/1.json deleted file mode 100644 index cc1d7d0c..00000000 --- a/ElectronJS/execution_instances/1.json +++ /dev/null @@ -1,740 +0,0 @@ -{ - "id": 1, - "name": "eBay Names and Link Addresses - demo", - "url": "https://www.ebay.com", - "links": "https://www.ebay.com?ids=12", - "containJudge": false, - "desc": "https://www.ebay.com\neBay Names and Link Addresses - demo", - "inputParameters": [ - { - "id": 0, - "name": "urlList_0", - "nodeId": 1, - "nodeName": "Open Page", - "value": "https://www.ebay.com", - "desc": "List of URLs to be collected, separated by \\n for multiple lines", - "type": "string", - "exampleValue": "https://www.ebay.com" - }, - { - "id": 1, - "name": "inputText_1", - "nodeName": "Input Text", - "nodeId": 2, - "desc": "The text to be entered, such as 'computer' at eBay search box", - "type": "string", - "exampleValue": "iPhone", - "value": "iPhone" - }, - { - "id": 2, - "name": "loopTimes_Loop Click Next Page_2", - "nodeId": 4, - "nodeName": "Loop Click Next Page", - "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", - "type": "int", - "exampleValue": 0, - "value": 0 - } - ], - "outputParameters": [ - { - "id": 0, - "name": "Name", - "desc": "", - "type": "string", - "exampleValue": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "id": 1, - "name": "Link Address", - "desc": "", - "type": "string", - "exampleValue": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - } - ], - "graph": [ - { - "index": 0, - "id": 0, - "parentId": 0, - "type": -1, - "option": 0, - "title": "root", - "sequence": [ - 1, - 2, - 3, - 4 - ], - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "wait": 0 - }, - "isInLoop": false - }, - { - "id": 1, - "index": 1, - "parentId": 0, - "type": 0, - "option": 1, - "title": "Open Page", - "sequence": [], - "isInLoop": false, - "position": 0, - "parameters": { - "useLoop": false, - "xpath": "", - "wait": 0, - "url": "https://www.ebay.com", - "links": "https://www.ebay.com?ids=12", - "scrollType": 0, - "scrollCount": 0 - } - }, - { - "id": 2, - "index": 2, - "parentId": 0, - "type": 0, - "option": 4, - "title": "Input Text", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-ac\"]", - "wait": 0, - "value": "Personal Computer" - } - }, - { - "id": 3, - "index": 3, - "parentId": 0, - "type": 0, - "option": 2, - "title": "Click Element", - "sequence": [], - "isInLoop": false, - "position": 2, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-btn\"]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [] - } - }, - { - "id": 4, - "index": 4, - "parentId": 0, - "type": 1, - "option": 8, - "title": "Loop Click Next Page", - "sequence": [ - 6, - 5 - ], - "isInLoop": false, - "position": 3, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 0, - "pathList": "", - "textList": "", - "exitCount": 156, - "historyWait": 2 - } - }, - { - "id": 6, - "index": 5, - "parentId": 4, - "type": 0, - "option": 2, - "title": "Click Next", - "sequence": [], - "isInLoop": true, - "position": 1, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": true, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [], - "loopType": 0 - } - }, - { - "id": 5, - "index": 6, - "parentId": 4, - "type": 1, - "option": 8, - "title": "Loop Collection", - "sequence": [ - 7 - ], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 1, - "pathList": "", - "textList": "", - "exitCount": 0, - "historyWait": 2 - } - }, - { - "id": 7, - "index": 7, - "parentId": 5, - "type": 0, - "option": 3, - "title": "Collect Data", - "sequence": [], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "", - "wait": 0, - "paras": [ - { - "nodeType": 1, - "contentType": 0, - "relative": true, - "name": "Name", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "num": 1, - "value": "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 2, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab" - }, - { - "num": 3, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 4, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 5, - "value": "Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab" - }, - { - "num": 6, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 7, - "value": "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab" - }, - { - "num": 8, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 9, - "value": "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab" - }, - { - "num": 10, - "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 11, - "value": "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab" - }, - { - "num": 12, - "value": "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 13, - "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab" - }, - { - "num": 14, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab" - }, - { - "num": 15, - "value": "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab" - }, - { - "num": 16, - "value": "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab" - }, - { - "num": 17, - "value": "iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab" - }, - { - "num": 18, - "value": "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 19, - "value": "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab" - }, - { - "num": 20, - "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 21, - "value": "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 22, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 23, - "value": "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab" - }, - { - "num": 24, - "value": "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab" - }, - { - "num": 25, - "value": "Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab" - }, - { - "num": 26, - "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab" - }, - { - "num": 27, - "value": "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab" - }, - { - "num": 28, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab" - }, - { - "num": 29, - "value": "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab" - }, - { - "num": 30, - "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 31, - "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab" - }, - { - "num": 32, - "value": "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 33, - "value": "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab" - }, - { - "num": 34, - "value": "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 35, - "value": "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab" - }, - { - "num": 36, - "value": "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 37, - "value": "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab" - }, - { - "num": 38, - "value": "iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab" - }, - { - "num": 39, - "value": "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab" - }, - { - "num": 40, - "value": "New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab" - }, - { - "num": 41, - "value": "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 42, - "value": "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab" - }, - { - "num": 43, - "value": "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab" - }, - { - "num": 44, - "value": "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 45, - "value": "Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 46, - "value": "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 47, - "value": "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 48, - "value": "Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab" - }, - { - "num": 49, - "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab" - }, - { - "num": 50, - "value": "Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab" - }, - { - "num": 51, - "value": "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 52, - "value": "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 53, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 54, - "value": "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab" - }, - { - "num": 55, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 56, - "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab" - }, - { - "num": 57, - "value": "Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab" - }, - { - "num": 58, - "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab" - }, - { - "num": 59, - "value": "New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab" - } - ], - "default": "" - }, - { - "nodeType": 2, - "contentType": 0, - "relative": true, - "name": "Link Address", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 1, - "value": "https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 2, - "value": "https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 3, - "value": "https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 4, - "value": "https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 5, - "value": "https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 6, - "value": "https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 7, - "value": "https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 8, - "value": "https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 9, - "value": "https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 10, - "value": "https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 11, - "value": "https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 12, - "value": "https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 13, - "value": "https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 14, - "value": "https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 15, - "value": "https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 16, - "value": "https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 17, - "value": "https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 18, - "value": "https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 19, - "value": "https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 20, - "value": "https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 21, - "value": "https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 22, - "value": "https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 23, - "value": "https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 24, - "value": "https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 25, - "value": "https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 26, - "value": "https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 27, - "value": "https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 28, - "value": "https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 29, - "value": "https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 30, - "value": "https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 31, - "value": "https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 32, - "value": "https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 33, - "value": "https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 34, - "value": "https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 35, - "value": "https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 36, - "value": "https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 37, - "value": "https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 38, - "value": "https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 39, - "value": "https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 40, - "value": "https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 41, - "value": "https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 42, - "value": "https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 43, - "value": "https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 44, - "value": "https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 45, - "value": "https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 46, - "value": "https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 47, - "value": "https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 48, - "value": "https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 49, - "value": "https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 50, - "value": "https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 51, - "value": "https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 52, - "value": "https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 53, - "value": "https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 54, - "value": "https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 55, - "value": "https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 56, - "value": "https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 57, - "value": "https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 58, - "value": "https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh" - }, - { - "num": 59, - "value": "https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh" - } - ], - "default": "" - } - ], - "loopType": 1 - } - } - ] -} \ No newline at end of file diff --git a/ElectronJS/execution_instances/2.json b/ElectronJS/execution_instances/2.json deleted file mode 100644 index 94f32554..00000000 --- a/ElectronJS/execution_instances/2.json +++ /dev/null @@ -1 +0,0 @@ -{"id":2,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","containJudge":false,"desc":"https://www.ebay.com\neBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"List of URLs to be collected, separated by \\n for multiple lines","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"The text to be entered, such as 'computer' at eBay search box","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"Number of loop executions, 0 means unlimited loops (until element not found)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Personal Computer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":156,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/execution_instances/3.json b/ElectronJS/execution_instances/3.json deleted file mode 100644 index 57715475..00000000 --- a/ElectronJS/execution_instances/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id":3,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","containJudge":false,"desc":"https://www.ebay.com\neBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"List of URLs to be collected, separated by \\n for multiple lines","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"The text to be entered, such as 'computer' at eBay search box","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"Number of loop executions, 0 means unlimited loops (until element not found)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Personal Computer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":156,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/execution_instances/4.json b/ElectronJS/execution_instances/4.json deleted file mode 100644 index 102e95e1..00000000 --- a/ElectronJS/execution_instances/4.json +++ /dev/null @@ -1 +0,0 @@ -{"id":4,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","containJudge":false,"desc":"https://www.ebay.com\neBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"List of URLs to be collected, separated by \\n for multiple lines","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"The text to be entered, such as 'computer' at eBay search box","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"Number of loop executions, 0 means unlimited loops (until element not found)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Personal Computer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":156,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/execution_instances/5.json b/ElectronJS/execution_instances/5.json deleted file mode 100644 index bf9b3622..00000000 --- a/ElectronJS/execution_instances/5.json +++ /dev/null @@ -1 +0,0 @@ -{"id":5,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","containJudge":false,"desc":"https://www.ebay.com\neBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"List of URLs to be collected, separated by \\n for multiple lines","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"The text to be entered, such as 'computer' at eBay search box","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"Number of loop executions, 0 means unlimited loops (until element not found)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Personal Computer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":156,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/execution_instances/6.json b/ElectronJS/execution_instances/6.json deleted file mode 100644 index 1632ca9e..00000000 --- a/ElectronJS/execution_instances/6.json +++ /dev/null @@ -1 +0,0 @@ -{"id":6,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","containJudge":false,"desc":"https://www.ebay.com\neBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"List of URLs to be collected, separated by \\n for multiple lines","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"The text to be entered, such as 'computer' at eBay search box","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"Number of loop executions, 0 means unlimited loops (until element not found)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Personal Computasdfer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":156,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/execution_instances/7.json b/ElectronJS/execution_instances/7.json deleted file mode 100644 index 46f17215..00000000 --- a/ElectronJS/execution_instances/7.json +++ /dev/null @@ -1,740 +0,0 @@ -{ - "id": 7, - "name": "eBay Names and Link Addresses - demo", - "url": "https://www.ebay.com", - "links": "https://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12", - "containJudge": false, - "desc": "https://www.ebay.com\neBay Names and Link Addresses - demo", - "inputParameters": [ - { - "id": 0, - "name": "urlList_0", - "nodeId": 1, - "nodeName": "Open Page", - "value": "https://www.ebay.com", - "desc": "List of URLs to be collected, separated by \\n for multiple lines", - "type": "string", - "exampleValue": "https://www.ebay.com" - }, - { - "id": 1, - "name": "inputText_1", - "nodeName": "Input Text", - "nodeId": 2, - "desc": "The text to be entered, such as 'computer' at eBay search box", - "type": "string", - "exampleValue": "iPhone", - "value": "iPhone" - }, - { - "id": 2, - "name": "loopTimes_Loop Click Next Page_2", - "nodeId": 4, - "nodeName": "Loop Click Next Page", - "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", - "type": "int", - "exampleValue": 0, - "value": 0 - } - ], - "outputParameters": [ - { - "id": 0, - "name": "Name", - "desc": "", - "type": "string", - "exampleValue": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "id": 1, - "name": "Link Address", - "desc": "", - "type": "string", - "exampleValue": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - } - ], - "graph": [ - { - "index": 0, - "id": 0, - "parentId": 0, - "type": -1, - "option": 0, - "title": "root", - "sequence": [ - 1, - 2, - 3, - 4 - ], - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "wait": 0 - }, - "isInLoop": false - }, - { - "id": 1, - "index": 1, - "parentId": 0, - "type": 0, - "option": 1, - "title": "Open Page", - "sequence": [], - "isInLoop": false, - "position": 0, - "parameters": { - "useLoop": false, - "xpath": "", - "wait": 0, - "url": "https://www.ebay.com", - "links": "https://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12", - "scrollType": 0, - "scrollCount": 0 - } - }, - { - "id": 2, - "index": 2, - "parentId": 0, - "type": 0, - "option": 4, - "title": "Input Text", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-ac\"]", - "wait": 0, - "value": "Personal Computasdfer" - } - }, - { - "id": 3, - "index": 3, - "parentId": 0, - "type": 0, - "option": 2, - "title": "Click Element", - "sequence": [], - "isInLoop": false, - "position": 2, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-btn\"]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [] - } - }, - { - "id": 4, - "index": 4, - "parentId": 0, - "type": 1, - "option": 8, - "title": "Loop Click Next Page", - "sequence": [ - 6, - 5 - ], - "isInLoop": false, - "position": 3, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 0, - "pathList": "", - "textList": "", - "exitCount": 156, - "historyWait": 2 - } - }, - { - "id": 6, - "index": 5, - "parentId": 4, - "type": 0, - "option": 2, - "title": "Click Next", - "sequence": [], - "isInLoop": true, - "position": 1, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": true, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [], - "loopType": 0 - } - }, - { - "id": 5, - "index": 6, - "parentId": 4, - "type": 1, - "option": 8, - "title": "Loop Collection", - "sequence": [ - 7 - ], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 1, - "pathList": "", - "textList": "", - "exitCount": 0, - "historyWait": 2 - } - }, - { - "id": 7, - "index": 7, - "parentId": 5, - "type": 0, - "option": 3, - "title": "Collect Data", - "sequence": [], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "", - "wait": 0, - "paras": [ - { - "nodeType": 1, - "contentType": 0, - "relative": true, - "name": "Name", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "num": 1, - "value": "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 2, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab" - }, - { - "num": 3, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 4, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 5, - "value": "Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab" - }, - { - "num": 6, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 7, - "value": "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab" - }, - { - "num": 8, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 9, - "value": "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab" - }, - { - "num": 10, - "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 11, - "value": "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab" - }, - { - "num": 12, - "value": "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 13, - "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab" - }, - { - "num": 14, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab" - }, - { - "num": 15, - "value": "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab" - }, - { - "num": 16, - "value": "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab" - }, - { - "num": 17, - "value": "iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab" - }, - { - "num": 18, - "value": "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 19, - "value": "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab" - }, - { - "num": 20, - "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 21, - "value": "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 22, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 23, - "value": "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab" - }, - { - "num": 24, - "value": "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab" - }, - { - "num": 25, - "value": "Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab" - }, - { - "num": 26, - "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab" - }, - { - "num": 27, - "value": "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab" - }, - { - "num": 28, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab" - }, - { - "num": 29, - "value": "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab" - }, - { - "num": 30, - "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 31, - "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab" - }, - { - "num": 32, - "value": "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 33, - "value": "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab" - }, - { - "num": 34, - "value": "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 35, - "value": "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab" - }, - { - "num": 36, - "value": "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 37, - "value": "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab" - }, - { - "num": 38, - "value": "iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab" - }, - { - "num": 39, - "value": "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab" - }, - { - "num": 40, - "value": "New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab" - }, - { - "num": 41, - "value": "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 42, - "value": "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab" - }, - { - "num": 43, - "value": "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab" - }, - { - "num": 44, - "value": "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 45, - "value": "Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 46, - "value": "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 47, - "value": "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 48, - "value": "Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab" - }, - { - "num": 49, - "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab" - }, - { - "num": 50, - "value": "Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab" - }, - { - "num": 51, - "value": "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 52, - "value": "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 53, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 54, - "value": "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab" - }, - { - "num": 55, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 56, - "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab" - }, - { - "num": 57, - "value": "Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab" - }, - { - "num": 58, - "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab" - }, - { - "num": 59, - "value": "New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab" - } - ], - "default": "" - }, - { - "nodeType": 2, - "contentType": 0, - "relative": true, - "name": "Link Address", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 1, - "value": "https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 2, - "value": "https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 3, - "value": "https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 4, - "value": "https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 5, - "value": "https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 6, - "value": "https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 7, - "value": "https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 8, - "value": "https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 9, - "value": "https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 10, - "value": "https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 11, - "value": "https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 12, - "value": "https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 13, - "value": "https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 14, - "value": "https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 15, - "value": "https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 16, - "value": "https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 17, - "value": "https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 18, - "value": "https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 19, - "value": "https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 20, - "value": "https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 21, - "value": "https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 22, - "value": "https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 23, - "value": "https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 24, - "value": "https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 25, - "value": "https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 26, - "value": "https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 27, - "value": "https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 28, - "value": "https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 29, - "value": "https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 30, - "value": "https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 31, - "value": "https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 32, - "value": "https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 33, - "value": "https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 34, - "value": "https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 35, - "value": "https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 36, - "value": "https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 37, - "value": "https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 38, - "value": "https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 39, - "value": "https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 40, - "value": "https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 41, - "value": "https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 42, - "value": "https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 43, - "value": "https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 44, - "value": "https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 45, - "value": "https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 46, - "value": "https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 47, - "value": "https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 48, - "value": "https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 49, - "value": "https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 50, - "value": "https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 51, - "value": "https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 52, - "value": "https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 53, - "value": "https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 54, - "value": "https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 55, - "value": "https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 56, - "value": "https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 57, - "value": "https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 58, - "value": "https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh" - }, - { - "num": 59, - "value": "https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh" - } - ], - "default": "" - } - ], - "loopType": 1 - } - } - ] -} \ No newline at end of file diff --git a/ElectronJS/execution_instances/8.json b/ElectronJS/execution_instances/8.json deleted file mode 100644 index 115bce80..00000000 --- a/ElectronJS/execution_instances/8.json +++ /dev/null @@ -1 +0,0 @@ -{"id":8,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12","containJudge":false,"desc":"https://www.ebay.com\neBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"List of URLs to be collected, separated by \\n for multiple lines","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"The text to be entered, such as 'computer' at eBay search box","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"Number of loop executions, 0 means unlimited loops (until element not found)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12\r\nhttps://www.ebay.com?ids=12","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"Personal Computasdfer"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":156,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/main.js b/ElectronJS/main.js index e1edcedf..87014e59 100644 --- a/ElectronJS/main.js +++ b/ElectronJS/main.js @@ -7,20 +7,24 @@ const {exec} = require('child_process'); const iconPath = path.join(__dirname, 'favicon.ico'); const task_server = require(path.join(__dirname, 'server.js')); -let config = fs.readFileSync(path.join(__dirname, `config.json`), 'utf8'); +let config = fs.readFileSync(path.join(task_server.getDir(), `config.json`), 'utf8'); config = JSON.parse(config); -task_server.start(config.backend_port); //start local server -let backend_address = `${config.backend_address}:${config.backend_port}`; -let websocket_port = config.websocket_port; -let user_browser_config_path = path.join(__dirname, "user_browser_config.json"); -console.log("backend_address: " + backend_address); +task_server.start(config.webserver_port); //start local server +let server_address = `${config.webserver_address}:${config.webserver_port}`; +const websocket_port = 8084; //目前只支持8084端口,写死,因为扩展里面写死了 +console.log("server_address: " + server_address); let driverPath = ""; let chromeBinaryPath = ""; let execute_path = ""; -if (process.platform === 'win32' || process.platform === 'win64') { +console.log(process.arch); +if (process.platform === 'win32' && process.arch === 'ia32') { driverPath = path.join(__dirname, "chrome_win32/chromedriver_win32.exe"); chromeBinaryPath = path.join(__dirname, "chrome_win32/chrome.exe"); execute_path = path.join(__dirname, "chrome_win32/execute.bat"); +} else if(process.platform === 'win32' && process.arch === 'x64') { + driverPath = path.join(__dirname, "chrome_win64/chromedriver_win64.exe"); + chromeBinaryPath = path.join(__dirname, "chrome_win64/chrome.exe"); + execute_path = path.join(__dirname, "chrome_win64/execute.bat"); } else if (process.platform === 'darwin') { driverPath = path.join(__dirname, "chromedriver_mac64"); chromeBinaryPath = path.join(__dirname, "chrome_mac64.app/Contents/MacOS/Google Chrome"); @@ -30,8 +34,8 @@ if (process.platform === 'win32' || process.platform === 'win64') { chromeBinaryPath = path.join(__dirname, "chrome_linux64/chrome"); execute_path = path.join(__dirname, "chrome_linux64/easyspider_executestage"); } +console.log(driverPath, chromeBinaryPath, execute_path); let language = "en"; -let server_address = "https://servicewrapper.systems"; let driver = null; let mainWindow = null; let flowchart_window = null; @@ -54,10 +58,10 @@ let flowchart_window = null; function createWindow() { // Create the browser window. mainWindow = new BrowserWindow({ - width: 500, - height: 300, + width: 520, + height: 750, webPreferences: { - preload: path.join(__dirname, 'preload.js') + preload: path.join(__dirname, 'src/js/preload.js') }, icon: iconPath, // frame: false, //取消window自带的关闭最小化等 @@ -65,12 +69,16 @@ function createWindow() { }) // and load the index.html of the app. - mainWindow.loadFile('src/index.html'); - + // mainWindow.loadFile('src/index.html'); + mainWindow.loadURL(server_address + '/index.html?user_data_folder=' + config.user_data_folder); // 隐藏菜单栏 const { Menu } = require('electron'); Menu.setApplicationMenu(null); - + mainWindow.on('close', function (e) { + if (process.platform !== 'darwin'){ + app.quit(); + } + }); // mainWindow.webContents.openDevTools(); // Open the DevTools. // mainWindow.webContents.openDevTools() @@ -82,16 +90,14 @@ function beginInvoke(msg) { if (msg.message.id != -1) { let url = ""; if (language == "zh"){ - url = server_address + `/FlowChart_CN.html?id=${msg.message.id}&backEndAddressServiceWrapper=` + server_address; + url = server_address + `/taskGrid/FlowChart_CN.html?id=${msg.message.id}&wsport=${websocket_port}&backEndAddressServiceWrapper=` + server_address; } else if(language == "en"){ - url = server_address + `/FlowChart.html?id=${msg.message.id}&backEndAddressServiceWrapper=` + server_address; + url = server_address + `/taskGrid/FlowChart.html?id=${msg.message.id}&wsport=${websocket_port}&backEndAddressServiceWrapper=` + server_address; } console.log(url); flowchart_window.loadURL(url); } mainWindow.hide(); - flowchart_window.show(); - const { windowManager } = require("node-window-manager"); const window = windowManager.getActiveWindow(); // Prints the currently focused window bounds. console.log(window.getBounds()); @@ -103,12 +109,14 @@ function beginInvoke(msg) { let width = parseInt(size.width) let height = parseInt(size.height * 0.6) window.setBounds({ x: 0, y: size.height * 0.4, height:height, width:width }); - + flowchart_window.show(); } else if (msg.type == 2) { //keyboard const robot = require("@jitsi/robotjs"); //TODO 实现全选并删除功能,目前没有 keyInfo = msg.message.keyboardStr.split("BS}")[1]; + robot.keyTap("a", "control"); + robot.keyTap("backspace"); robot.typeString(keyInfo); robot.keyTap("shift"); robot.keyTap("shift"); @@ -125,8 +133,18 @@ function beginInvoke(msg) { } } else if (msg.type == 5){ var child = require('child_process').execFile; - var parameters = [msg.message.id, server_address]; - + // 参数顺序: 1. task id 2. server address 3. saved_file_name 4. "remote" or "local" 5. user_data_folder + // var parameters = [msg.message.id, server_address]; + let parameters = []; + console.log(msg.message) + if(msg.message.user_data_folder == null || msg.message.user_data_folder == undefined || msg.message.user_data_folder == ""){ + parameters = ["--id", msg.message.id, "--server_address", server_address]; + } else { + let user_data_folder_path = __dirname.indexOf("resources")>=0 && __dirname.indexOf("app")>=0? path.join(__dirname, "../../..", msg.message.user_data_folder): path.join(__dirname, msg.message.user_data_folder); + parameters = ["--id", msg.message.id, "--server_address", server_address, "--user_data_folder", user_data_folder_path]; + config.user_data_folder = msg.message.user_data_folder; + fs.writeFileSync(path.join(task_server.getDir(), "config.json"), JSON.stringify(config)); + } // child('Chrome/easyspider_executestage.exe', parameters, function(err,stdout, stderr) { // console.log(stdout); // }); @@ -139,12 +157,11 @@ function beginInvoke(msg) { } } - const WebSocket = require('ws'); let socket_window = null; let socket_start = null; let socket_flowchart = null; -var wss = new WebSocket.Server({ port: 8084 }); +var wss = new WebSocket.Server({ port: websocket_port }); wss.on('connection', function (ws) { ws.on('message', function (message, isBinary) { let msg = JSON.parse(message.toString()); @@ -177,7 +194,7 @@ const {windowManager} = require("node-window-manager"); console.log(process.platform); -async function runBrowser(lang="en") { +async function runBrowser(lang="en", user_data_folder='') { const serviceBuilder = new ServiceBuilder(driverPath); let options = new chrome.Options(); language = lang; @@ -187,22 +204,34 @@ async function runBrowser(lang="en") { options.addExtensions(path.join(__dirname, "EasySpider_zh.crx")); } options.setChromeBinaryPath(chromeBinaryPath); + if(user_data_folder != ""){ + let dir = __dirname.indexOf("resources")>=0 && __dirname.indexOf("app")>=0? path.join(__dirname, "../../..", user_data_folder): path.join(__dirname, user_data_folder); + options.addArguments("--user-data-dir=" + dir); + config.user_data_folder = user_data_folder; + fs.writeFileSync(path.join(task_server.getDir(), "config.json"), JSON.stringify(config)); + } driver = new Builder() .forBrowser('chrome') .setChromeOptions(options) .setChromeService(serviceBuilder) .build(); + const cdpConnection = await driver.createCDPConnection("page"); + let stealth_path = path.join(__dirname, "stealth.min.js"); + let stealth = fs.readFileSync(stealth_path, 'utf8'); + await cdpConnection.execute('Page.addScriptToEvaluateOnNewDocument', { + source: stealth, + }); try { - await driver.get(server_address + "/taskList.html?backEndAddressServiceWrapper=" + server_address + "&lang=" + lang); + await driver.get(server_address + "/taskGrid/taskList.html?wsport="+websocket_port+"&backEndAddressServiceWrapper=" + server_address + "&lang=" + lang); } finally { // await driver.quit(); // 退出浏览器 } } -function handleOpenBrowser(event, lang="en") { +function handleOpenBrowser(event, lang="en", user_data_folder= "") { const webContents = event.sender; const win = BrowserWindow.fromWebContents(webContents); - runBrowser(lang); + runBrowser(lang, user_data_folder); let size = screen.getPrimaryDisplay().workAreaSize; let width = parseInt(size.width); let height = parseInt(size.height * 0.6); @@ -216,15 +245,16 @@ function handleOpenBrowser(event, lang="en") { let url = ""; let id = -1; if (lang == "en") { - url = server_address + `/FlowChart.html?id=${id}&backEndAddressServiceWrapper=` + server_address; + url = server_address + `/taskGrid/FlowChart.html?id=${id}&wsport=${websocket_port}&backEndAddressServiceWrapper=` + server_address; }else if(lang == "zh") { - url = server_address + `/FlowChart_CN.html?id=${id}&backEndAddressServiceWrapper=` + server_address; + url = server_address + `/taskGrid/FlowChart_CN.html?id=${id}&wsport=${websocket_port}&backEndAddressServiceWrapper=` + server_address; } // and load the index.html of the app. flowchart_window.loadURL(url); flowchart_window.hide(); flowchart_window.on('close', function (event) { mainWindow.show(); + driver.quit(); }); } @@ -233,9 +263,9 @@ function handleOpenInvoke(event, lang="en"){ let url = ""; language = lang; if (lang == "en") { - url = server_address + `/taskList.html?type=1&backEndAddressServiceWrapper=` + server_address; + url = server_address + `/taskGrid/taskList.html?type=1&wsport=${websocket_port}&backEndAddressServiceWrapper=` + server_address; }else if(lang == "zh") { - url = server_address + `/taskList.html?type=1&backEndAddressServiceWrapper=` + server_address + "&lang=zh"; + url = server_address + `/taskGrid/taskList.html?type=1&wsport=${websocket_port}&backEndAddressServiceWrapper=` + server_address + "&lang=zh"; } // and load the index.html of the app. window.loadURL(url); diff --git a/ElectronJS/mime.json b/ElectronJS/mime.json new file mode 100644 index 00000000..340fa60d --- /dev/null +++ b/ElectronJS/mime.json @@ -0,0 +1,483 @@ +{ + ".323":"text/h323" , + ".3gp":"video/3gpp" , + ".aab":"application/x-authoware-bin" , + ".aam":"application/x-authoware-map" , + ".aas":"application/x-authoware-seg" , + ".acx":"application/internet-property-stream" , + ".ai":"application/postscript" , + ".aif":"audio/x-aiff" , + ".aifc":"audio/x-aiff" , + ".aiff":"audio/x-aiff" , + ".als":"audio/X-Alpha5" , + ".amc":"application/x-mpeg" , + ".ani":"application/octet-stream" , + ".apk":"application/vnd.android.package-archive" , + ".asc":"text/plain" , + ".asd":"application/astound" , + ".asf":"video/x-ms-asf" , + ".asn":"application/astound" , + ".asp":"application/x-asap" , + ".asr":"video/x-ms-asf" , + ".asx":"video/x-ms-asf" , + ".au":"audio/basic" , + ".avb":"application/octet-stream" , + ".avi":"video/x-msvideo" , + ".awb":"audio/amr-wb" , + ".axs":"application/olescript" , + ".bas":"text/plain" , + ".bcpio":"application/x-bcpio" , + ".bin ":"application/octet-stream" , + ".bld":"application/bld" , + ".bld2":"application/bld2" , + ".bmp":"image/bmp" , + ".bpk":"application/octet-stream" , + ".bz2":"application/x-bzip2" , + ".c":"text/plain" , + ".cal":"image/x-cals" , + ".cat":"application/vnd.ms-pkiseccat" , + ".ccn":"application/x-cnc" , + ".cco":"application/x-cocoa" , + ".cdf":"application/x-cdf" , + ".cer":"application/x-x509-ca-cert" , + ".cgi":"magnus-internal/cgi" , + ".chat":"application/x-chat" , + ".class":"application/octet-stream" , + ".clp":"application/x-msclip" , + ".cmx":"image/x-cmx" , + ".co":"application/x-cult3d-object" , + ".cod":"image/cis-cod" , + ".conf":"text/plain" , + ".cpio":"application/x-cpio" , + ".cpp":"text/plain" , + ".cpt":"application/mac-compactpro" , + ".crd":"application/x-mscardfile" , + ".crl":"application/pkix-crl" , + ".crt":"application/x-x509-ca-cert" , + ".csh":"application/x-csh" , + ".csm":"chemical/x-csml" , + ".csml":"chemical/x-csml" , + ".css":"text/css" , + ".cur":"application/octet-stream" , + ".dcm":"x-lml/x-evm" , + ".dcr":"application/x-director" , + ".dcx":"image/x-dcx" , + ".der":"application/x-x509-ca-cert" , + ".dhtml":"text/html" , + ".dir":"application/x-director" , + ".dll":"application/x-msdownload" , + ".dmg":"application/octet-stream" , + ".dms":"application/octet-stream" , + ".doc":"application/msword" , + ".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document" , + ".dot":"application/msword" , + ".dvi":"application/x-dvi" , + ".dwf":"drawing/x-dwf" , + ".dwg":"application/x-autocad" , + ".dxf":"application/x-autocad" , + ".dxr":"application/x-director" , + ".ebk":"application/x-expandedbook" , + ".emb":"chemical/x-embl-dl-nucleotide" , + ".embl":"chemical/x-embl-dl-nucleotide" , + ".eps":"application/postscript" , + ".epub":"application/epub+zip" , + ".eri":"image/x-eri" , + ".es":"audio/echospeech" , + ".esl":"audio/echospeech" , + ".etc":"application/x-earthtime" , + ".etx":"text/x-setext" , + ".evm":"x-lml/x-evm" , + ".evy":"application/envoy" , + ".exe":"application/octet-stream" , + ".fh4":"image/x-freehand" , + ".fh5":"image/x-freehand" , + ".fhc":"image/x-freehand" , + ".fif":"application/fractals" , + ".flr":"x-world/x-vrml" , + ".flv":"flv-application/octet-stream" , + ".fm":"application/x-maker" , + ".fpx":"image/x-fpx" , + ".fvi":"video/isivideo" , + ".gau":"chemical/x-gaussian-input" , + ".gca":"application/x-gca-compressed" , + ".gdb":"x-lml/x-gdb" , + ".gif":"image/gif" , + ".gps":"application/x-gps" , + ".gtar":"application/x-gtar" , + ".gz":"application/x-gzip" , + ".h":"text/plain" , + ".hdf":"application/x-hdf" , + ".hdm":"text/x-hdml" , + ".hdml":"text/x-hdml" , + ".hlp":"application/winhlp" , + ".hqx":"application/mac-binhex40" , + ".hta":"application/hta" , + ".htc":"text/x-component" , + ".htm":"text/html" , + ".html":"text/html" , + ".hts":"text/html" , + ".htt":"text/webviewhtml" , + ".ice":"x-conference/x-cooltalk" , + ".ico":"image/x-icon" , + ".ief":"image/ief" , + ".ifm":"image/gif" , + ".ifs":"image/ifs" , + ".iii":"application/x-iphone" , + ".imy":"audio/melody" , + ".ins":"application/x-internet-signup" , + ".ips":"application/x-ipscript" , + ".ipx":"application/x-ipix" , + ".isp":"application/x-internet-signup" , + ".it":"audio/x-mod" , + ".itz":"audio/x-mod" , + ".ivr":"i-world/i-vrml" , + ".j2k":"image/j2k" , + ".jad":"text/vnd.sun.j2me.app-descriptor" , + ".jam":"application/x-jam" , + ".jar":"application/java-archive" , + ".java":"text/plain" , + ".jfif":"image/pipeg" , + ".jnlp":"application/x-java-jnlp-file" , + ".jpe":"image/jpeg" , + ".jpeg":"image/jpeg" , + ".jpg":"image/jpeg" , + ".jpz":"image/jpeg" , + ".js":"application/x-javascript" , + ".jwc":"application/jwc" , + ".kjx":"application/x-kjx" , + ".lak":"x-lml/x-lak" , + ".latex":"application/x-latex" , + ".lcc":"application/fastman" , + ".lcl":"application/x-digitalloca" , + ".lcr":"application/x-digitalloca" , + ".lgh":"application/lgh" , + ".lha":"application/octet-stream" , + ".lml":"x-lml/x-lml" , + ".lmlpack":"x-lml/x-lmlpack" , + ".log":"text/plain" , + ".lsf":"video/x-la-asf" , + ".lsx":"video/x-la-asf" , + ".lzh":"application/octet-stream" , + ".m13":"application/x-msmediaview" , + ".m14":"application/x-msmediaview" , + ".m15":"audio/x-mod" , + ".m3u":"audio/x-mpegurl" , + ".m3url":"audio/x-mpegurl" , + ".m4a":"audio/mp4a-latm" , + ".m4b":"audio/mp4a-latm" , + ".m4p":"audio/mp4a-latm" , + ".m4u":"video/vnd.mpegurl" , + ".m4v":"video/x-m4v" , + ".ma1":"audio/ma1" , + ".ma2":"audio/ma2" , + ".ma3":"audio/ma3" , + ".ma5":"audio/ma5" , + ".man":"application/x-troff-man" , + ".map":"magnus-internal/imagemap" , + ".mbd":"application/mbedlet" , + ".mct":"application/x-mascot" , + ".mdb":"application/x-msaccess" , + ".mdz":"audio/x-mod" , + ".me":"application/x-troff-me" , + ".mel":"text/x-vmel" , + ".mht":"message/rfc822" , + ".mhtml":"message/rfc822" , + ".mi":"application/x-mif" , + ".mid":"audio/mid" , + ".midi":"audio/midi" , + ".mif":"application/x-mif" , + ".mil":"image/x-cals" , + ".mio":"audio/x-mio" , + ".mmf":"application/x-skt-lbs" , + ".mng":"video/x-mng" , + ".mny":"application/x-msmoney" , + ".moc":"application/x-mocha" , + ".mocha":"application/x-mocha" , + ".mod":"audio/x-mod" , + ".mof":"application/x-yumekara" , + ".mol":"chemical/x-mdl-molfile" , + ".mop":"chemical/x-mopac-input" , + ".mov":"video/quicktime" , + ".movie":"video/x-sgi-movie" , + ".mp2":"video/mpeg" , + ".mp3":"audio/mpeg" , + ".mp4":"video/mp4" , + ".mpa":"video/mpeg" , + ".mpc":"application/vnd.mpohun.certificate" , + ".mpe":"video/mpeg" , + ".mpeg":"video/mpeg" , + ".mpg":"video/mpeg" , + ".mpg4":"video/mp4" , + ".mpga":"audio/mpeg" , + ".mpn":"application/vnd.mophun.application" , + ".mpp":"application/vnd.ms-project" , + ".mps":"application/x-mapserver" , + ".mpv2":"video/mpeg" , + ".mrl":"text/x-mrml" , + ".mrm":"application/x-mrm" , + ".ms":"application/x-troff-ms" , + ".msg":"application/vnd.ms-outlook" , + ".mts":"application/metastream" , + ".mtx":"application/metastream" , + ".mtz":"application/metastream" , + ".mvb":"application/x-msmediaview" , + ".mzv":"application/metastream" , + ".nar":"application/zip" , + ".nbmp":"image/nbmp" , + ".nc":"application/x-netcdf" , + ".ndb":"x-lml/x-ndb" , + ".ndwn":"application/ndwn" , + ".nif":"application/x-nif" , + ".nmz":"application/x-scream" , + ".nokia-op-logo":"image/vnd.nok-oplogo-color" , + ".npx":"application/x-netfpx" , + ".nsnd":"audio/nsnd" , + ".nva":"application/x-neva1" , + ".nws":"message/rfc822" , + ".oda":"application/oda" , + ".ogg":"audio/ogg" , + ".oom":"application/x-AtlasMate-Plugin" , + ".p10":"application/pkcs10" , + ".p12":"application/x-pkcs12" , + ".p7b":"application/x-pkcs7-certificates" , + ".p7c":"application/x-pkcs7-mime" , + ".p7m":"application/x-pkcs7-mime" , + ".p7r":"application/x-pkcs7-certreqresp" , + ".p7s":"application/x-pkcs7-signature" , + ".pac":"audio/x-pac" , + ".pae":"audio/x-epac" , + ".pan":"application/x-pan" , + ".pbm":"image/x-portable-bitmap" , + ".pcx":"image/x-pcx" , + ".pda":"image/x-pda" , + ".pdb":"chemical/x-pdb" , + ".pdf":"application/pdf" , + ".pfr":"application/font-tdpfr" , + ".pfx":"application/x-pkcs12" , + ".pgm":"image/x-portable-graymap" , + ".pict":"image/x-pict" , + ".pko":"application/ynd.ms-pkipko" , + ".pm":"application/x-perl" , + ".pma":"application/x-perfmon" , + ".pmc":"application/x-perfmon" , + ".pmd":"application/x-pmd" , + ".pml":"application/x-perfmon" , + ".pmr":"application/x-perfmon" , + ".pmw":"application/x-perfmon" , + ".png":"image/png" , + ".pnm":"image/x-portable-anymap" , + ".pnz":"image/png" , + ".pot,":"application/vnd.ms-powerpoint" , + ".ppm":"image/x-portable-pixmap" , + ".pps":"application/vnd.ms-powerpoint" , + ".ppt":"application/vnd.ms-powerpoint" , + ".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation" , + ".pqf":"application/x-cprplayer" , + ".pqi":"application/cprplayer" , + ".prc":"application/x-prc" , + ".prf":"application/pics-rules" , + ".prop":"text/plain" , + ".proxy":"application/x-ns-proxy-autoconfig" , + ".ps":"application/postscript" , + ".ptlk":"application/listenup" , + ".pub":"application/x-mspublisher" , + ".pvx":"video/x-pv-pvx" , + ".qcp":"audio/vnd.qcelp" , + ".qt":"video/quicktime" , + ".qti":"image/x-quicktime" , + ".qtif":"image/x-quicktime" , + ".r3t":"text/vnd.rn-realtext3d" , + ".ra":"audio/x-pn-realaudio" , + ".ram":"audio/x-pn-realaudio" , + ".rar":"application/octet-stream" , + ".ras":"image/x-cmu-raster" , + ".rc":"text/plain" , + ".rdf":"application/rdf+xml" , + ".rf":"image/vnd.rn-realflash" , + ".rgb":"image/x-rgb" , + ".rlf":"application/x-richlink" , + ".rm":"audio/x-pn-realaudio" , + ".rmf":"audio/x-rmf" , + ".rmi":"audio/mid" , + ".rmm":"audio/x-pn-realaudio" , + ".rmvb":"audio/x-pn-realaudio" , + ".rnx":"application/vnd.rn-realplayer" , + ".roff":"application/x-troff" , + ".rp":"image/vnd.rn-realpix" , + ".rpm":"audio/x-pn-realaudio-plugin" , + ".rt":"text/vnd.rn-realtext" , + ".rte":"x-lml/x-gps" , + ".rtf":"application/rtf" , + ".rtg":"application/metastream" , + ".rtx":"text/richtext" , + ".rv":"video/vnd.rn-realvideo" , + ".rwc":"application/x-rogerwilco" , + ".s3m":"audio/x-mod" , + ".s3z":"audio/x-mod" , + ".sca":"application/x-supercard" , + ".scd":"application/x-msschedule" , + ".sct":"text/scriptlet" , + ".sdf":"application/e-score" , + ".sea":"application/x-stuffit" , + ".setpay":"application/set-payment-initiation" , + ".setreg":"application/set-registration-initiation" , + ".sgm":"text/x-sgml" , + ".sgml":"text/x-sgml" , + ".sh":"application/x-sh" , + ".shar":"application/x-shar" , + ".shtml":"magnus-internal/parsed-html" , + ".shw":"application/presentations" , + ".si6":"image/si6" , + ".si7":"image/vnd.stiwap.sis" , + ".si9":"image/vnd.lgtwap.sis" , + ".sis":"application/vnd.symbian.install" , + ".sit":"application/x-stuffit" , + ".skd":"application/x-Koan" , + ".skm":"application/x-Koan" , + ".skp":"application/x-Koan" , + ".skt":"application/x-Koan" , + ".slc":"application/x-salsa" , + ".smd":"audio/x-smd" , + ".smi":"application/smil" , + ".smil":"application/smil" , + ".smp":"application/studiom" , + ".smz":"audio/x-smd" , + ".snd":"audio/basic" , + ".spc":"application/x-pkcs7-certificates" , + ".spl":"application/futuresplash" , + ".spr":"application/x-sprite" , + ".sprite":"application/x-sprite" , + ".sdp":"application/sdp" , + ".spt":"application/x-spt" , + ".src":"application/x-wais-source" , + ".sst":"application/vnd.ms-pkicertstore" , + ".stk":"application/hyperstudio" , + ".stl":"application/vnd.ms-pkistl" , + ".stm":"text/html" , + ".svg":"image/svg+xml" , + ".sv4cpio":"application/x-sv4cpio" , + ".sv4crc":"application/x-sv4crc" , + ".svf":"image/vnd" , + ".svh":"image/svh" , + ".svr":"x-world/x-svr" , + ".swf":"application/x-shockwave-flash" , + ".swfl":"application/x-shockwave-flash" , + ".t":"application/x-troff" , + ".tad":"application/octet-stream" , + ".talk":"text/x-speech" , + ".tar":"application/x-tar" , + ".taz":"application/x-tar" , + ".tbp":"application/x-timbuktu" , + ".tbt":"application/x-timbuktu" , + ".tcl":"application/x-tcl" , + ".tex":"application/x-tex" , + ".texi":"application/x-texinfo" , + ".texinfo":"application/x-texinfo" , + ".tgz":"application/x-compressed" , + ".thm":"application/vnd.eri.thm" , + ".tif":"image/tiff" , + ".tiff":"image/tiff" , + ".tki":"application/x-tkined" , + ".tkined":"application/x-tkined" , + ".toc":"application/toc" , + ".toy":"image/toy" , + ".tr":"application/x-troff" , + ".trk":"x-lml/x-gps" , + ".trm":"application/x-msterminal" , + ".tsi":"audio/tsplayer" , + ".tsp":"application/dsptype" , + ".tsv":"text/tab-separated-values" , + ".ttf":"application/octet-stream" , + ".ttz":"application/t-time" , + ".txt":"text/plain" , + ".uls":"text/iuls" , + ".ult":"audio/x-mod" , + ".ustar":"application/x-ustar" , + ".uu":"application/x-uuencode" , + ".uue":"application/x-uuencode" , + ".vcd":"application/x-cdlink" , + ".vcf":"text/x-vcard" , + ".vdo":"video/vdo" , + ".vib":"audio/vib" , + ".viv":"video/vivo" , + ".vivo":"video/vivo" , + ".vmd":"application/vocaltec-media-desc" , + ".vmf":"application/vocaltec-media-file" , + ".vmi":"application/x-dreamcast-vms-info" , + ".vms":"application/x-dreamcast-vms" , + ".vox":"audio/voxware" , + ".vqe":"audio/x-twinvq-plugin" , + ".vqf":"audio/x-twinvq" , + ".vql":"audio/x-twinvq" , + ".vre":"x-world/x-vream" , + ".vrml":"x-world/x-vrml" , + ".vrt":"x-world/x-vrt" , + ".vrw":"x-world/x-vream" , + ".vts":"workbook/formulaone" , + ".wav":"audio/x-wav" , + ".wax":"audio/x-ms-wax" , + ".wbmp":"image/vnd.wap.wbmp" , + ".wcm":"application/vnd.ms-works" , + ".wdb":"application/vnd.ms-works" , + ".web":"application/vnd.xara" , + ".wi":"image/wavelet" , + ".wis":"application/x-InstallShield" , + ".wks":"application/vnd.ms-works" , + ".wm":"video/x-ms-wm" , + ".wma":"audio/x-ms-wma" , + ".wmd":"application/x-ms-wmd" , + ".wmf":"application/x-msmetafile" , + ".wml":"text/vnd.wap.wml" , + ".wmlc":"application/vnd.wap.wmlc" , + ".wmls":"text/vnd.wap.wmlscript" , + ".wmlsc":"application/vnd.wap.wmlscriptc" , + ".wmlscript":"text/vnd.wap.wmlscript" , + ".wmv":"audio/x-ms-wmv" , + ".wmx":"video/x-ms-wmx" , + ".wmz":"application/x-ms-wmz" , + ".wpng":"image/x-up-wpng" , + ".wps":"application/vnd.ms-works" , + ".wpt":"x-lml/x-gps" , + ".wri":"application/x-mswrite" , + ".wrl":"x-world/x-vrml" , + ".wrz":"x-world/x-vrml" , + ".ws":"text/vnd.wap.wmlscript" , + ".wsc":"application/vnd.wap.wmlscriptc" , + ".wv":"video/wavelet" , + ".wvx":"video/x-ms-wvx" , + ".wxl":"application/x-wxl" , + ".x-gzip":"application/x-gzip" , + ".xaf":"x-world/x-vrml" , + ".xar":"application/vnd.xara" , + ".xbm":"image/x-xbitmap" , + ".xdm":"application/x-xdma" , + ".xdma":"application/x-xdma" , + ".xdw":"application/vnd.fujixerox.docuworks" , + ".xht":"application/xhtml+xml" , + ".xhtm":"application/xhtml+xml" , + ".xhtml":"application/xhtml+xml" , + ".xla":"application/vnd.ms-excel" , + ".xlc":"application/vnd.ms-excel" , + ".xll":"application/x-excel" , + ".xlm":"application/vnd.ms-excel" , + ".xls":"application/vnd.ms-excel" , + ".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" , + ".xlt":"application/vnd.ms-excel" , + ".xlw":"application/vnd.ms-excel" , + ".xm":"audio/x-mod" , + ".xml":"application/xml", + ".xmz":"audio/x-mod" , + ".xof":"x-world/x-vrml" , + ".xpi":"application/x-xpinstall" , + ".xpm":"image/x-xpixmap" , + ".xsit":"text/xml" , + ".xsl":"text/xml" , + ".xul":"text/xul" , + ".xwd":"image/x-xwindowdump" , + ".xyz":"chemical/x-pdb" , + ".yz1":"application/x-yz1" , + ".z":"application/x-compress" , + ".zac":"application/x-zaurus-zac" , + ".zip":"application/zip" , + ".json":"application/json" +} \ No newline at end of file diff --git a/ElectronJS/package.cmd b/ElectronJS/package.cmd deleted file mode 100644 index fc62125f..00000000 --- a/ElectronJS/package.cmd +++ /dev/null @@ -1,2 +0,0 @@ -rmdir /s C:\Users\q9823\AppData\Local\Temp\electron-packager -npm run package \ No newline at end of file diff --git a/ElectronJS/package.json b/ElectronJS/package.json index 4221efb5..cad918be 100644 --- a/ElectronJS/package.json +++ b/ElectronJS/package.json @@ -50,7 +50,7 @@ "appCopyright": "Naibo Wang(naibowang@foxmail.com)", "win32metadata": { "ProductName": "EasySpider", - "CompanyName": "浙江大学", + "CompanyName": "王乃博 (浙江大学)", "FileDescription": "EasySpider" } }, diff --git a/ElectronJS/package_win64.cmd b/ElectronJS/package_win64.cmd new file mode 100644 index 00000000..dc7fabc5 --- /dev/null +++ b/ElectronJS/package_win64.cmd @@ -0,0 +1,24 @@ +@echo off +>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" +if '%errorlevel%' NEQ '0' ( +goto UACPrompt +) else ( goto gotAdmin ) +:UACPrompt +echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" +echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" +"%temp%\getadmin.vbs" +exit /B +:gotAdmin +if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) +pushd "%CD%" +CD /D "%~dp0" + +rmdir /s /q C:\Users\q9823\AppData\Local\Temp\electron-packager +rmdir /s /q out +npm run package +move out\EasySpider-win32-x64 out\EasySpider +rmdir /s /q out\EasySpider\resources\app\chrome_win32 +rmdir /s /q out\EasySpider\resources\app\Data +rmdir /s /q out\EasySpider\resources\app\.idea +rmdir/s /q out\EasySpider\resources\app\tasks +rmdir /s /q out\EasySpider\resources\app\execution_instances \ No newline at end of file diff --git a/ElectronJS/server.js b/ElectronJS/server.js index 81a7c497..2569c448 100644 --- a/ElectronJS/server.js +++ b/ElectronJS/server.js @@ -13,39 +13,97 @@ function travel(dir,callback){ } }) } +function compare(p){ //这是比较函数 + return function(m,n){ + var a = m[p]; + var b = n[p]; + return b - a; //降序 + } +} +function getDir(){ + if(__dirname.indexOf("app") >= 0 && __dirname.indexOf("resources") >= 0){ + return path.join(__dirname,"../../.."); + } else{ + return __dirname; + } +} +exports.getDir = getDir; +FileMimes = JSON.parse(fs.readFileSync(path.join(__dirname,'mime.json')).toString()); exports.start = function(port = 8074) { http.createServer(function(req, res) { let body = ""; res.setHeader("Access-Control-Allow-Origin", "*"); // 设置可访问的源 - res.writeHead(200, { 'Content-Type': 'application/json' }); + // 解析参数 + const pathName = url.parse(req.url).pathname; + if(pathName.indexOf(".") < 0) { //如果没有后缀名, 则为后台请求 + res.writeHead(200, { 'Content-Type': 'application/json' }); + } + // else if(pathName.indexOf("index.html") >= 0) { + // fs.readFile(path.join(__dirname,"src", pathName), async (err, data) => { + // if (err) { + // res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' }) + // res.end(err.message) + // return; + // } + // if (!err) { + // // 3. 针对不同的文件返回不同的内容头 + // let extname = path.extname(pathName); + // let mime = FileMimes[extname] + // res.writeHead(200, { 'Content-Type': mime + ';charset="utf-8"' }) + // res.end(data); + // return; + // } + // }) + // } + else { //如果有后缀名, 则为前端请求 + // console.log(path.join(__dirname,"src/taskGrid", pathName)); + fs.readFile(path.join(__dirname,"src", pathName), async (err, data) => { + if (err) { + res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' }) + res.end(err.message) + return; + } + if (!err) { + // 3. 针对不同的文件返回不同的内容头 + let extname = path.extname(pathName); + let mime = FileMimes[extname] + res.writeHead(200, { 'Content-Type': mime + ';charset="utf-8"' }) + res.end(data); + return; + } + }) + } + + req.on('data', function(chunk) { body += chunk; }); req.on('end', function() { - // 解析参数 - const pathName = url.parse(req.url).pathname; // 设置响应头部信息及编码 if (pathName == "/queryTasks") { //查询所有服务信息,只包括id和服务名称 output = []; - travel(path.join(__dirname, "tasks"),function(pathname){ + travel(path.join(getDir(), "tasks"),function(pathname){ const data = fs.readFileSync(pathname, 'utf8'); + let stat = fs.statSync(pathname, 'utf8'); // parse JSON string to JSON object const task = JSON.parse(data); let item = { "id": task.id, "name": task.name, "url": task.url, + "mtime": stat.mtime, } if(item.id!= -2) { output.push(item); } }); + output.sort(compare("mtime")); res.write(JSON.stringify(output)); res.end(); } else if (pathName == "/queryExecutionInstances") { //查询所有服务信息,只包括id和服务名称 output = []; - travel(path.join(__dirname, "execution_instances"),function(pathname){ + travel(path.join(getDir(), "execution_instances"),function(pathname){ const data = fs.readFileSync(pathname, 'utf8'); // parse JSON string to JSON object const task = JSON.parse(data); @@ -64,7 +122,7 @@ exports.start = function(port = 8074) { var params = url.parse(req.url, true).query; try { var tid = parseInt(params.id); - const data = fs.readFileSync(path.join(__dirname, `tasks/${tid}.json`), 'utf8'); + const data = fs.readFileSync(path.join(getDir(), `tasks/${tid}.json`), 'utf8'); // parse JSON string to JSON object res.write(data); res.end(); @@ -76,7 +134,7 @@ exports.start = function(port = 8074) { var params = url.parse(req.url, true).query; try { var tid = parseInt(params.id); - const data = fs.readFileSync(path.join(__dirname, `execution_instances/${tid}.json`), 'utf8'); + const data = fs.readFileSync(path.join(getDir(), `execution_instances/${tid}.json`), 'utf8'); // parse JSON string to JSON object res.write(data); res.end(); @@ -91,12 +149,12 @@ exports.start = function(port = 8074) { var params = url.parse(req.url, true).query; try { let tid = parseInt(params.id); - let data = fs.readFileSync(path.join(__dirname, `tasks/${tid}.json`), 'utf8'); + let data = fs.readFileSync(path.join(getDir(), `tasks/${tid}.json`), 'utf8'); data = JSON.parse(data); data.id = -2; data = JSON.stringify(data); // write JSON string to a file - fs.writeFile(path.join(__dirname, `tasks/${tid}.json`), data, (err) => { + fs.writeFile(path.join(getDir(), `tasks/${tid}.json`), data, (err) => { if (err) { throw err; } @@ -113,7 +171,7 @@ exports.start = function(port = 8074) { let id = data["id"]; if (data["id"] == -1) { file_names = []; - fs.readdirSync(path.join(__dirname, "tasks")).forEach((file)=>{ + fs.readdirSync(path.join(getDir(), "tasks")).forEach((file)=>{ try{ file_names.push(parseInt(file.split(".")[0])); } catch (error) { @@ -130,14 +188,14 @@ exports.start = function(port = 8074) { } data = JSON.stringify(data); // write JSON string to a file - fs.writeFile(path.join(__dirname, `tasks/${id}.json`), data, (err) => {}); + fs.writeFile(path.join(getDir(), `tasks/${id}.json`), data, (err) => {}); res.write(id.toString(), 'utf8'); res.end(); } else if(pathName == "/invokeTask"){ body = querystring.parse(body); let data = JSON.parse(body.paras); let id = body.id; - let task = fs.readFileSync(path.join(__dirname, `tasks/${id}.json`), 'utf8'); + let task = fs.readFileSync(path.join(getDir(), `tasks/${id}.json`), 'utf8'); task = JSON.parse(task); try{ task["links"] = data["urlList_0"]; @@ -163,7 +221,7 @@ exports.start = function(port = 8074) { } } let file_names = []; - fs.readdirSync(path.join(__dirname, "execution_instances")).forEach((file)=>{ + fs.readdirSync(path.join(getDir(), "execution_instances")).forEach((file)=>{ try{ file_names.push(parseInt(file.split(".")[0])); } catch (error) { @@ -176,9 +234,23 @@ exports.start = function(port = 8074) { } task["id"] = eid; task = JSON.stringify(task); - fs.writeFile(path.join(__dirname, `execution_instances/${eid}.json`), task, (err) => {}); + fs.writeFile(path.join(getDir(), `execution_instances/${eid}.json`), task, (err) => {}); res.write(eid.toString(), 'utf8'); res.end(); + } else if(pathName == "/getConfig"){ + let config = fs.readFileSync(path.join(getDir(), `config.json`), 'utf8'); + config = JSON.parse(config); + res.write(JSON.stringify(config)); + res.end(); + } else if(pathName == "/setUserDataFolder"){ + let config = fs.readFileSync(path.join(getDir(), `config.json`), 'utf8'); + config = JSON.parse(config); + body = querystring.parse(body); + config["user_data_folder"] = body["user_data_folder"]; + config = JSON.stringify(config); + fs.writeFile(path.join(getDir(), `config.json`), config, (err) => {}); + res.write(JSON.stringify({ "success": "User data folder has been set successfully." })); + res.end(); } }); }).listen(port); diff --git a/ElectronJS/src/bootstrap/test2.html b/ElectronJS/src/bootstrap/test2.html index c313b4da..2a3171b5 100644 --- a/ElectronJS/src/bootstrap/test2.html +++ b/ElectronJS/src/bootstrap/test2.html @@ -27,7 +27,7 @@ - + diff --git a/ElectronJS/preload.js b/ElectronJS/src/js/preload.js similarity index 78% rename from ElectronJS/preload.js rename to ElectronJS/src/js/preload.js index a301f20a..d5648308 100644 --- a/ElectronJS/preload.js +++ b/ElectronJS/src/js/preload.js @@ -8,6 +8,6 @@ const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { - startDesign: (lang="en") => ipcRenderer.send('start-design', lang), + startDesign: (lang="en", user_data_folder = '') => ipcRenderer.send('start-design', lang, user_data_folder), startInvoke: (lang="en") => ipcRenderer.send('start-invoke', lang), }) \ No newline at end of file diff --git a/ElectronJS/src/js/renderer.js b/ElectronJS/src/js/renderer.js deleted file mode 100644 index dbf4acba..00000000 --- a/ElectronJS/src/js/renderer.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * This file is loaded via the @@ -85,9 +92,12 @@

{{"Task Invocation~任务调用" | lang}}

{{"Hint: Click the following button to get the Execution ID (EID) of current running task.~提示:点击下方按钮获得任务执行ID,然后根据此执行ID运行任务。" | lang}}

-
{{"Get Execution ID~获得任务执行ID" | - lang}} - + + @@ -99,6 +109,12 @@

{{"Task Invocation~任务调用" | lang}}

+ + \ No newline at end of file diff --git a/ElectronJS/src/taskGrid/taskInfo.html b/ElectronJS/src/taskGrid/taskInfo.html index 77a556cd..a12d16d5 100644 --- a/ElectronJS/src/taskGrid/taskInfo.html +++ b/ElectronJS/src/taskGrid/taskInfo.html @@ -123,9 +123,9 @@

{{"Task Information~任务信息" | lang}}

gotoHome:function(){ let url = ""; if(getUrlParam("lang")=="zh"){ - url = "taskList.html?lang=zh&type="+getUrlParam("type")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper + url = "taskList.html?lang=zh&type="+getUrlParam("type")+"&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper } else{ - url = "taskList.html?lang=en&type="+getUrlParam("type")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper + url = "taskList.html?lang=en&type="+getUrlParam("type")+"&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper } window.location.href= url; }, @@ -139,18 +139,18 @@

{{"Task Information~任务信息" | lang}}

// ws.send(JSON.stringify(message)); // window.location.href = url; //跳转链接 if(getUrlParam("lang")=="zh"){ - window.location.href = "FlowChart_CN.html?type="+getUrlParam("type")+"&lang="+getUrlParam("lang")+"&id=" + id + "&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper + window.location.href = "FlowChart_CN.html?type="+getUrlParam("type")+"&lang="+getUrlParam("lang")+"&id=" + id + "&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper } else{ - window.location.href = "FlowChart.html?type="+getUrlParam("type")+"&lang="+getUrlParam("lang")+"&id=" + id + "&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper + window.location.href = "FlowChart.html?type="+getUrlParam("type")+"&lang="+getUrlParam("lang")+"&id=" + id + "&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper } }, invokeTask: function(id) { - window.location.href = "invokeTask.html?type="+getUrlParam("type")+"&lang="+getUrlParam("lang")+"&id=" + id + "&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper; + window.location.href = "invokeTask.html?type="+getUrlParam("type")+"&lang="+getUrlParam("lang")+"&id=" + id + "&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper; }, } }); - $.get(app.$data.backEndAddressServiceWrapper + "/backEnd/queryService?id=" + sId, function(result) { + $.get(app.$data.backEndAddressServiceWrapper + "/queryTask?id=" + sId, function(result) { app.$data.task = result; app.$data.show = true; }); diff --git a/ElectronJS/src/taskGrid/taskList.html b/ElectronJS/src/taskGrid/taskList.html index 98f66ae8..3807b039 100644 --- a/ElectronJS/src/taskGrid/taskList.html +++ b/ElectronJS/src/taskGrid/taskList.html @@ -57,7 +57,7 @@

{{"Task List~任务列表" | lang}}

}, methods: { newTask: function (){ - window.location.href = "newTask.html?lang="+getUrlParam("lang")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper;; + window.location.href = "newTask.html?lang="+getUrlParam("lang")+"&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper; }, modifyTask: function(id, url) { let message = { //显示flowchart @@ -70,7 +70,7 @@

{{"Task List~任务列表" | lang}}

window.location.href = url; //跳转链接 }, browseTask: function(id) { - window.location.href = "taskInfo.html?type="+getUrlParam("type")+"&id=" + id + "&lang="+getUrlParam("lang")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper; //跳转链接 + window.location.href = "taskInfo.html?type="+getUrlParam("type")+"&id=" + id + "&lang="+getUrlParam("lang")+"&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper; //跳转链接 }, deleteTask: function(id) { let text = "Are you sure to remove the selected task?"; @@ -80,8 +80,8 @@

{{"Task List~任务列表" | lang}}

text = "确定要删除选中的任务吗?"; } if (confirm(text)) { - $.get(app.$data.backEndAddressServiceWrapper + "/backEnd/deleteService?id=" + id, function(res) { - $.get(app.$data.backEndAddressServiceWrapper + "/backEnd/queryServices", function(re) { + $.get(app.$data.backEndAddressServiceWrapper + "/deleteTask?id=" + id, function(res) { + $.get(app.$data.backEndAddressServiceWrapper + "/queryTasks", function(re) { result = re.sort(desc); app.$data.list = result; }); @@ -95,14 +95,14 @@

{{"Task List~任务列表" | lang}}

var desc = function(x, y) { return (x["id"] < y["id"]) ? 1 : -1 } - $.get(app.$data.backEndAddressServiceWrapper + "/backEnd/queryServices", function(re) { - result = re.sort(desc); - app.$data.list = result; + $.get(app.$data.backEndAddressServiceWrapper + "/queryTasks", function(re) { + // result = re.sort(desc); + app.$data.list = re; if (getUrlParam("type") == "1") { app.$data.type = 2; } }); - ws = new WebSocket("ws://localhost:8084"); + ws = new WebSocket("ws://localhost:"+getUrlParam("wsport")); ws.onopen = function() { // Web Socket 已连接上,使用 send() 方法发送数据 console.log("已连接"); diff --git a/ElectronJS/stealth.min.js b/ElectronJS/stealth.min.js new file mode 100644 index 00000000..107dab2f --- /dev/null +++ b/ElectronJS/stealth.min.js @@ -0,0 +1,7 @@ +/*! + * Note: Auto-generated, do not update manually. + * Generated by: https://github.com/berstend/puppeteer-extra/tree/master/packages/extract-stealth-evasions + * Generated on: Mon, 20 Mar 2023 06:25:26 GMT + * License: MIT + */ +(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:'utils => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, \'chrome\')`\n Object.defineProperty(window, \'chrome\', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We\'ll extend that later\n })\n }\n\n // That means we\'re running headful and don\'t need to mock anything\n if (\'app\' in window.chrome) {\n return // Nothing to do here\n }\n\n const makeError = {\n ErrorInInvocation: fn => {\n const err = new TypeError(`Error in invocation of app.${fn}()`)\n return utils.stripErrorWithAnchor(\n err,\n `at ${fn} (eval at `\n )\n }\n }\n\n // There\'s a some static data in that property which doesn\'t seem to change,\n // we should periodically check for updates: `JSON.stringify(window.app, null, 2)`\n const STATIC_DATA = JSON.parse(\n `\n{\n "isInstalled": false,\n "InstallState": {\n "DISABLED": "disabled",\n "INSTALLED": "installed",\n "NOT_INSTALLED": "not_installed"\n },\n "RunningState": {\n "CANNOT_RUN": "cannot_run",\n "READY_TO_RUN": "ready_to_run",\n "RUNNING": "running"\n }\n}\n `.trim()\n )\n\n window.chrome.app = {\n ...STATIC_DATA,\n\n get isInstalled() {\n return false\n },\n\n getDetails: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`getDetails`)\n }\n return null\n },\n getIsInstalled: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`getIsInstalled`)\n }\n return false\n },\n runningState: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`runningState`)\n }\n return \'cannot_run\'\n }\n }\n utils.patchToStringNested(window.chrome.app)\n }',_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"utils => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n if ('csi' in window.chrome) {\n return // Nothing to do here\n }\n\n // Check that the Navigation Timing API v1 is available, we need that\n if (!window.performance || !window.performance.timing) {\n return\n }\n\n const { timing } = window.performance\n\n window.chrome.csi = function() {\n return {\n onloadT: timing.domContentLoadedEventEnd,\n startE: timing.navigationStart,\n pageT: Date.now() - timing.navigationStart,\n tran: 15 // Transition type or something\n }\n }\n utils.patchToString(window.chrome.csi)\n }",_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n if ('loadTimes' in window.chrome) {\n return // Nothing to do here\n }\n\n // Check that the Navigation Timing API v1 + v2 is available, we need that\n if (\n !window.performance ||\n !window.performance.timing ||\n !window.PerformancePaintTiming\n ) {\n return\n }\n\n const { performance } = window\n\n // Some stuff is not available on about:blank as it requires a navigation to occur,\n // let's harden the code to not fail then:\n const ntEntryFallback = {\n nextHopProtocol: 'h2',\n type: 'other'\n }\n\n // The API exposes some funky info regarding the connection\n const protocolInfo = {\n get connectionInfo() {\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ntEntry.nextHopProtocol\n },\n get npnNegotiatedProtocol() {\n // NPN is deprecated in favor of ALPN, but this implementation returns the\n // HTTP/2 or HTTP2+QUIC/39 requests negotiated via ALPN.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n ? ntEntry.nextHopProtocol\n : 'unknown'\n },\n get navigationType() {\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ntEntry.type\n },\n get wasAlternateProtocolAvailable() {\n // The Alternate-Protocol header is deprecated in favor of Alt-Svc\n // (https://www.mnot.net/blog/2016/03/09/alt-svc), so technically this\n // should always return false.\n return false\n },\n get wasFetchedViaSpdy() {\n // SPDY is deprecated in favor of HTTP/2, but this implementation returns\n // true for HTTP/2 or HTTP2+QUIC/39 as well.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n },\n get wasNpnNegotiated() {\n // NPN is deprecated in favor of ALPN, but this implementation returns true\n // for HTTP/2 or HTTP2+QUIC/39 requests negotiated via ALPN.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n }\n }\n\n const { timing } = window.performance\n\n // Truncate number to specific number of decimals, most of the `loadTimes` stuff has 3\n function toFixed(num, fixed) {\n var re = new RegExp('^-?\\\\d+(?:.\\\\d{0,' + (fixed || -1) + '})?')\n return num.toString().match(re)[0]\n }\n\n const timingInfo = {\n get firstPaintAfterLoadTime() {\n // This was never actually implemented and always returns 0.\n return 0\n },\n get requestTime() {\n return timing.navigationStart / 1000\n },\n get startLoadTime() {\n return timing.navigationStart / 1000\n },\n get commitLoadTime() {\n return timing.responseStart / 1000\n },\n get finishDocumentLoadTime() {\n return timing.domContentLoadedEventEnd / 1000\n },\n get finishLoadTime() {\n return timing.loadEventEnd / 1000\n },\n get firstPaintTime() {\n const fpEntry = performance.getEntriesByType('paint')[0] || {\n startTime: timing.loadEventEnd / 1000 // Fallback if no navigation occured (`about:blank`)\n }\n return toFixed(\n (fpEntry.startTime + performance.timeOrigin) / 1000,\n 3\n )\n }\n }\n\n window.chrome.loadTimes = function() {\n return {\n ...protocolInfo,\n ...timingInfo\n }\n }\n utils.patchToString(window.chrome.loadTimes)\n }",_args:[{opts:{}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts, STATIC_DATA }) => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n const existsAlready = 'runtime' in window.chrome\n // `chrome.runtime` is only exposed on secure origins\n const isNotSecure = !window.location.protocol.startsWith('https')\n if (existsAlready || (isNotSecure && !opts.runOnInsecureOrigins)) {\n return // Nothing to do here\n }\n\n window.chrome.runtime = {\n // There's a bunch of static data in that property which doesn't seem to change,\n // we should periodically check for updates: `JSON.stringify(window.chrome.runtime, null, 2)`\n ...STATIC_DATA,\n // `chrome.runtime.id` is extension related and returns undefined in Chrome\n get id() {\n return undefined\n },\n // These two require more sophisticated mocks\n connect: null,\n sendMessage: null\n }\n\n const makeCustomRuntimeErrors = (preamble, method, extensionId) => ({\n NoMatchingSignature: new TypeError(\n preamble + `No matching signature.`\n ),\n MustSpecifyExtensionID: new TypeError(\n preamble +\n `${method} called from a webpage must specify an Extension ID (string) for its first argument.`\n ),\n InvalidExtensionID: new TypeError(\n preamble + `Invalid extension id: '${extensionId}'`\n )\n })\n\n // Valid Extension IDs are 32 characters in length and use the letter `a` to `p`:\n // https://source.chromium.org/chromium/chromium/src/+/master:components/crx_file/id_util.cc;drc=14a055ccb17e8c8d5d437fe080faba4c6f07beac;l=90\n const isValidExtensionID = str =>\n str.length === 32 && str.toLowerCase().match(/^[a-p]+$/)\n\n /** Mock `chrome.runtime.sendMessage` */\n const sendMessageHandler = {\n apply: function(target, ctx, args) {\n const [extensionId, options, responseCallback] = args || []\n\n // Define custom errors\n const errorPreamble = `Error in invocation of runtime.sendMessage(optional string extensionId, any message, optional object options, optional function responseCallback): `\n const Errors = makeCustomRuntimeErrors(\n errorPreamble,\n `chrome.runtime.sendMessage()`,\n extensionId\n )\n\n // Check if the call signature looks ok\n const noArguments = args.length === 0\n const tooManyArguments = args.length > 4\n const incorrectOptions = options && typeof options !== 'object'\n const incorrectResponseCallback =\n responseCallback && typeof responseCallback !== 'function'\n if (\n noArguments ||\n tooManyArguments ||\n incorrectOptions ||\n incorrectResponseCallback\n ) {\n throw Errors.NoMatchingSignature\n }\n\n // At least 2 arguments are required before we even validate the extension ID\n if (args.length < 2) {\n throw Errors.MustSpecifyExtensionID\n }\n\n // Now let's make sure we got a string as extension ID\n if (typeof extensionId !== 'string') {\n throw Errors.NoMatchingSignature\n }\n\n if (!isValidExtensionID(extensionId)) {\n throw Errors.InvalidExtensionID\n }\n\n return undefined // Normal behavior\n }\n }\n utils.mockWithProxy(\n window.chrome.runtime,\n 'sendMessage',\n function sendMessage() {},\n sendMessageHandler\n )\n\n /**\n * Mock `chrome.runtime.connect`\n *\n * @see https://developer.chrome.com/apps/runtime#method-connect\n */\n const connectHandler = {\n apply: function(target, ctx, args) {\n const [extensionId, connectInfo] = args || []\n\n // Define custom errors\n const errorPreamble = `Error in invocation of runtime.connect(optional string extensionId, optional object connectInfo): `\n const Errors = makeCustomRuntimeErrors(\n errorPreamble,\n `chrome.runtime.connect()`,\n extensionId\n )\n\n // Behavior differs a bit from sendMessage:\n const noArguments = args.length === 0\n const emptyStringArgument = args.length === 1 && extensionId === ''\n if (noArguments || emptyStringArgument) {\n throw Errors.MustSpecifyExtensionID\n }\n\n const tooManyArguments = args.length > 2\n const incorrectConnectInfoType =\n connectInfo && typeof connectInfo !== 'object'\n\n if (tooManyArguments || incorrectConnectInfoType) {\n throw Errors.NoMatchingSignature\n }\n\n const extensionIdIsString = typeof extensionId === 'string'\n if (extensionIdIsString && extensionId === '') {\n throw Errors.MustSpecifyExtensionID\n }\n if (extensionIdIsString && !isValidExtensionID(extensionId)) {\n throw Errors.InvalidExtensionID\n }\n\n // There's another edge-case here: extensionId is optional so we might find a connectInfo object as first param, which we need to validate\n const validateConnectInfo = ci => {\n // More than a first param connectInfo as been provided\n if (args.length > 1) {\n throw Errors.NoMatchingSignature\n }\n // An empty connectInfo has been provided\n if (Object.keys(ci).length === 0) {\n throw Errors.MustSpecifyExtensionID\n }\n // Loop over all connectInfo props an check them\n Object.entries(ci).forEach(([k, v]) => {\n const isExpected = ['name', 'includeTlsChannelId'].includes(k)\n if (!isExpected) {\n throw new TypeError(\n errorPreamble + `Unexpected property: '${k}'.`\n )\n }\n const MismatchError = (propName, expected, found) =>\n TypeError(\n errorPreamble +\n `Error at property '${propName}': Invalid type: expected ${expected}, found ${found}.`\n )\n if (k === 'name' && typeof v !== 'string') {\n throw MismatchError(k, 'string', typeof v)\n }\n if (k === 'includeTlsChannelId' && typeof v !== 'boolean') {\n throw MismatchError(k, 'boolean', typeof v)\n }\n })\n }\n if (typeof extensionId === 'object') {\n validateConnectInfo(extensionId)\n throw Errors.MustSpecifyExtensionID\n }\n\n // Unfortunately even when the connect fails Chrome will return an object with methods we need to mock as well\n return utils.patchToStringNested(makeConnectResponse())\n }\n }\n utils.mockWithProxy(\n window.chrome.runtime,\n 'connect',\n function connect() {},\n connectHandler\n )\n\n function makeConnectResponse() {\n const onSomething = () => ({\n addListener: function addListener() {},\n dispatch: function dispatch() {},\n hasListener: function hasListener() {},\n hasListeners: function hasListeners() {\n return false\n },\n removeListener: function removeListener() {}\n })\n\n const response = {\n name: '',\n sender: undefined,\n disconnect: function disconnect() {},\n onDisconnect: onSomething(),\n onMessage: onSomething(),\n postMessage: function postMessage() {\n if (!arguments.length) {\n throw new TypeError(`Insufficient number of arguments.`)\n }\n throw new Error(`Attempting to use a disconnected port object`)\n }\n }\n return response\n }\n }",_args:[{opts:{runOnInsecureOrigins:!1},STATIC_DATA:{OnInstalledReason:{CHROME_UPDATE:"chrome_update",INSTALL:"install",SHARED_MODULE_UPDATE:"shared_module_update",UPDATE:"update"},OnRestartRequiredReason:{APP_UPDATE:"app_update",OS_UPDATE:"os_update",PERIODIC:"periodic"},PlatformArch:{ARM:"arm",ARM64:"arm64",MIPS:"mips",MIPS64:"mips64",X86_32:"x86-32",X86_64:"x86-64"},PlatformNaclArch:{ARM:"arm",MIPS:"mips",MIPS64:"mips64",X86_32:"x86-32",X86_64:"x86-64"},PlatformOs:{ANDROID:"android",CROS:"cros",LINUX:"linux",MAC:"mac",OPENBSD:"openbsd",WIN:"win"},RequestUpdateCheckStatus:{NO_UPDATE:"no_update",THROTTLED:"throttled",UPDATE_AVAILABLE:"update_available"}}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"utils => {\n /**\n * Input might look funky, we need to normalize it so e.g. whitespace isn't an issue for our spoofing.\n *\n * @example\n * video/webm; codecs=\"vp8, vorbis\"\n * video/mp4; codecs=\"avc1.42E01E\"\n * audio/x-m4a;\n * audio/ogg; codecs=\"vorbis\"\n * @param {String} arg\n */\n const parseInput = arg => {\n const [mime, codecStr] = arg.trim().split(';')\n let codecs = []\n if (codecStr && codecStr.includes('codecs=\"')) {\n codecs = codecStr\n .trim()\n .replace(`codecs=\"`, '')\n .replace(`\"`, '')\n .trim()\n .split(',')\n .filter(x => !!x)\n .map(x => x.trim())\n }\n return {\n mime,\n codecStr,\n codecs\n }\n }\n\n const canPlayType = {\n // Intercept certain requests\n apply: function(target, ctx, args) {\n if (!args || !args.length) {\n return target.apply(ctx, args)\n }\n const { mime, codecs } = parseInput(args[0])\n // This specific mp4 codec is missing in Chromium\n if (mime === 'video/mp4') {\n if (codecs.includes('avc1.42E01E')) {\n return 'probably'\n }\n }\n // This mimetype is only supported if no codecs are specified\n if (mime === 'audio/x-m4a' && !codecs.length) {\n return 'maybe'\n }\n\n // This mimetype is only supported if no codecs are specified\n if (mime === 'audio/aac' && !codecs.length) {\n return 'probably'\n }\n // Everything else as usual\n return target.apply(ctx, args)\n }\n }\n\n /* global HTMLMediaElement */\n utils.replaceWithProxy(\n HTMLMediaElement.prototype,\n 'canPlayType',\n canPlayType\n )\n }",_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n utils.replaceGetterWithProxy(\n Object.getPrototypeOf(navigator),\n 'hardwareConcurrency',\n utils.makeHandler().getterValue(opts.hardwareConcurrency)\n )\n }",_args:[{opts:{hardwareConcurrency:4}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n const languages = opts.languages.length\n ? opts.languages\n : ['en-US', 'en']\n utils.replaceGetterWithProxy(\n Object.getPrototypeOf(navigator),\n 'languages',\n utils.makeHandler().getterValue(Object.freeze([...languages]))\n )\n }",_args:[{opts:{languages:[]}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n const isSecure = document.location.protocol.startsWith('https')\n\n // In headful on secure origins the permission should be \"default\", not \"denied\"\n if (isSecure) {\n utils.replaceGetterWithProxy(Notification, 'permission', {\n apply() {\n return 'default'\n }\n })\n }\n\n // Another weird behavior:\n // On insecure origins in headful the state is \"denied\",\n // whereas in headless it's \"prompt\"\n if (!isSecure) {\n const handler = {\n apply(target, ctx, args) {\n const param = (args || [])[0]\n\n const isNotifications =\n param && param.name && param.name === 'notifications'\n if (!isNotifications) {\n return utils.cache.Reflect.apply(...arguments)\n }\n\n return Promise.resolve(\n Object.setPrototypeOf(\n {\n state: 'denied',\n onchange: null\n },\n PermissionStatus.prototype\n )\n )\n }\n }\n // Note: Don't use `Object.getPrototypeOf` here\n utils.replaceWithProxy(Permissions.prototype, 'query', handler)\n }\n }",_args:[{}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { fns, data }) => {\n fns = utils.materializeFns(fns)\n\n // That means we're running headful\n const hasPlugins = 'plugins' in navigator && navigator.plugins.length\n if (hasPlugins) {\n return // nothing to do here\n }\n\n const mimeTypes = fns.generateMimeTypeArray(utils, fns)(data.mimeTypes)\n const plugins = fns.generatePluginArray(utils, fns)(data.plugins)\n\n // Plugin and MimeType cross-reference each other, let's do that now\n // Note: We're looping through `data.plugins` here, not the generated `plugins`\n for (const pluginData of data.plugins) {\n pluginData.__mimeTypes.forEach((type, index) => {\n plugins[pluginData.name][index] = mimeTypes[type]\n\n Object.defineProperty(plugins[pluginData.name], type, {\n value: mimeTypes[type],\n writable: false,\n enumerable: false, // Not enumerable\n configurable: true\n })\n Object.defineProperty(mimeTypes[type], 'enabledPlugin', {\n value:\n type === 'application/x-pnacl'\n ? mimeTypes['application/x-nacl'].enabledPlugin // these reference the same plugin, so we need to re-use the Proxy in order to avoid leaks\n : new Proxy(plugins[pluginData.name], {}), // Prevent circular references\n writable: false,\n enumerable: false, // Important: `JSON.stringify(navigator.plugins)`\n configurable: true\n })\n })\n }\n\n const patchNavigator = (name, value) =>\n utils.replaceProperty(Object.getPrototypeOf(navigator), name, {\n get() {\n return value\n }\n })\n\n patchNavigator('mimeTypes', mimeTypes)\n patchNavigator('plugins', plugins)\n\n // All done\n }",_args:[{fns:{generateMimeTypeArray:"(utils, fns) => mimeTypesData => {\n return fns.generateMagicArray(utils, fns)(\n mimeTypesData,\n MimeTypeArray.prototype,\n MimeType.prototype,\n 'type'\n )\n}",generatePluginArray:"(utils, fns) => pluginsData => {\n return fns.generateMagicArray(utils, fns)(\n pluginsData,\n PluginArray.prototype,\n Plugin.prototype,\n 'name'\n )\n}",generateMagicArray:"(utils, fns) =>\n function(\n dataArray = [],\n proto = MimeTypeArray.prototype,\n itemProto = MimeType.prototype,\n itemMainProp = 'type'\n ) {\n // Quick helper to set props with the same descriptors vanilla is using\n const defineProp = (obj, prop, value) =>\n Object.defineProperty(obj, prop, {\n value,\n writable: false,\n enumerable: false, // Important for mimeTypes & plugins: `JSON.stringify(navigator.mimeTypes)`\n configurable: true\n })\n\n // Loop over our fake data and construct items\n const makeItem = data => {\n const item = {}\n for (const prop of Object.keys(data)) {\n if (prop.startsWith('__')) {\n continue\n }\n defineProp(item, prop, data[prop])\n }\n return patchItem(item, data)\n }\n\n const patchItem = (item, data) => {\n let descriptor = Object.getOwnPropertyDescriptors(item)\n\n // Special case: Plugins have a magic length property which is not enumerable\n // e.g. `navigator.plugins[i].length` should always be the length of the assigned mimeTypes\n if (itemProto === Plugin.prototype) {\n descriptor = {\n ...descriptor,\n length: {\n value: data.__mimeTypes.length,\n writable: false,\n enumerable: false,\n configurable: true // Important to be able to use the ownKeys trap in a Proxy to strip `length`\n }\n }\n }\n\n // We need to spoof a specific `MimeType` or `Plugin` object\n const obj = Object.create(itemProto, descriptor)\n\n // Virtually all property keys are not enumerable in vanilla\n const blacklist = [...Object.keys(data), 'length', 'enabledPlugin']\n return new Proxy(obj, {\n ownKeys(target) {\n return Reflect.ownKeys(target).filter(k => !blacklist.includes(k))\n },\n getOwnPropertyDescriptor(target, prop) {\n if (blacklist.includes(prop)) {\n return undefined\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n }\n })\n }\n\n const magicArray = []\n\n // Loop through our fake data and use that to create convincing entities\n dataArray.forEach(data => {\n magicArray.push(makeItem(data))\n })\n\n // Add direct property access based on types (e.g. `obj['application/pdf']`) afterwards\n magicArray.forEach(entry => {\n defineProp(magicArray, entry[itemMainProp], entry)\n })\n\n // This is the best way to fake the type to make sure this is false: `Array.isArray(navigator.mimeTypes)`\n const magicArrayObj = Object.create(proto, {\n ...Object.getOwnPropertyDescriptors(magicArray),\n\n // There's one ugly quirk we unfortunately need to take care of:\n // The `MimeTypeArray` prototype has an enumerable `length` property,\n // but headful Chrome will still skip it when running `Object.getOwnPropertyNames(navigator.mimeTypes)`.\n // To strip it we need to make it first `configurable` and can then overlay a Proxy with an `ownKeys` trap.\n length: {\n value: magicArray.length,\n writable: false,\n enumerable: false,\n configurable: true // Important to be able to use the ownKeys trap in a Proxy to strip `length`\n }\n })\n\n // Generate our functional function mocks :-)\n const functionMocks = fns.generateFunctionMocks(utils)(\n proto,\n itemMainProp,\n magicArray\n )\n\n // We need to overlay our custom object with a JS Proxy\n const magicArrayObjProxy = new Proxy(magicArrayObj, {\n get(target, key = '') {\n // Redirect function calls to our custom proxied versions mocking the vanilla behavior\n if (key === 'item') {\n return functionMocks.item\n }\n if (key === 'namedItem') {\n return functionMocks.namedItem\n }\n if (proto === PluginArray.prototype && key === 'refresh') {\n return functionMocks.refresh\n }\n // Everything else can pass through as normal\n return utils.cache.Reflect.get(...arguments)\n },\n ownKeys(target) {\n // There are a couple of quirks where the original property demonstrates \"magical\" behavior that makes no sense\n // This can be witnessed when calling `Object.getOwnPropertyNames(navigator.mimeTypes)` and the absense of `length`\n // My guess is that it has to do with the recent change of not allowing data enumeration and this being implemented weirdly\n // For that reason we just completely fake the available property names based on our data to match what regular Chrome is doing\n // Specific issues when not patching this: `length` property is available, direct `types` props (e.g. `obj['application/pdf']`) are missing\n const keys = []\n const typeProps = magicArray.map(mt => mt[itemMainProp])\n typeProps.forEach((_, i) => keys.push(`${i}`))\n typeProps.forEach(propName => keys.push(propName))\n return keys\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'length') {\n return undefined\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n }\n })\n\n return magicArrayObjProxy\n }",generateFunctionMocks:"utils => (\n proto,\n itemMainProp,\n dataArray\n) => ({\n /** Returns the MimeType object with the specified index. */\n item: utils.createProxy(proto.item, {\n apply(target, ctx, args) {\n if (!args.length) {\n throw new TypeError(\n `Failed to execute 'item' on '${\n proto[Symbol.toStringTag]\n }': 1 argument required, but only 0 present.`\n )\n }\n // Special behavior alert:\n // - Vanilla tries to cast strings to Numbers (only integers!) and use them as property index lookup\n // - If anything else than an integer (including as string) is provided it will return the first entry\n const isInteger = args[0] && Number.isInteger(Number(args[0])) // Cast potential string to number first, then check for integer\n // Note: Vanilla never returns `undefined`\n return (isInteger ? dataArray[Number(args[0])] : dataArray[0]) || null\n }\n }),\n /** Returns the MimeType object with the specified name. */\n namedItem: utils.createProxy(proto.namedItem, {\n apply(target, ctx, args) {\n if (!args.length) {\n throw new TypeError(\n `Failed to execute 'namedItem' on '${\n proto[Symbol.toStringTag]\n }': 1 argument required, but only 0 present.`\n )\n }\n return dataArray.find(mt => mt[itemMainProp] === args[0]) || null // Not `undefined`!\n }\n }),\n /** Does nothing and shall return nothing */\n refresh: proto.refresh\n ? utils.createProxy(proto.refresh, {\n apply(target, ctx, args) {\n return undefined\n }\n })\n : undefined\n})"},data:{mimeTypes:[{type:"application/pdf",suffixes:"pdf",description:"",__pluginName:"Chrome PDF Viewer"},{type:"application/x-google-chrome-pdf",suffixes:"pdf",description:"Portable Document Format",__pluginName:"Chrome PDF Plugin"},{type:"application/x-nacl",suffixes:"",description:"Native Client Executable",__pluginName:"Native Client"},{type:"application/x-pnacl",suffixes:"",description:"Portable Native Client Executable",__pluginName:"Native Client"}],plugins:[{name:"Chrome PDF Plugin",filename:"internal-pdf-viewer",description:"Portable Document Format",__mimeTypes:["application/x-google-chrome-pdf"]},{name:"Chrome PDF Viewer",filename:"mhjfbmdgcfjbbpaeojofohoefgiehjai",description:"",__mimeTypes:["application/pdf"]},{name:"Native Client",filename:"internal-nacl-plugin",description:"",__mimeTypes:["application/x-nacl","application/x-pnacl"]}]}}]}),!1===navigator.webdriver||void 0===navigator.webdriver||delete Object.getPrototypeOf(navigator).webdriver,(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n const getParameterProxyHandler = {\n apply: function(target, ctx, args) {\n const param = (args || [])[0]\n const result = utils.cache.Reflect.apply(target, ctx, args)\n // UNMASKED_VENDOR_WEBGL\n if (param === 37445) {\n return opts.vendor || 'Intel Inc.' // default in headless: Google Inc.\n }\n // UNMASKED_RENDERER_WEBGL\n if (param === 37446) {\n return opts.renderer || 'Intel Iris OpenGL Engine' // default in headless: Google SwiftShader\n }\n return result\n }\n }\n\n // There's more than one WebGL rendering context\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext#Browser_compatibility\n // To find out the original values here: Object.getOwnPropertyDescriptors(WebGLRenderingContext.prototype.getParameter)\n const addProxy = (obj, propName) => {\n utils.replaceWithProxy(obj, propName, getParameterProxyHandler)\n }\n // For whatever weird reason loops don't play nice with Object.defineProperty, here's the next best thing:\n addProxy(WebGLRenderingContext.prototype, 'getParameter')\n addProxy(WebGL2RenderingContext.prototype, 'getParameter')\n }",_args:[{}]}),(()=>{try{if(window.outerWidth&&window.outerHeight)return;const n=85;window.outerWidth=window.innerWidth,window.outerHeight=window.innerHeight+n}catch(n){}})(),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n try {\n // Adds a contentWindow proxy to the provided iframe element\n const addContentWindowProxy = iframe => {\n const contentWindowProxy = {\n get(target, key) {\n // Now to the interesting part:\n // We actually make this thing behave like a regular iframe window,\n // by intercepting calls to e.g. `.self` and redirect it to the correct thing. :)\n // That makes it possible for these assertions to be correct:\n // iframe.contentWindow.self === window.top // must be false\n if (key === 'self') {\n return this\n }\n // iframe.contentWindow.frameElement === iframe // must be true\n if (key === 'frameElement') {\n return iframe\n }\n // Intercept iframe.contentWindow[0] to hide the property 0 added by the proxy.\n if (key === '0') {\n return undefined\n }\n return Reflect.get(target, key)\n }\n }\n\n if (!iframe.contentWindow) {\n const proxy = new Proxy(window, contentWindowProxy)\n Object.defineProperty(iframe, 'contentWindow', {\n get() {\n return proxy\n },\n set(newValue) {\n return newValue // contentWindow is immutable\n },\n enumerable: true,\n configurable: false\n })\n }\n }\n\n // Handles iframe element creation, augments `srcdoc` property so we can intercept further\n const handleIframeCreation = (target, thisArg, args) => {\n const iframe = target.apply(thisArg, args)\n\n // We need to keep the originals around\n const _iframe = iframe\n const _srcdoc = _iframe.srcdoc\n\n // Add hook for the srcdoc property\n // We need to be very surgical here to not break other iframes by accident\n Object.defineProperty(iframe, 'srcdoc', {\n configurable: true, // Important, so we can reset this later\n get: function() {\n return _srcdoc\n },\n set: function(newValue) {\n addContentWindowProxy(this)\n // Reset property, the hook is only needed once\n Object.defineProperty(iframe, 'srcdoc', {\n configurable: false,\n writable: false,\n value: _srcdoc\n })\n _iframe.srcdoc = newValue\n }\n })\n return iframe\n }\n\n // Adds a hook to intercept iframe creation events\n const addIframeCreationSniffer = () => {\n /* global document */\n const createElementHandler = {\n // Make toString() native\n get(target, key) {\n return Reflect.get(target, key)\n },\n apply: function(target, thisArg, args) {\n const isIframe =\n args && args.length && `${args[0]}`.toLowerCase() === 'iframe'\n if (!isIframe) {\n // Everything as usual\n return target.apply(thisArg, args)\n } else {\n return handleIframeCreation(target, thisArg, args)\n }\n }\n }\n // All this just due to iframes with srcdoc bug\n utils.replaceWithProxy(\n document,\n 'createElement',\n createElementHandler\n )\n }\n\n // Let's go\n addIframeCreationSniffer()\n } catch (err) {\n // console.warn(err)\n }\n }",_args:[]}); \ No newline at end of file diff --git a/ElectronJS/tasks/1.json b/ElectronJS/tasks/1.json deleted file mode 100644 index dfba83f3..00000000 --- a/ElectronJS/tasks/1.json +++ /dev/null @@ -1 +0,0 @@ -{"id":1,"name":"toutiao_author_desc","url":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","links":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","containJudge":false,"desc":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media"}],"outputParameters":[{"id":0,"name":"参数2_文本","desc":"","type":"string","exampleValue":"简介:关注小荷医典,获取“权威、科学、实用、易懂”的医学信息"},{"id":1,"name":"参数3_文本","desc":"","type":"string","exampleValue":"63.3万获赞"},{"id":2,"name":"参数1_文本","desc":"","type":"string","exampleValue":"小荷医典"},{"id":3,"name":"参数1_链接地址","desc":"","type":"string","exampleValue":"https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":3,"url":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","links":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//a[contains(@class, 'flex-row')][1]","wait":2,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":-1,"index":3,"parentId":0,"type":1,"option":8,"title":"Loop","sequence":[4],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/button","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":-1,"index":4,"parentId":3,"type":0,"option":3,"title":"Extract Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"参数1_文本","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"63.3万获赞"},{"num":1,"value":"10.3万粉丝"},{"num":2,"value":"5关注"}],"default":""}],"loopType":1}},{"id":3,"index":5,"parentId":0,"type":0,"option":3,"title":"Extract Data","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数2_文本","desc":"","relativeXpath":"//p[contains(@class, 'user-desc')]","exampleValues":[{"num":0,"value":"简介:关注小荷医典,获取“权威、科学、实用、易懂”的医学信息"}],"default":""},{"nodeType":0,"contentType":0,"relative":false,"name":"参数3_文本","desc":"","relativeXpath":"//div[contains(@class, 'relation-stat')]","exampleValues":[{"num":0,"value":"63.3万获赞"}],"default":""},{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","relativeXpath":"//div[contains(@class, 'detail')]//span[contains(@class, 'name')]","exampleValues":[{"num":0,"value":"小荷医典"}]},{"nodeType":2,"contentType":0,"relative":false,"name":"参数1_链接地址","desc":"","relativeXpath":"//a[@class=\"avatar\"]","exampleValues":[{"num":0,"value":"https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile"}]}]}},{"id":-1,"index":6,"parentId":0,"type":0,"option":3,"title":"Extract Data","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":2,"contentType":0,"relative":false,"name":"参数6_链接地址","desc":"","relativeXpath":"//a[contains(@class, 'flex-row')][1]","exampleValues":[{"num":0,"value":"https://so.toutiao.com/search/jump?url=https%3A%2F%2Fwww.toutiao.com%2Fc%2Fuser%2F95347840570%2F&aid=4916&jtoken=804fb410ca0c16fb0980b0a082d0c707d7ae7fb539575218f9e98534f7a9a598c00b8d749a4eb8859d5df7b1b0a122356b0b56810577c9f74a5faf9d6c18f340"}],"default":""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/11.json b/ElectronJS/tasks/11.json new file mode 100644 index 00000000..61cfd692 --- /dev/null +++ b/ElectronJS/tasks/11.json @@ -0,0 +1 @@ +{"id": 11, "name": "tianyancha_detail_1", "url": "https://www.tianyancha.com/company/3011939024/jingzhuang", "links": "https://www.tianyancha.com/company/3011939024/jingzhuang", "containJudge": false, "desc": "https://www.tianyancha.com/company/3011939024/jingzhuang", "inputParameters": [{"id": 0, "name": "loopText_0", "nodeId": 6, "nodeName": "Loop_URLLIST", "desc": "\u8981\u8f93\u5165\u7684\u6587\u672c/\u7f51\u5740,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n", "value": "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n"}, {"id": 1, "name": "loopTimes_Loop_1", "nodeId": 7, "nodeName": "Loop", "desc": "\u5faa\u73afLoop\u6267\u884c\u7684\u6b21\u6570\uff080\u4ee3\u8868\u65e0\u9650\u5faa\u73af\uff09", "type": "int", "exampleValue": 0, "value": 0}, {"id": 2, "name": "urlList_2", "nodeId": 9, "nodeName": "Open Page", "value": "https://www.tianyancha.com/company/3011939024/jingzhuang", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://www.tianyancha.com/company/3011939024/jingzhuang"}], "outputParameters": [{"id": 0, "name": "\u4f9b\u5e94\u5546\u540d\u79f0", "desc": "", "type": "string", "exampleValue": "\u5317\u4eac\u524d\u6cbf\u4fe1\u5b89\u79d1\u6280\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"id": 1, "name": "\u4f9b\u5e94\u5546\u65e5\u671f", "desc": "", "type": "string", "exampleValue": "2022-04-28"}, {"id": 2, "name": "\u4f9b\u5e94\u5546\u6761\u6570", "desc": "", "type": "string", "exampleValue": "\u67e5\u770b\u5168\u90e85\u6761\u91c7\u8d2d\u6570\u636e"}, {"id": 3, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u9686\u57fa\u7eff\u80fd\u79d1\u6280\u80a1\u4efd\u6709\u9650\u516c\u53f8"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [9, 6], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": -1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 60, "url": "https://www.tianyancha.com/company/3011939024/jingzhuang", "links": "https://www.tianyancha.com/company/3011939024/jingzhuang", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 2, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [3], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i/..", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 3, "parentId": 2, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[21]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[5]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": -1, "index": 4, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.tianyancha.com/company/3011939024/jingzhuang", "links": "https://www.tianyancha.com/company/3011939024/jingzhuang", "scrollType": 0, "scrollCount": 0}}, {"id": 3, "index": 5, "parentId": 2, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"useLoop": true, "xpath": "", "wait": 10, "url": "https://www.tianyancha.com/company/3011939024/jingzhuang", "links": "https://www.tianyancha.com/company/3011939024/jingzhuang", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 6, "parentId": 0, "type": 1, "option": 8, "title": "Loop_URLLIST", "sequence": [5, 17, 7], "isInLoop": false, "position": 1, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": "4", "pathList": "", "textList": "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n", "exitCount": 0, "historyWait": 2}}, {"id": 5, "index": 7, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [10, 8], "isInLoop": true, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 7, "index": 8, "parentId": 5, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[23]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[12]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": 1, "index": 9, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 60, "url": "https://www.tianyancha.com/company/3011939024/jingzhuang", "links": "https://www.tianyancha.com/company/3011939024/jingzhuang", "scrollType": 0, "scrollCount": 0}}, {"id": 6, "index": 10, "parentId": 5, "type": 1, "option": 8, "title": "Loop", "sequence": [11], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//div[@data-dim=\"suppliesV2\"]//tbody//tr", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 8, "index": 11, "parentId": 6, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u4f9b\u5e94\u5546\u540d\u79f0", "desc": "", "relativeXpath": "//div[contains(@class,\"right-name\")]", "exampleValues": [{"num": 0, "value": "\u5317\u4eac\u524d\u6cbf\u4fe1\u5b89\u79d1\u6280\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 2, "value": "\u6c5f\u82cf\u4e2d\u4fe1\u535a\u65b0\u80fd\u6e90\u79d1\u6280\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 3, "value": "\u5927\u8fde\u8fde\u57ce\u6570\u63a7\u673a\u5668\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 4, "value": "\u7d22\u62c9\u7279\u7279\u79cd\u73bb\u7483\uff08\u6c5f\u82cf\uff09\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 5, "value": "\u6b63\u6cf0\u96c6\u56e2\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 6, "value": "\u6c5f\u82cf\u79d1\u5f3a\u65b0\u6750\u6599\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 7, "value": "\u6e56\u5357\u534e\u83f1\u7ebf\u7f06\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 8, "value": "\u660e\u51a0\u65b0\u6750\u6599\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 9, "value": "\u6d59\u6c5f\u4e2d\u6676\u79d1\u6280\u80a1\u4efd\u6709\u9650\u516c\u53f8"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u4f9b\u5e94\u5546\u65e5\u671f", "desc": "", "relativeXpath": "/td[5]", "exampleValues": [{"num": 0, "value": "2022-04-28"}, {"num": 1, "value": "2022-04-28"}, {"num": 2, "value": "2022-04-28"}, {"num": 3, "value": "2022-04-27"}, {"num": 4, "value": "2022-04-08"}, {"num": 5, "value": "2022-03-08"}, {"num": 6, "value": "2022-01-18"}, {"num": 7, "value": "2021-02-02"}, {"num": 8, "value": "2020-12-04"}, {"num": 9, "value": "2020-12-01"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u4f9b\u5e94\u5546\u6761\u6570", "desc": "", "relativeXpath": "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", "exampleValues": [{"num": 3, "value": "\u67e5\u770b\u5168\u90e85\u6761\u91c7\u8d2d\u6570\u636e"}, {"num": 8, "value": "\u67e5\u770b\u5168\u90e85\u6761\u91c7\u8d2d\u6570\u636e"}], "default": ""}], "loopType": 1}}, {"id": -1, "index": 12, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [14, 13], "isInLoop": true, "position": 3, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//div[@data-dim=\"clientsV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 13, "parentId": 6, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[22]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": -1, "index": 14, "parentId": 6, "type": 1, "option": 8, "title": "Loop", "sequence": [15], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//div[@data-dim=\"clientsV2\"]//tr", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 15, "parentId": 9, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u5ba2\u6237\u540d\u79f0", "desc": "", "relativeXpath": "//div[contains(@class,\"right-name\")]", "exampleValues": [{"num": 0, "value": "\u534e\u7535\u65b0\u80fd\u6e90\u96c6\u56e2\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 2, "value": "\u4e2d\u56fd\u534e\u7535\u96c6\u56e2\u7269\u8d44\u6709\u9650\u516c\u53f8"}, {"num": 3, "value": "\u4e2d\u5e7f\u6838\u695a\u96c4\u5927\u59da\u98ce\u529b\u53d1\u7535\u6709\u9650\u516c\u53f8"}, {"num": 4, "value": "\u60a6\u8fbe\u8d44\u672c\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 5, "value": "\u9633\u5149\u4e2d\u79d1\uff08\u798f\u5efa\uff09\u80fd\u6e90\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 6, "value": "\u6cb3\u5317\u534e\u7535\u6df7\u5408\u84c4\u80fd\u6c34\u7535\u6709\u9650\u516c\u53f8"}, {"num": 7, "value": "\u4e2d\u5e7f\u6838\uff08\u5317\u4eac\uff09\u65b0\u80fd\u6e90\u79d1\u6280\u6709\u9650\u516c\u53f8"}, {"num": 8, "value": "\u5929\u5408\u5149\u80fd\u80a1\u4efd\u6709\u9650\u516c\u53f8"}, {"num": 9, "value": "\u4e2d\u5e7f\u6838\u4e4c\u6d77\u65b0\u80fd\u6e90\u6709\u9650\u516c\u53f8"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u5ba2\u6237\u65e5\u671f", "desc": "", "relativeXpath": "/td[5]", "exampleValues": [{"num": 0, "value": "2022-07-01"}, {"num": 1, "value": "2022-04-28"}, {"num": 2, "value": "2022-03-16"}, {"num": 3, "value": "2021-10-15"}, {"num": 4, "value": "2021-04-30"}, {"num": 5, "value": "2021-04-29"}, {"num": 6, "value": "2021-03-26"}, {"num": 7, "value": "2020-07-09"}, {"num": 8, "value": "2020-05-21"}, {"num": 9, "value": "2017-11-01"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u5ba2\u6237\u6761\u6570", "desc": "", "relativeXpath": "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", "exampleValues": [{"num": 2, "value": "https://www.tianyancha.com/bid/e2754d21e3f8474b80bea3e02fa1fea4"}, {"num": 3, "value": "https://www.tianyancha.com/bid/28f255e62df04a8688fb79553e7dc2f7"}, {"num": 6, "value": "https://www.tianyancha.com/bid/206ba6728ded11ebb7630c42a1b79396"}, {"num": 7, "value": "https://www.tianyancha.com/bid/f406750dc5f311ea85737cd30aeb144c"}, {"num": 9, "value": "https://www.tianyancha.com/bid/ec067ad3cb9a11e985737cd30aeb144c"}], "default": ""}], "loopType": 1}}, {"id": -1, "index": 16, "parentId": 2, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "paras": []}}, {"id": 4, "index": 17, "parentId": 2, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 3, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "relativeXpath": "//h1[contains(@class,\"company\")]", "exampleValues": [{"num": 0, "value": "\u9686\u57fa\u7eff\u80fd\u79d1\u6280\u80a1\u4efd\u6709\u9650\u516c\u53f8"}], "default": ""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/15.json b/ElectronJS/tasks/15.json new file mode 100644 index 00000000..1a479335 --- /dev/null +++ b/ElectronJS/tasks/15.json @@ -0,0 +1 @@ +{"id": 15, "name": "\u62fc\u591a\u591a\u56fd\u9645", "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "containJudge": false, "desc": "https://mobile.yangkeduo.com/login.html", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 2, "nodeName": "Open Page", "value": "https://mobile.yangkeduo.com/login.html", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://mobile.yangkeduo.com/login.html"}, {"id": 1, "name": "inputText_1", "nodeName": "Input Text", "nodeId": 4, "desc": "The text to be entered, such as 'computer' at eBay search box", "type": "string", "exampleValue": "15300412144", "value": "15300412144"}, {"id": 2, "name": "loopText_2", "nodeId": 6, "nodeName": "Loop", "desc": "Text/URL to be entered, multiple lines should be separated by \\n", "type": "string", "exampleValue": "https://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n", "value": "https://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n"}], "outputParameters": [{"id": 0, "name": "\u62fc\u591a\u591a\u5546\u54c1\u540d\u79f0", "desc": "", "type": "string", "exampleValue": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}, {"id": 1, "name": "\u62fc\u591a\u591a\u9500\u91cf", "desc": "", "type": "string", "exampleValue": "\u5df2\u62fc1108\u4ef6"}, {"id": 2, "name": "\u62fc\u591a\u591a\u8865\u8d34\u6570", "desc": "", "type": "string", "exampleValue": "\u5b98\u65b9\u8865\u8d3415\u5143"}, {"id": 3, "name": "\u62fc\u591a\u591a\u4ef7\u683c", "desc": "", "type": "string", "exampleValue": "200"}, {"id": 4, "name": "\u62fc\u591a\u591a\u6ee1\u51cf", "desc": "", "type": "string", "exampleValue": "\u6ee120\u51cf12\u4ef69.9\u6298"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [2, 3, 4, 5, 6], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": -1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 1, "index": 2, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"first\"]/div[2]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 3, "index": 4, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"phone-number\"]", "wait": 3, "value": "15300412144"}}, {"id": 4, "index": 5, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 3, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"captcha-btn\"]", "wait": 60, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 5, "index": 6, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [7, 8], "isInLoop": false, "position": 4, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": "4", "pathList": "", "textList": "https://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n", "exitCount": 0, "historyWait": 2}}, {"id": 6, "index": 7, "parentId": 5, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"useLoop": true, "xpath": "", "wait": 10, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 7, "index": 8, "parentId": 5, "type": 1, "option": 8, "title": "Loop", "sequence": [9, 10], "isInLoop": true, "position": 1, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "(//*[@id=\"main\"]/div/div/div/div/div/div/div/div/div/div/div/div[1])[position()<22]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 8, "index": 9, "parentId": 7, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 6, "tabIndex": -1, "useLoop": true, "xpath": "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", "wait": 5, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 1}}, {"id": 9, "index": 10, "parentId": 7, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "\u62fc\u591a\u591a\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "/html/body/div[1]/div[1]/div[2]/div[3]/div[1]", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "\u62fc\u591a\u591a\u9500\u91cf", "desc": "", "relativeXpath": "//div[contains(text(),'\u5df2\u62fc')] | //span[contains(text(),'\u5df2\u62fc')]", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "\u62fc\u591a\u591a\u8865\u8d34\u6570", "desc": "", "relativeXpath": "//div[contains(text(),'\u5b98\u65b9\u8865\u8d34')]", "exampleValues": [{"num": 0, "value": "\u5b98\u65b9\u8865\u8d3415\u5143"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "\u62fc\u591a\u591a\u4ef7\u683c", "desc": "", "relativeXpath": "/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[2]/span[1]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "\u62fc\u591a\u591a\u6ee1\u51cf", "desc": "", "relativeXpath": "/html/body/div[1]/div[1]/div[2]/div[2]/div[1]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/16.json b/ElectronJS/tasks/16.json new file mode 100644 index 00000000..670f1cbd --- /dev/null +++ b/ElectronJS/tasks/16.json @@ -0,0 +1 @@ +{"id": 16, "name": "\u5929\u732b\u56fd\u9645", "url": "https://mobile.yangkeduo.com/login.html", "links": "https://www.tmall.hk/wow/member-club/act/login", "containJudge": true, "desc": "TMALL", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 2, "nodeName": "Open Page", "value": "https://www.tmall.hk/wow/member-club/act/login", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://www.tmall.hk/wow/member-club/act/login"}, {"id": 1, "name": "loopText_1", "nodeId": 6, "nodeName": "Loop", "desc": "\u8981\u8f93\u5165\u7684\u6587\u672c/\u7f51\u5740,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://list.tmall.hk/search_product.htm?sort=d&q=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n", "value": "https://list.tmall.hk/search_product.htm?sort=d&q=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n"}], "outputParameters": [{"id": 0, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "type": "string", "exampleValue": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}, {"id": 1, "name": "Tmall\u9500\u91cf", "desc": "", "type": "string", "exampleValue": "\u5df2\u62fc1108\u4ef6"}, {"id": 2, "name": "Tmall\u4ef7\u683c", "desc": "", "type": "string", "exampleValue": "200"}, {"id": 3, "name": "Tmall\u6d3b\u52a8", "desc": "", "type": "string", "exampleValue": "\u6ee120\u51cf12\u4ef69.9\u6298"}, {"id": 4, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\n\u3010\u81ea\u8425\u3011Yamazaki\u5c71\u5d0e\u65e5\u672c \u5c71\u5d0e12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\u65e0\u76d2*2\n"}, {"id": 5, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [2, 6], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": -1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 1, "index": 2, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 60, "url": "https://www.tmall.hk/wow/member-club/act/login", "links": "https://www.tmall.hk/wow/member-club/act/login", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"first\"]/div[2]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"fm-login-id\"]", "wait": 60, "value": "15300412144"}}, {"id": -1, "index": 5, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"captcha-btn\"]", "wait": 60, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 2, "index": 6, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [7, 8], "isInLoop": false, "position": 1, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": "4", "pathList": "", "textList": "https://list.tmall.hk/search_product.htm?sort=d&q=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n", "exitCount": 0, "historyWait": 2}}, {"id": 3, "index": 7, "parentId": 2, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"useLoop": true, "xpath": "", "wait": 10, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 4, "index": 8, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [11, 9, 13], "isInLoop": true, "position": 1, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 6, "index": 9, "parentId": 4, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 6, "tabIndex": -1, "useLoop": true, "xpath": "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", "wait": 30, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 1}}, {"id": 10, "index": 10, "parentId": 8, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "//h1", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u9500\u91cf", "desc": "", "relativeXpath": "//span[contains(text(),\"\u9500\u91cf\")]/..", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u4ef7\u683c", "desc": "", "relativeXpath": "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u6d3b\u52a8", "desc": "", "relativeXpath": "//ul[contains(@class,'bd')]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}, {"id": 5, "index": 11, "parentId": 4, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 13, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "\n\u3010\u81ea\u8425\u3011Yamazaki\u5c71\u5d0e\u65e5\u672c \u5c71\u5d0e12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\u65e0\u76d2*2\n"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215"}]}]}}, {"id": 11, "index": 12, "parentId": 9, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "//h1", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u9500\u91cf", "desc": "", "relativeXpath": "//span[contains(text(),\"\u9500\u91cf\")]/..", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u4ef7\u683c", "desc": "", "relativeXpath": "//span[contains(@class,\"tm-price\")]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u6d3b\u52a8", "desc": "", "relativeXpath": "//ul[contains(@class,'bd')]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}, {"id": 7, "index": 13, "parentId": 4, "type": 2, "option": 9, "title": "If Condition", "sequence": [14, 15], "isInLoop": true, "position": 2, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}}, {"id": 8, "parentId": 7, "index": 14, "type": 3, "option": 10, "title": "Condition", "sequence": [10], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": "1", "value": "\u4fc3\u9500\u4ef7"}, "position": 0}, {"id": 9, "parentId": 7, "index": 15, "type": 3, "option": 10, "title": "Condition", "sequence": [12], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": 0, "value": ""}, "position": 1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/17.json b/ElectronJS/tasks/17.json new file mode 100644 index 00000000..e0fe5546 --- /dev/null +++ b/ElectronJS/tasks/17.json @@ -0,0 +1 @@ +{"id": 17, "name": "\u5929\u732b\u56fd\u9645\u6807\u9898\u53ca\u94fe\u63a5", "url": "https://mobile.yangkeduo.com/login.html", "links": "https://www.tmall.hk/wow/member-club/act/login", "containJudge": false, "desc": "TMALL", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 2, "nodeName": "Open Page", "value": "https://www.tmall.hk/wow/member-club/act/login", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://www.tmall.hk/wow/member-club/act/login"}, {"id": 1, "name": "loopText_1", "nodeId": 6, "nodeName": "Loop", "desc": "\u8981\u8f93\u5165\u7684\u6587\u672c/\u7f51\u5740,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://list.tmall.hk/search_product.htm?sort=d&q=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n", "value": "https://list.tmall.hk/search_product.htm?sort=d&q=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n"}], "outputParameters": [{"id": 0, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\n\u3010\u81ea\u8425\u3011Yamazaki\u5c71\u5d0e\u65e5\u672c \u5c71\u5d0e12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\u65e0\u76d2*2\n"}, {"id": 1, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [2, 6], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": -1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 1, "index": 2, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 30, "url": "https://www.tmall.hk/wow/member-club/act/login", "links": "https://www.tmall.hk/wow/member-club/act/login", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"first\"]/div[2]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"fm-login-id\"]", "wait": 60, "value": "15300412144"}}, {"id": -1, "index": 5, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"captcha-btn\"]", "wait": 60, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 2, "index": 6, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [7, 8], "isInLoop": false, "position": 1, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": "4", "pathList": "", "textList": "https://list.tmall.hk/search_product.htm?sort=d&q=\u5c71\u5d0e12\u5e74\u5a01\u58eb\u5fcc 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u5e72\u9091\u540d\u4ed5 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5361\u6155\u5e72\u9091XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u767e\u9f84\u575b17\u5e74\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea23\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u83f2\u8fea\u73cd\u85cf\u6876\u5355\u4e00\u7eaf\u9ea6\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5e1d\u738b\u82cf\u683c\u5170\u8c03\u548c\u5a01\u58eb\u5fcc15\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u827e\u67cf\u8fea12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9a6c\u7239\u5229\u84dd\u5e26\u5e72\u9091\u7279\u91871000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u5927\u646912\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u9ad8\u539f\u9a91\u58eb\u96c4\u9e70\u4e4b\u7ffc16\u5e74\nhttps://list.tmall.hk/search_product.htm?sort=d&q=\u683c\u5170\u82b1\u683c10\u5e74\u5355\u4e00\u9ea6\u82bd\u82cf\u683c\u5170\u5a01\u58eb\u5fcc\n", "exitCount": 0, "historyWait": 2}}, {"id": 3, "index": 7, "parentId": 2, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"useLoop": true, "xpath": "", "wait": 10, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 4, "index": 8, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [11], "isInLoop": true, "position": 1, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 9, "parentId": 4, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 6, "tabIndex": -1, "useLoop": true, "xpath": "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", "wait": 30, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 1}}, {"id": -1, "index": 10, "parentId": 8, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "//h1", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u9500\u91cf", "desc": "", "relativeXpath": "//span[contains(text(),\"\u9500\u91cf\")]/..", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u4ef7\u683c", "desc": "", "relativeXpath": "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u6d3b\u52a8", "desc": "", "relativeXpath": "//ul[contains(@class,'bd')]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}, {"id": 5, "index": 11, "parentId": 4, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 13, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "\n\u3010\u81ea\u8425\u3011Yamazaki\u5c71\u5d0e\u65e5\u672c \u5c71\u5d0e12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\u65e0\u76d2*2\n"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215"}]}]}}, {"id": -1, "index": 12, "parentId": 9, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "//h1", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u9500\u91cf", "desc": "", "relativeXpath": "//span[contains(text(),\"\u9500\u91cf\")]/..", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u4ef7\u683c", "desc": "", "relativeXpath": "//span[contains(@class,\"tm-price\")]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u6d3b\u52a8", "desc": "", "relativeXpath": "//ul[contains(@class,'bd')]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}, {"id": -1, "index": 13, "parentId": 4, "type": 2, "option": 9, "title": "If Condition", "sequence": [14, 15], "isInLoop": true, "position": 2, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}}, {"id": -1, "parentId": 7, "index": 14, "type": 3, "option": 10, "title": "Condition", "sequence": [10], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": "1", "value": "\u4fc3\u9500\u4ef7"}, "position": 0}, {"id": -1, "parentId": 7, "index": 15, "type": 3, "option": 10, "title": "Condition", "sequence": [12], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": 0, "value": ""}, "position": 1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/19.json b/ElectronJS/tasks/19.json new file mode 100644 index 00000000..8ab776ff --- /dev/null +++ b/ElectronJS/tasks/19.json @@ -0,0 +1 @@ +{"id": 19, "name": "\u5929\u732b\u56fd\u9645\u7ec6\u8282", "url": "https://mobile.yangkeduo.com/login.html", "links": "https://www.tmall.hk/wow/member-club/act/login", "containJudge": true, "desc": "TMALL", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 2, "nodeName": "Open Page", "value": "https://www.tmall.hk/wow/member-club/act/login", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://www.tmall.hk/wow/member-club/act/login"}, {"id": 1, "name": "loopText_1", "nodeId": 6, "nodeName": "Loop", "desc": "\u8981\u8f93\u5165\u7684\u6587\u672c/\u7f51\u5740,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://detail.tmall.hk/item.htm?id=658641278118&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=661890189422&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=655093526731&skuId=4722646792697&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=627569178411&skuId=4862853365173&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=636055777039&skuId=4645617529132&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688858127211&skuId=4902371768889&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688217639958&skuId=5072411486570&user_id=2211620739106&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=673752006327&skuId=4850085397621&user_id=2201196294013&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=644176111194&skuId=4803927442138&user_id=4066234693&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=666388233142&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676864927096&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=679778539067&skuId=4869780972851&user_id=2208001160576&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676216525152&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=679186327100&skuId=5040379050593&user_id=2208001160576&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=625756943270&skuId=4599437546828&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=665799173163&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=665799009405&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674085737113&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674364570689&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=632368285229&skuId=4747111192712&user_id=2208809643523&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=642010267399&skuId=4608264276629&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=669653355013&skuId=4990436987771&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=640840112439&skuId=4780229330767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=671922578171&skuId=4836777085975&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=692b142c738cf29311d58032028b5ee5\nhttps://detail.tmall.hk/item.htm?id=662246212268&skuId=4781521713999&user_id=2208001160576&cat_id=52792006&is_b=1&rn=280c6ed560288255613d7fd884ca672f\nhttps://detail.tmall.hk/item.htm?id=660952952930&skuId=4945939147795&user_id=2208809643523&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=653126328863&skuId=4888055566418&user_id=2208001160576&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=670816473575&skuId=4830266013281&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=654434969099&skuId=4858416885345&user_id=2201196294013&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=669417310088&skuId=4986645854954&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680953941680&skuId=5054883923880&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680604268050&skuId=5050667130353&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=674365879369&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026710487&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=679313732616&skuId=5049630735381&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673634362925&skuId=5023210607767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=639014326267&skuId=4757438187841&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673321104180&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=675361115314&skuId=4851676748871&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=643031144961&skuId=4803543378059&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026766248&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=684308217535&skuId=5066788751831&user_id=2201196294013&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=670428964115&skuId=4825379424909&user_id=2208809643523&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=684182456625&skuId=5067650531005&user_id=2213203431581&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679691842863&skuId=5044128386586&user_id=4066234693&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679686430991&skuId=4870952348853&user_id=2201168176213&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\n", "value": "https://detail.tmall.hk/item.htm?id=658641278118&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=661890189422&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=655093526731&skuId=4722646792697&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=627569178411&skuId=4862853365173&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=636055777039&skuId=4645617529132&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688858127211&skuId=4902371768889&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688217639958&skuId=5072411486570&user_id=2211620739106&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=673752006327&skuId=4850085397621&user_id=2201196294013&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=644176111194&skuId=4803927442138&user_id=4066234693&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=666388233142&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676864927096&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=679778539067&skuId=4869780972851&user_id=2208001160576&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676216525152&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=679186327100&skuId=5040379050593&user_id=2208001160576&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=625756943270&skuId=4599437546828&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=665799173163&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=665799009405&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674085737113&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674364570689&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=632368285229&skuId=4747111192712&user_id=2208809643523&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=642010267399&skuId=4608264276629&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=669653355013&skuId=4990436987771&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=640840112439&skuId=4780229330767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=671922578171&skuId=4836777085975&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=692b142c738cf29311d58032028b5ee5\nhttps://detail.tmall.hk/item.htm?id=662246212268&skuId=4781521713999&user_id=2208001160576&cat_id=52792006&is_b=1&rn=280c6ed560288255613d7fd884ca672f\nhttps://detail.tmall.hk/item.htm?id=660952952930&skuId=4945939147795&user_id=2208809643523&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=653126328863&skuId=4888055566418&user_id=2208001160576&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=670816473575&skuId=4830266013281&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=654434969099&skuId=4858416885345&user_id=2201196294013&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=669417310088&skuId=4986645854954&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680953941680&skuId=5054883923880&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680604268050&skuId=5050667130353&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=674365879369&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026710487&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=679313732616&skuId=5049630735381&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673634362925&skuId=5023210607767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=639014326267&skuId=4757438187841&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673321104180&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=675361115314&skuId=4851676748871&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=643031144961&skuId=4803543378059&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026766248&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=684308217535&skuId=5066788751831&user_id=2201196294013&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=670428964115&skuId=4825379424909&user_id=2208809643523&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=684182456625&skuId=5067650531005&user_id=2213203431581&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679691842863&skuId=5044128386586&user_id=4066234693&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679686430991&skuId=4870952348853&user_id=2201168176213&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\n"}], "outputParameters": [{"id": 0, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "type": "string", "exampleValue": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}, {"id": 1, "name": "Tmall\u9500\u91cf", "desc": "", "type": "string", "exampleValue": "\u5df2\u62fc1108\u4ef6"}, {"id": 2, "name": "Tmall\u4ef7\u683c", "desc": "", "type": "string", "exampleValue": "200"}, {"id": 3, "name": "Tmall\u6d3b\u52a8", "desc": "", "type": "string", "exampleValue": "\u6ee120\u51cf12\u4ef69.9\u6298"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [2, 6], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": -1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": 1, "index": 2, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 60, "url": "https://www.tmall.hk/wow/member-club/act/login", "links": "https://www.tmall.hk/wow/member-club/act/login", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"first\"]/div[2]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"fm-login-id\"]", "wait": 60, "value": "15300412144"}}, {"id": -1, "index": 5, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"captcha-btn\"]", "wait": 60, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 2, "index": 6, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [7, 13], "isInLoop": false, "position": 1, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": "4", "pathList": "", "textList": "https://detail.tmall.hk/item.htm?id=658641278118&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=661890189422&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=655093526731&skuId=4722646792697&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=627569178411&skuId=4862853365173&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=636055777039&skuId=4645617529132&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688858127211&skuId=4902371768889&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688217639958&skuId=5072411486570&user_id=2211620739106&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=673752006327&skuId=4850085397621&user_id=2201196294013&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=644176111194&skuId=4803927442138&user_id=4066234693&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=666388233142&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676864927096&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=679778539067&skuId=4869780972851&user_id=2208001160576&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676216525152&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=679186327100&skuId=5040379050593&user_id=2208001160576&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=625756943270&skuId=4599437546828&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=665799173163&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=665799009405&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674085737113&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674364570689&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=632368285229&skuId=4747111192712&user_id=2208809643523&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=642010267399&skuId=4608264276629&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=669653355013&skuId=4990436987771&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=640840112439&skuId=4780229330767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=671922578171&skuId=4836777085975&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=692b142c738cf29311d58032028b5ee5\nhttps://detail.tmall.hk/item.htm?id=662246212268&skuId=4781521713999&user_id=2208001160576&cat_id=52792006&is_b=1&rn=280c6ed560288255613d7fd884ca672f\nhttps://detail.tmall.hk/item.htm?id=660952952930&skuId=4945939147795&user_id=2208809643523&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=653126328863&skuId=4888055566418&user_id=2208001160576&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=670816473575&skuId=4830266013281&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=654434969099&skuId=4858416885345&user_id=2201196294013&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=669417310088&skuId=4986645854954&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680953941680&skuId=5054883923880&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680604268050&skuId=5050667130353&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=674365879369&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026710487&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=679313732616&skuId=5049630735381&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673634362925&skuId=5023210607767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=639014326267&skuId=4757438187841&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673321104180&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=675361115314&skuId=4851676748871&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=643031144961&skuId=4803543378059&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026766248&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=684308217535&skuId=5066788751831&user_id=2201196294013&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=670428964115&skuId=4825379424909&user_id=2208809643523&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=684182456625&skuId=5067650531005&user_id=2213203431581&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679691842863&skuId=5044128386586&user_id=4066234693&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679686430991&skuId=4870952348853&user_id=2201168176213&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\n", "exitCount": 0, "historyWait": 2}}, {"id": 3, "index": 7, "parentId": 2, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"useLoop": true, "xpath": "", "wait": 40, "url": "https://mobile.yangkeduo.com/login.html", "links": "https://mobile.yangkeduo.com/login.html", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 8, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [9], "isInLoop": true, "position": 2, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 9, "parentId": 5, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 6, "tabIndex": -1, "useLoop": true, "xpath": "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", "wait": 30, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 1}}, {"id": 7, "index": 10, "parentId": 5, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "//h1[not(@id=\"mallLogo\")]", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u9500\u91cf", "desc": "", "relativeXpath": "//span[contains(text(),\"\u9500\u91cf\")]/..", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u4ef7\u683c", "desc": "", "relativeXpath": "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u6d3b\u52a8", "desc": "", "relativeXpath": "//dl[contains(@class,\"tm-shopPromo-panel\")]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}, {"id": -1, "index": 11, "parentId": 4, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 13, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "\n\u3010\u81ea\u8425\u3011Yamazaki\u5c71\u5d0e\u65e5\u672c \u5c71\u5d0e12\u5e74\u5355\u4e00\u9ea6\u82bd\u5a01\u58eb\u5fcc700ml\u65e0\u76d2*2\n"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215"}]}]}}, {"id": 8, "index": 12, "parentId": 6, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u5546\u54c1\u540d\u79f0", "desc": "", "relativeXpath": "//h1[not(@id=\"mallLogo\")]", "exampleValues": [{"num": 0, "value": "\u683c\u5170\u6606\u594712\u5e74700ml\u5355\u4e00\u9ea6\u82bd\u5165\u95e8\u7ea7\u82cf\u683c\u5170\u8fdb\u53e3\u5a01\u58eb\u5fcc\u5e1d\u4e9a\u5409\u6b27\u6d0b\u9152\u9000\u8d27\u5305\u8fd0\u8d39"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u9500\u91cf", "desc": "", "relativeXpath": "//span[contains(text(),\"\u9500\u91cf\")]/..", "exampleValues": [{"num": 0, "value": "\u5df2\u62fc1108\u4ef6"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u4ef7\u683c", "desc": "", "relativeXpath": "//span[contains(@class,\"tm-price\")]", "exampleValues": [{"num": 0, "value": "200"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "Tmall\u6d3b\u52a8", "desc": "", "relativeXpath": "//dl[contains(@class,\"tm-shopPromo-panel\")]", "exampleValues": [{"num": 0, "value": "\u6ee120\u51cf12\u4ef69.9\u6298"}]}]}}, {"id": 4, "index": 13, "parentId": 2, "type": 2, "option": 9, "title": "If Condition", "sequence": [14, 15], "isInLoop": true, "position": 1, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}}, {"id": 5, "parentId": 4, "index": 14, "type": 3, "option": 10, "title": "Condition", "sequence": [10], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": "1", "value": "\u4fc3\u9500\u4ef7"}, "position": 0}, {"id": 6, "parentId": 4, "index": 15, "type": 3, "option": 10, "title": "Condition", "sequence": [12], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": 0, "value": ""}, "position": 1}, {"index": 16, "id": -1, "parentId": 4, "type": 3, "option": 10, "title": "Condition", "sequence": [], "isInLoop": true, "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "class": 0, "value": ""}, "position": 0}]} \ No newline at end of file diff --git a/ElectronJS/tasks/2.json b/ElectronJS/tasks/2.json new file mode 100644 index 00000000..df98b7d9 --- /dev/null +++ b/ElectronJS/tasks/2.json @@ -0,0 +1 @@ +{"id": 2, "name": "Bilibili\u89c6\u9891\u793a\u4f8b", "url": "https://www.bilibili.com", "links": "https://www.bilibili.com", "containJudge": false, "desc": "https://www.bilibili.com", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://www.bilibili.com", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://www.bilibili.com"}, {"id": 1, "name": "inputText_1", "nodeName": "Input Text", "nodeId": 2, "desc": "The text to be entered, such as 'computer' at eBay search box", "type": "string", "exampleValue": "\u5362\u672c\u4f1f", "value": "\u5362\u672c\u4f1f"}, {"id": 2, "name": "loopTimes_Loop click next page_2", "nodeId": 6, "nodeName": "Loop click next page", "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", "type": "int", "exampleValue": 0, "value": 0}], "outputParameters": [{"id": 0, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "604\u4e074.5\u4e0718:23"}, {"id": 1, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://www.bilibili.com/video/BV1fc41187xA"}, {"id": 2, "name": "\u53c2\u65703_\u56fe\u7247\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://i2.hdslb.com/bfs/archive/b8d6c6e21212b54a92a36ea03f61b7e334cc24e7.jpg@672w_378h_1c"}, {"id": 3, "name": "156", "desc": "", "type": "string", "exampleValue": "604\u4e07"}, {"id": 4, "name": "\u53c2\u65705_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "4.5\u4e07"}, {"id": 5, "name": "\u53c2\u65706_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "18:23"}, {"id": 6, "name": "\u53c2\u65707_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u5362\u672c\u4f1f\u540d\u573a\u9762\u5408\u96c6\uff08\u66f4\u65b0\u81f3\u76d6\u4e9a\uff09"}, {"id": 7, "name": "\u53c2\u65708_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://www.bilibili.com/video/BV1fc41187xA"}, {"id": 8, "name": "\u53c2\u65709_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u540d\u573a\u9762\u5408\u96c6\uff08\u66f4\u65b0\u81f3\u76d6\u4e9a\uff09"}, {"id": 9, "name": "\u53c2\u657010_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u5362\u672c\u4f1f"}, {"id": 10, "name": "\u53c2\u657011_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u67e0\u67daSama \u00b7 2020-4-2"}, {"id": 11, "name": "\u53c2\u657012_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://space.bilibili.com/152292466"}, {"id": 12, "name": "\u53c2\u657013_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u6b63\u5728\u7f13\u51b2..."}, {"id": 13, "name": "\u53c2\u657014_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u83b7\u53d6\u89c6\u9891\u53c2\u6570..."}, {"id": 14, "name": "\u53c2\u657015_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "[\u6210\u529f]"}, {"id": 15, "name": "\u53c2\u657016_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u64ad\u653e\u5668\u521d\u59cb\u5316..."}, {"id": 16, "name": "\u53c2\u657017_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "[\u6210\u529f]"}, {"id": 17, "name": "\u53c2\u657018_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "3.16.0-9b97d64a"}, {"id": 18, "name": "\u53c2\u657019_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u83b7\u53d6\u64ad\u653e\u5730\u5740..."}, {"id": 19, "name": "\u53c2\u657020_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "[\u6210\u529f]"}, {"id": 20, "name": "\u53c2\u657021_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u52a0\u8f7d\u89c6\u9891\u4fe1\u606f..."}, {"id": 21, "name": "\u53c2\u657022_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "[\u6210\u529f]"}, {"id": 22, "name": "\u53c2\u657023_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u52a0\u8f7d\u89c6\u9891\u5185\u5bb9..."}, {"id": 23, "name": "\u53c2\u657024_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u5362\u672c\u4f1f"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2, 5, 6], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.bilibili.com", "links": "https://www.bilibili.com", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"nav-searchform\"]/div[1]/input[1]", "wait": 0, "value": "\u5362\u672c\u4f1f"}}, {"id": -1, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"nav-searchform\"]/div[2]/svg[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"nav-searchform\"]/div[2]/svg[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 3, "index": 5, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"nav-searchform\"]/div[2]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 4, "index": 6, "parentId": 0, "type": 1, "option": 8, "title": "Loop click next page", "sequence": [8, 7], "isInLoop": false, "position": 3, "parameters": {"history": 1, "tabIndex": 1, "useLoop": false, "xpath": "//*[@id=\"i_cecream\"]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/button[10]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 6, "index": 7, "parentId": 4, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 1, "tabIndex": 1, "useLoop": true, "xpath": "//*[@id=\"i_cecream\"]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/button[10]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": 5, "index": 8, "parentId": 4, "type": 1, "option": 8, "title": "Loop", "sequence": [9], "isInLoop": true, "position": 0, "parameters": {"history": 2, "tabIndex": 1, "useLoop": false, "xpath": "/html/body/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 7, "index": 9, "parentId": 5, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 2, "tabIndex": 1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]", "exampleValues": [{"num": 0, "value": "604\u4e074.5\u4e0718:23"}, {"num": 1, "value": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \u6b63\u5728\u7f13\u51b2...\n \n \n \n \n \n \u83b7\u53d6\u89c6\u9891\u53c2\u6570...\n [\u6210\u529f]\n \n \n \n \n \u64ad\u653e\u5668\u521d\u59cb\u5316...\n [\u6210\u529f]\n 3.16.0-9b97d64a\n \n \n \n \u83b7\u53d6\u64ad\u653e\u5730\u5740...\n [\u6210\u529f]\n \n \n \n \n \u52a0\u8f7d\u89c6\u9891\u4fe1\u606f...\n [\u6210\u529f]\n \n \n \n \n \u52a0\u8f7d\u89c6\u9891\u5185\u5bb9...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 194.5\u4e07218605:44"}, {"num": 2, "value": "3730.8\u4e078.4\u4e0701:35"}, {"num": 3, "value": "57.4\u4e0770401:41"}, {"num": 4, "value": "1633.3\u4e0715.6\u4e0702:00"}, {"num": 5, "value": "23.6\u4e0719704:24"}, {"num": 6, "value": "71.6\u4e07199411:40"}, {"num": 7, "value": "22.9\u4e0719905:36"}, {"num": 8, "value": "612\u4e0728.6\u4e0709:55:55"}, {"num": 9, "value": "71\u4e0767803:11"}, {"num": 10, "value": "972.2\u4e077\u4e0709:09"}, {"num": 11, "value": "509.9\u4e073.2\u4e0718:41"}, {"num": 12, "value": "558.4\u4e07551700:46"}, {"num": 13, "value": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \u6b63\u5728\u7f13\u51b2...\n \n \n \n \n \n \u83b7\u53d6\u89c6\u9891\u53c2\u6570...\n [\u6210\u529f]\n \n \n \n \n \u64ad\u653e\u5668\u521d\u59cb\u5316...\n [\u6210\u529f]\n 3.16.0-9b97d64a\n \n \n \n \u83b7\u53d6\u64ad\u653e\u5730\u5740...\n [\u6210\u529f]\n \n \n \n \n \u52a0\u8f7d\u89c6\u9891\u4fe1\u606f...\n [\u6210\u529f]\n \n \n \n \n \u52a0\u8f7d\u89c6\u9891\u5185\u5bb9...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 17.8\u4e071300:29"}, {"num": 14, "value": "463\u4e0710.9\u4e0732:03"}, {"num": 15, "value": "125.1\u4e071.9\u4e0704:16"}, {"num": 16, "value": "648.5\u4e0770100:32"}, {"num": 17, "value": "675.5\u4e073.8\u4e0704:53"}, {"num": 18, "value": "46\u4e0715804:51"}, {"num": 19, "value": "382.9\u4e072\u4e0702:11"}, {"num": 20, "value": "322.6\u4e07151700:59"}, {"num": 21, "value": "142.8\u4e07453802:07"}, {"num": 22, "value": "448.5\u4e071.1\u4e0709:58"}, {"num": 23, "value": "63.5\u4e07132201:20"}, {"num": 24, "value": "153.8\u4e0737901:23"}, {"num": 25, "value": "209.4\u4e07653703:31"}, {"num": 26, "value": "231.3\u4e07400405:33"}, {"num": 27, "value": "1.1\u4e071900:43"}, {"num": 28, "value": "322.6\u4e076.1\u4e0747:53"}, {"num": 29, "value": "645.8\u4e0711.4\u4e0701:11:05"}, {"num": 30, "value": "53.1\u4e077800:09"}, {"num": 31, "value": "492.9\u4e07172300:26"}, {"num": 32, "value": "33.1\u4e07258502:46"}, {"num": 33, "value": "70.2\u4e0787601:01"}, {"num": 34, "value": "108.1\u4e0768301:41"}, {"num": 35, "value": "309.4\u4e07923703:22"}, {"num": 36, "value": "365\u4e07774201:12"}, {"num": 37, "value": "17.1\u4e078803:43"}, {"num": 38, "value": "141.8\u4e0771200:49"}, {"num": 39, "value": "1693.5\u4e073.2\u4e0701:13"}, {"num": 40, "value": "212.9\u4e07149701:15"}, {"num": 41, "value": "34.6\u4e07119605:28"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65702_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]", "exampleValues": [{"num": 0, "value": "https://www.bilibili.com/video/BV1fc41187xA"}, {"num": 1, "value": "https://www.bilibili.com/video/BV1it4y1J7Wn"}, {"num": 2, "value": "https://www.bilibili.com/video/BV1Xx411p74G"}, {"num": 3, "value": "https://www.bilibili.com/video/BV1G7411K71U"}, {"num": 4, "value": "https://www.bilibili.com/video/BV1nW4118797"}, {"num": 5, "value": "https://www.bilibili.com/video/BV1pe4y1a7rJ"}, {"num": 6, "value": "https://www.bilibili.com/video/BV1uS4y1L77Z"}, {"num": 7, "value": "https://www.bilibili.com/video/BV1v34y1k7SM"}, {"num": 8, "value": "https://www.bilibili.com/video/BV1GJ411p7aq"}, {"num": 9, "value": "https://www.bilibili.com/video/BV1GL41137Cv"}, {"num": 10, "value": "https://www.bilibili.com/video/BV1MC4y1p7yf"}, {"num": 11, "value": "https://www.bilibili.com/video/BV1Z4411X7qs"}, {"num": 12, "value": "https://www.bilibili.com/video/BV1FE411H7L1"}, {"num": 13, "value": "https://www.bilibili.com/video/BV1T44y1p7mz"}, {"num": 14, "value": "https://www.bilibili.com/video/BV1ss411P7e1"}, {"num": 15, "value": "https://www.bilibili.com/video/BV1dZ4y1X7Fi"}, {"num": 16, "value": "https://www.bilibili.com/video/BV1c54114764"}, {"num": 17, "value": "https://www.bilibili.com/video/BV1xt411G73j"}, {"num": 18, "value": "https://www.bilibili.com/video/BV1TQ4y1P7bp"}, {"num": 19, "value": "https://www.bilibili.com/video/BV1ip4y1Q7V1"}, {"num": 20, "value": "https://www.bilibili.com/video/BV1ui4y1c7Pd"}, {"num": 21, "value": "https://www.bilibili.com/video/BV1R4411c7zr"}, {"num": 22, "value": "https://www.bilibili.com/video/BV1TZ4y147ME"}, {"num": 23, "value": "https://www.bilibili.com/video/BV1Ds411N7dU"}, {"num": 24, "value": "https://www.bilibili.com/video/BV1ta411f7cY"}, {"num": 25, "value": "https://www.bilibili.com/video/BV1MB4y1c7Cg"}, {"num": 26, "value": "https://www.bilibili.com/video/BV1vU4y1m7cK"}, {"num": 27, "value": "https://www.bilibili.com/video/BV14B4y1V7Uv"}, {"num": 28, "value": "https://www.bilibili.com/video/BV1UJ41137aF"}, {"num": 29, "value": "https://www.bilibili.com/video/BV1NT4y1w776"}, {"num": 30, "value": "https://www.bilibili.com/video/BV1BE411A777"}, {"num": 31, "value": "https://www.bilibili.com/video/BV1aJ411u7TN"}, {"num": 32, "value": "https://www.bilibili.com/video/BV1T54y167Hs"}, {"num": 33, "value": "https://www.bilibili.com/video/BV1yW411N7zc"}, {"num": 34, "value": "https://www.bilibili.com/video/BV1KY4y1W7CK"}, {"num": 35, "value": "https://www.bilibili.com/video/BV177411V7yc"}, {"num": 36, "value": "https://www.bilibili.com/video/BV1T7411A7WW"}, {"num": 37, "value": "https://www.bilibili.com/video/BV1sN4y157xE"}, {"num": 38, "value": "https://www.bilibili.com/video/BV1Gt411U78v"}, {"num": 39, "value": "https://www.bilibili.com/video/BV167411j7iZ"}, {"num": 40, "value": "https://www.bilibili.com/video/BV1gN4y1L7xr"}, {"num": 41, "value": "https://www.bilibili.com/video/BV1vt4y1D7pw"}], "default": ""}, {"nodeType": 4, "contentType": 1, "relative": true, "name": "\u53c2\u65703_\u56fe\u7247\u5730\u5740", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/picture[1]/img[1]", "exampleValues": [{"num": 0, "value": "https://i2.hdslb.com/bfs/archive/b8d6c6e21212b54a92a36ea03f61b7e334cc24e7.jpg@672w_378h_1c"}, {"num": 1, "value": "https://i1.hdslb.com/bfs/archive/76edeea7716a3f050782d08ebecea529984aa874.jpg@672w_378h_1c"}, {"num": 2, "value": "https://i1.hdslb.com/bfs/archive/34ed0f1580db36e8c95d4b653f6caaaa1b6fe4cd.jpg@672w_378h_1c"}, {"num": 3, "value": "https://i2.hdslb.com/bfs/archive/75886e1dc52230d510b5c843f65ef7e2c5acf4cd.jpg@672w_378h_1c"}, {"num": 4, "value": "https://i2.hdslb.com/bfs/archive/75e33c83b77d0aa11de0eee225737cc123a40f96.jpg@672w_378h_1c"}, {"num": 5, "value": "https://i2.hdslb.com/bfs/archive/0b20c3b9dbd88e8a299fcfb82d756504410da912.jpg@672w_378h_1c"}, {"num": 6, "value": "https://i2.hdslb.com/bfs/archive/e2b5d191fb2fcce7cd6dc8d2d8df21be755fc04c.jpg@672w_378h_1c"}, {"num": 7, "value": "https://i2.hdslb.com/bfs/archive/bca7479215b41e9c25e0518d1aaae004e9d35a18.jpg@672w_378h_1c"}, {"num": 8, "value": "https://i0.hdslb.com/bfs/archive/9bbef2353cf65fecadfadc20d134aa08c1fae50a.jpg@672w_378h_1c"}, {"num": 9, "value": "https://i0.hdslb.com/bfs/archive/3579b9a4262c57de3bf1ab4a0f7306fb62d028d8.jpg@672w_378h_1c"}, {"num": 10, "value": "https://i0.hdslb.com/bfs/archive/f238dbec60b54da32ee891db147481f96737777c.jpg@672w_378h_1c"}, {"num": 11, "value": "https://i0.hdslb.com/bfs/archive/c6091fc208c2565cdb99ed9ddd1dbb36250fef5d.jpg@672w_378h_1c"}, {"num": 12, "value": "https://i0.hdslb.com/bfs/archive/44de9fd295eb91ff60ddcc3fc5cedba169983fe5.jpg@672w_378h_1c"}, {"num": 13, "value": "https://i0.hdslb.com/bfs/archive/b40e9b7639e71c45246a0b24577e1b1ac325f81b.jpg@672w_378h_1c"}, {"num": 14, "value": "https://i0.hdslb.com/bfs/archive/a6969ff4649d8bb301cd04a0c7d153f4af3bbc6a.jpg@672w_378h_1c"}, {"num": 15, "value": "https://i0.hdslb.com/bfs/archive/5a7c88a8c831e054406994d28b47f43310014a10.jpg@672w_378h_1c"}, {"num": 16, "value": "https://i2.hdslb.com/bfs/archive/437b6e36cafdc77cf0dc3b3b6d476d0bff64f076.jpg@672w_378h_1c"}, {"num": 17, "value": "https://i0.hdslb.com/bfs/archive/f4411a38b88bb1591841dd5e4caf2ae9b0e24f13.jpg@672w_378h_1c"}, {"num": 18, "value": "https://i0.hdslb.com/bfs/archive/23013873a2b0c2269e046219f3006c2f53193044.jpg@672w_378h_1c"}, {"num": 19, "value": "https://i1.hdslb.com/bfs/archive/83119681117e5bfb023ed4d22cbda8c930ff51da.jpg@672w_378h_1c"}, {"num": 20, "value": "https://i1.hdslb.com/bfs/archive/3c98a797f0738c50612590431e12c8b4799d20e3.jpg@672w_378h_1c"}, {"num": 21, "value": "https://i2.hdslb.com/bfs/archive/66563dee5c5c22a0cec50251926cc743dd947817.jpg@672w_378h_1c"}, {"num": 22, "value": "https://i0.hdslb.com/bfs/archive/66c6e52e928a15102dba5606db0948ce4a4b82d8.jpg@672w_378h_1c"}, {"num": 23, "value": "https://i2.hdslb.com/bfs/archive/29578616a75ab38c8dddb5ef09b8acc6e43951aa.jpg@672w_378h_1c"}, {"num": 24, "value": "https://i1.hdslb.com/bfs/archive/80320e8b252443770e157fefcc62941f1ca7f0dd.jpg@672w_378h_1c"}, {"num": 25, "value": "https://i1.hdslb.com/bfs/archive/713b5244044fe41ce3d4615094196c1c7a6edfb5.jpg@672w_378h_1c"}, {"num": 26, "value": "https://i0.hdslb.com/bfs/archive/4417a97cfff807fe5fd04a899c9172b79e4cc7f0.jpg@672w_378h_1c"}, {"num": 27, "value": "https://i1.hdslb.com/bfs/archive/27f9ffb23e8d2dda2e21f463c5d1f9dd4b11a14d.jpg@672w_378h_1c"}, {"num": 28, "value": "https://i1.hdslb.com/bfs/archive/8eb797389171a758b639fa1fd93115d7afc2d509.jpg@672w_378h_1c"}, {"num": 29, "value": "https://i0.hdslb.com/bfs/archive/993e5d4910a8287e238a2c7069c585a77ccceedd.jpg@672w_378h_1c"}, {"num": 30, "value": "https://i1.hdslb.com/bfs/archive/2751704b052eb8fdc9eb470d03633b2026b018e2.jpg@672w_378h_1c"}, {"num": 31, "value": "https://i2.hdslb.com/bfs/archive/a0c706a5cc852bbd61b718a69c18d4210f15c547.jpg@672w_378h_1c"}, {"num": 32, "value": "https://i1.hdslb.com/bfs/archive/902ce5dea4ecb9d11e6b915b3af2d6b65da789a2.jpg@672w_378h_1c"}, {"num": 33, "value": "https://i1.hdslb.com/bfs/archive/e66075f80e9a65564e7898a6d295294d0231802c.jpg@672w_378h_1c"}, {"num": 34, "value": "https://i1.hdslb.com/bfs/archive/e67e10f8591a2c0458e5e398e5379ab3f8476af8.jpg@672w_378h_1c"}, {"num": 35, "value": "https://i0.hdslb.com/bfs/archive/ec29af76f56d9e324fe01b84d92d9d22bc944c86.jpg@672w_378h_1c"}, {"num": 36, "value": "https://i2.hdslb.com/bfs/archive/b48f70e304e40a899abba8a50c8a1e6fd77033bf.jpg@672w_378h_1c"}, {"num": 37, "value": "https://i2.hdslb.com/bfs/archive/d1fe3cdc111ad6c96a0877988d9bf9f1019d8d1b.jpg@672w_378h_1c"}, {"num": 38, "value": "https://i0.hdslb.com/bfs/archive/0e0f599401ce6e40791088f93a510946cf333d3a.jpg@672w_378h_1c"}, {"num": 39, "value": "https://i2.hdslb.com/bfs/archive/217c78db0c7c4a86f486915e8bb4f012946772b9.jpg@672w_378h_1c"}, {"num": 40, "value": "https://i2.hdslb.com/bfs/archive/e5d11e6b886802f136166358a0a07362f7e42868.jpg@672w_378h_1c"}, {"num": 41, "value": "https://i1.hdslb.com/bfs/archive/322ae5aa308092e34e7587a586f93305e18e7ff0.jpg@672w_378h_1c"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "156", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[2]/div[1]/div[1]/span[1]/span[1]", "exampleValues": [{"num": 0, "value": "604\u4e07"}, {"num": 1, "value": "194.5\u4e07"}, {"num": 2, "value": "3730.8\u4e07"}, {"num": 3, "value": "57.4\u4e07"}, {"num": 4, "value": "1633.3\u4e07"}, {"num": 5, "value": "23.6\u4e07"}, {"num": 6, "value": "71.6\u4e07"}, {"num": 7, "value": "22.9\u4e07"}, {"num": 8, "value": "612\u4e07"}, {"num": 9, "value": "71\u4e07"}, {"num": 10, "value": "972.2\u4e07"}, {"num": 11, "value": "509.9\u4e07"}, {"num": 12, "value": "558.4\u4e07"}, {"num": 13, "value": "17.8\u4e07"}, {"num": 14, "value": "463\u4e07"}, {"num": 15, "value": "125.1\u4e07"}, {"num": 16, "value": "648.5\u4e07"}, {"num": 17, "value": "675.5\u4e07"}, {"num": 18, "value": "46\u4e07"}, {"num": 19, "value": "382.9\u4e07"}, {"num": 20, "value": "322.6\u4e07"}, {"num": 21, "value": "142.8\u4e07"}, {"num": 22, "value": "448.5\u4e07"}, {"num": 23, "value": "63.5\u4e07"}, {"num": 24, "value": "153.8\u4e07"}, {"num": 25, "value": "209.4\u4e07"}, {"num": 26, "value": "231.3\u4e07"}, {"num": 27, "value": "1.1\u4e07"}, {"num": 28, "value": "322.6\u4e07"}, {"num": 29, "value": "645.8\u4e07"}, {"num": 30, "value": "53.1\u4e07"}, {"num": 31, "value": "492.9\u4e07"}, {"num": 32, "value": "33.1\u4e07"}, {"num": 33, "value": "70.2\u4e07"}, {"num": 34, "value": "108.1\u4e07"}, {"num": 35, "value": "309.4\u4e07"}, {"num": 36, "value": "365\u4e07"}, {"num": 37, "value": "17.1\u4e07"}, {"num": 38, "value": "141.8\u4e07"}, {"num": 39, "value": "1693.5\u4e07"}, {"num": 40, "value": "212.9\u4e07"}, {"num": 41, "value": "34.6\u4e07"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u65705_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[2]/div[1]/div[1]/span[2]/span[1]", "exampleValues": [{"num": 0, "value": "4.5\u4e07"}, {"num": 1, "value": "2186"}, {"num": 2, "value": "8.4\u4e07"}, {"num": 3, "value": "704"}, {"num": 4, "value": "15.6\u4e07"}, {"num": 5, "value": "197"}, {"num": 6, "value": "1994"}, {"num": 7, "value": "199"}, {"num": 8, "value": "28.6\u4e07"}, {"num": 9, "value": "678"}, {"num": 10, "value": "7\u4e07"}, {"num": 11, "value": "3.2\u4e07"}, {"num": 12, "value": "5517"}, {"num": 13, "value": "13"}, {"num": 14, "value": "10.9\u4e07"}, {"num": 15, "value": "1.9\u4e07"}, {"num": 16, "value": "701"}, {"num": 17, "value": "3.8\u4e07"}, {"num": 18, "value": "158"}, {"num": 19, "value": "2\u4e07"}, {"num": 20, "value": "1517"}, {"num": 21, "value": "4538"}, {"num": 22, "value": "1.1\u4e07"}, {"num": 23, "value": "1322"}, {"num": 24, "value": "379"}, {"num": 25, "value": "6537"}, {"num": 26, "value": "4004"}, {"num": 27, "value": "19"}, {"num": 28, "value": "6.1\u4e07"}, {"num": 29, "value": "11.4\u4e07"}, {"num": 30, "value": "78"}, {"num": 31, "value": "1723"}, {"num": 32, "value": "2585"}, {"num": 33, "value": "876"}, {"num": 34, "value": "683"}, {"num": 35, "value": "9237"}, {"num": 36, "value": "7742"}, {"num": 37, "value": "88"}, {"num": 38, "value": "712"}, {"num": 39, "value": "3.2\u4e07"}, {"num": 40, "value": "1497"}, {"num": 41, "value": "1196"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u65706_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[2]/div[1]/span[1]", "exampleValues": [{"num": 0, "value": "18:23"}, {"num": 1, "value": "05:44"}, {"num": 2, "value": "01:35"}, {"num": 3, "value": "01:41"}, {"num": 4, "value": "02:00"}, {"num": 5, "value": "04:24"}, {"num": 6, "value": "11:40"}, {"num": 7, "value": "05:36"}, {"num": 8, "value": "09:55:55"}, {"num": 9, "value": "03:11"}, {"num": 10, "value": "09:09"}, {"num": 11, "value": "18:41"}, {"num": 12, "value": "00:46"}, {"num": 13, "value": "00:29"}, {"num": 14, "value": "32:03"}, {"num": 15, "value": "04:16"}, {"num": 16, "value": "00:32"}, {"num": 17, "value": "04:53"}, {"num": 18, "value": "04:51"}, {"num": 19, "value": "02:11"}, {"num": 20, "value": "00:59"}, {"num": 21, "value": "02:07"}, {"num": 22, "value": "09:58"}, {"num": 23, "value": "01:20"}, {"num": 24, "value": "01:23"}, {"num": 25, "value": "03:31"}, {"num": 26, "value": "05:33"}, {"num": 27, "value": "00:43"}, {"num": 28, "value": "47:53"}, {"num": 29, "value": "01:11:05"}, {"num": 30, "value": "00:09"}, {"num": 31, "value": "00:26"}, {"num": 32, "value": "02:46"}, {"num": 33, "value": "01:01"}, {"num": 34, "value": "01:41"}, {"num": 35, "value": "03:22"}, {"num": 36, "value": "01:12"}, {"num": 37, "value": "03:43"}, {"num": 38, "value": "00:49"}, {"num": 39, "value": "01:13"}, {"num": 40, "value": "01:15"}, {"num": 41, "value": "05:28"}], "default": ""}, {"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65707_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/a[1]", "exampleValues": [{"num": 0, "value": "\u5362\u672c\u4f1f\u540d\u573a\u9762\u5408\u96c6\uff08\u66f4\u65b0\u81f3\u76d6\u4e9a\uff09"}, {"num": 1, "value": "\u5362\u672c\u4f1f\uff1a\u4ece\u4e2d\u56fd\u9a84\u50b2\u5230\u52a3\u8ff9\u4e3b\u64ad\uff0c\u5c01\u6740\u4e94\u5e74\u590d\u51fa\uff0c\u5374\u88ab\u5b98\u65b94\u5b57\u8b66\u544a"}, {"num": 2, "value": "17\u5f20\u724c\u4f60\u80fd\u79d2\u6211\uff1f\uff1f\u4f60\u80fd\u79d2\u6740\u6211\uff1f\uff1f17\u5f20\u724c\u4f60\u4eca\u5929\u80fd\u628a\u6211\u5362\u672c\u4f1f\u79d2\u4e86\uff0c\u6211\u5f53\u573a\u5c31\u628a\u8fd9\u4e2a\u7535\u8111\u5c4f\u5e55\u5403\u6389\uff01\uff01\uff01"}, {"num": 3, "value": "\u4e00\u4e2d\u8001\u5e08\u5728\u7ebf\u603c\u5362\u672c\u4f1f"}, {"num": 4, "value": "\u3010\u7535\u97f3\u5355\u66f2\u3011\u5362\u672c\u4f1f\u725b\u903c\uff01\uff01\uff01"}, {"num": 5, "value": "\u5e1d\u5e08\u5f53\u5e74\u9524\u5362\u672c\u4f1f\uff0c\u72d0\u5f1f\u610f\u5916\u7206\u51fa\u674e\u6613\u5cf0\u7b49\u4e8b\u60c5\u5c3d\u7136\u6210\u771f"}, {"num": 6, "value": "\u5362\u672c\u4f1f\u770b\u81ea\u5df1\u5927\u95f9\u5929\u5bab"}, {"num": 7, "value": "\u3010\u5362\u672c\u4f1f\u3011\u4e94\u4e94\u5f00\u6c38\u4e45\u5173\u64ad\u524d\u7684\u6700\u540e5\u520636\u79d2\uff01"}, {"num": 8, "value": "\u5362\u672c\u4f1f\u76f4\u64ad\u73a9\u6398\u5730\u6c42\u5347\u5168\u8fc7\u7a0b"}, {"num": 9, "value": "\u8304\u5b50\u751f\u65e5\u4f1aPDD\u76f4\u64ad\u5e26\u5927\u5bb6\u627e\u5362\u672c\u4f1f"}, {"num": 10, "value": "\u4f60\u662f\u8c01 \u5362\u672c\u4f1f"}, {"num": 11, "value": "\u5362\u672c\u4f1f\u4e4b\u5fcd\u4f4f\u4e0d\u7b11\u5927\u6311\u6218\uff0c\u4f60\u80fd\u575a\u6301\u591a\u4e45\uff1f\uff1f\uff1f"}, {"num": 12, "value": "\u4f1e\u5175\u4e00\u53f7\u5362\u672c\u4f1f\u662f\u54ea\u4e2a\u73ed\u7684\uff1f"}, {"num": 13, "value": "\u90fd\u8bf4uu\u662f\u62dc\u91d1\u5973 \u8bf4\u5362\u672c\u4f1f\u300a\u51fa\u4e8b\u300buu\u7b2c1\u4e2a\u8dd1 \u53ef\u662f\u966a\u5362\u672c\u4f1f\u5230\u6700\u540e\u7684\u8fd8\u662fuu"}, {"num": 14, "value": "\u5362\u672c\u4f1f29\u6740\u5403\u9e21\u5b8c\u6574\u89c6\u9891"}, {"num": 15, "value": "\u3010\u5362\u672c\u4f1f\u3011\u5b64 \u52c7 \u8005"}, {"num": 16, "value": "\u5362\u672c\u4f1f\u540d\u573a\u9762\uff1a\u4e0a\u9519\u8f66\u4e86\uff01\u8fd9\u6bb5\u7b11\u5f97\u6211\u809a\u5b50\u75bc\uff01"}, {"num": 17, "value": "\u5362\u672c\u4f1f\uff1a\u628a\u6211\u76f4\u64ad\u95f4\u5173\u4e86\uff0c\u6eda\u53bb\u5b66\u4e60\uff01"}, {"num": 18, "value": "\u5362\u672c\u4f1f\u6012\u55b7xxs"}, {"num": 19, "value": "\u3010\u5362\u672c\u4f1f\u3011\u4ed9\u5251\u5f00\u4fa0\u4f20"}, {"num": 20, "value": "\u5362\u672c\u4f1f\u548cPDD\u5f53\u5e74\u53c2\u52a0\u7efc\u827a\u7684\u6f14\u6280\u771f\u7684\u70b8\u88c2"}, {"num": 21, "value": "\u3010\u718a\u51fa\u6ca1\u9b3c\u755c\u3011\u5362\u672c\u4f1f\u6212\u7f51\u763e"}, {"num": 22, "value": "\u5362\u672c\u4f1f\u2014\u2014\u65e5\u672c\u4e4b\u884cvlog\u7eed"}, {"num": 23, "value": "\u5362\u672c\u4f1f\uff1a\u5341\u4e03\u5f20\u724c\u4f60\u80fd\u79d2\u6211\uff1f\u6211\u5403\u5c4f\u5e55"}, {"num": 24, "value": "\u5362\u672c\u4f1f\u7ed9Uzi\u53d1\u8bed\u97f3\uff0c\u73b0\u5728\u53ef\u4ee5\u5168\u90e8\u5750\u4e0b\u4e86\uff0c\u5e76\u4e14\u8ba9\u4e4c\u5179\u4e5f\u7ad9\u4e86\u8d77\u6765"}, {"num": 25, "value": "\u3010\u5362\u672c\u4f1f\u3011\u9519\u4f4d\u65f6\u7a7a\uff0c\u5168\u7a0b\u50ac\u6cea"}, {"num": 26, "value": "\u3010\u5362\u672c\u4f1f\u3011\u6211\u60f3\u4f60\u4eec\u4e86\uff0c\u53ef\u4f60\u4eec\u8fd8\u8bb0\u5f97\u6211\u5417\uff1f"}, {"num": 27, "value": "\u73b0\u5728\u7684\u5362\u672c\u4f1fvs\u4ee5\u524d\u7684\u5362\u672c\u4f1f"}, {"num": 28, "value": "\u3010\u4e0d\u8981\u7b11\u6311\u6218\u5362\u672c\u4f1f\u4e4b\u5fc3\u6001\u662f\u5982\u4f55\u7206\u70b8\u3011"}, {"num": 29, "value": "\u3010\u641e\u7b11\u4e27\u5c38\u7247\u3011\u9cb2\u5c71\u884c\uff0870\u5206\u949f\u5b8c\u6574\u7248\uff09 \u5362\u672c\u4f1f&\u8304\u5b50&\u5468\u6dd1\u6021 \u7b49\u9886\u8854\u4e3b\u6f14"}, {"num": 30, "value": "\u5362\u672c\u4f1f\u725b\u903c\uff0c\u516c\u4ea4\u8f66\u5076\u9047\u5362\u672c\u4f1f!!"}, {"num": 31, "value": "\u8001\u5e08\u5728\u8bfe\u5802\u653e\u5362\u672c\u4f1f\u9b3c\u755c\u89c6\u9891\uff0c\u522b\u70b9\u8d5e\uff0c\u4f1a\u6b7b\u4eba\u7684"}, {"num": 32, "value": "\u3010\u5362\u672c\u4f1f\u3011\u90a3\u4e2a\u5e7f\u573a......\u8d77\u98ce\u4e86"}, {"num": 33, "value": "\u73b0\u5728\u8fdb\u5165\u5362\u672c\u4f1f\u76f4\u64ad\u95f4\u4f1a\u53d1\u751f\u4ec0\u4e48"}, {"num": 34, "value": "\u5362\u672c\u4f1f\u56de\u5f52\u5728\u5373\uff1fPDD\u76f4\u64ad\u65f6\u900f\u9732\u5177\u4f53\u65f6\u95f4"}, {"num": 35, "value": "\u5feb \u4e50 \u7f51 \u8bfe\uff08\u5362\u672c\u4f1f\u4e32\u573a\uff09"}, {"num": 36, "value": "\u5362\u672c\u4f1f\u60ca\u73b0\u67d0\u7f51\u8bfe\u73b0\u573a\uff0c\u6570\u5b66\u8bfe\u8001\u5e08\u66b4\u6012"}, {"num": 37, "value": "\u5362\u672c\u4f1f\u60ca\u73b0\u963f\u4e50\u76f4\u64ad\u95f4\u5237\u793c\u7269\uff01\u963f\u4e50\uff1a\u54e5\u54e5\u8981\u6211\u7ad9\u7740\u6253\u6e38\u620f\u5417\uff1f"}, {"num": 38, "value": "\u5362\u672c\u4f1f\u770bIG\u593a\u51a0\u770b\u54ed\u4e86\uff0c\u5fc3\u75bc"}, {"num": 39, "value": "\u4e0a\u7f51\u8bfe\u65f6\uff0c\u8001\u5e08\u4e0e\u5362\u672c\u4f1f\u7684\u5bf9\u8bdd \u7b11\u62bd\u4e86 O(\u2229_\u2229)O\u54c8\u54c8~"}, {"num": 40, "value": "\u6211\u7684\u58f0\u97f3\u771f\u7684\u5f88\u50cf\u5362\u672c\u4f1f\u5417"}, {"num": 41, "value": "\u5362\u672c\u4f1f\u9a82\u4eba\u540d\u573a\u9762\u5fcd\u4f4f\u4e0d\u8981\u7b11\uff01\uff01\uff01"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65708_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/a[1]", "exampleValues": [{"num": 0, "value": "https://www.bilibili.com/video/BV1fc41187xA"}, {"num": 1, "value": "https://www.bilibili.com/video/BV1it4y1J7Wn"}, {"num": 2, "value": "https://www.bilibili.com/video/BV1Xx411p74G"}, {"num": 3, "value": "https://www.bilibili.com/video/BV1G7411K71U"}, {"num": 4, "value": "https://www.bilibili.com/video/BV1nW4118797"}, {"num": 5, "value": "https://www.bilibili.com/video/BV1pe4y1a7rJ"}, {"num": 6, "value": "https://www.bilibili.com/video/BV1uS4y1L77Z"}, {"num": 7, "value": "https://www.bilibili.com/video/BV1v34y1k7SM"}, {"num": 8, "value": "https://www.bilibili.com/video/BV1GJ411p7aq"}, {"num": 9, "value": "https://www.bilibili.com/video/BV1GL41137Cv"}, {"num": 10, "value": "https://www.bilibili.com/video/BV1MC4y1p7yf"}, {"num": 11, "value": "https://www.bilibili.com/video/BV1Z4411X7qs"}, {"num": 12, "value": "https://www.bilibili.com/video/BV1FE411H7L1"}, {"num": 13, "value": "https://www.bilibili.com/video/BV1T44y1p7mz"}, {"num": 14, "value": "https://www.bilibili.com/video/BV1ss411P7e1"}, {"num": 15, "value": "https://www.bilibili.com/video/BV1dZ4y1X7Fi"}, {"num": 16, "value": "https://www.bilibili.com/video/BV1c54114764"}, {"num": 17, "value": "https://www.bilibili.com/video/BV1xt411G73j"}, {"num": 18, "value": "https://www.bilibili.com/video/BV1TQ4y1P7bp"}, {"num": 19, "value": "https://www.bilibili.com/video/BV1ip4y1Q7V1"}, {"num": 20, "value": "https://www.bilibili.com/video/BV1ui4y1c7Pd"}, {"num": 21, "value": "https://www.bilibili.com/video/BV1R4411c7zr"}, {"num": 22, "value": "https://www.bilibili.com/video/BV1TZ4y147ME"}, {"num": 23, "value": "https://www.bilibili.com/video/BV1Ds411N7dU"}, {"num": 24, "value": "https://www.bilibili.com/video/BV1ta411f7cY"}, {"num": 25, "value": "https://www.bilibili.com/video/BV1MB4y1c7Cg"}, {"num": 26, "value": "https://www.bilibili.com/video/BV1vU4y1m7cK"}, {"num": 27, "value": "https://www.bilibili.com/video/BV14B4y1V7Uv"}, {"num": 28, "value": "https://www.bilibili.com/video/BV1UJ41137aF"}, {"num": 29, "value": "https://www.bilibili.com/video/BV1NT4y1w776"}, {"num": 30, "value": "https://www.bilibili.com/video/BV1BE411A777"}, {"num": 31, "value": "https://www.bilibili.com/video/BV1aJ411u7TN"}, {"num": 32, "value": "https://www.bilibili.com/video/BV1T54y167Hs"}, {"num": 33, "value": "https://www.bilibili.com/video/BV1yW411N7zc"}, {"num": 34, "value": "https://www.bilibili.com/video/BV1KY4y1W7CK"}, {"num": 35, "value": "https://www.bilibili.com/video/BV177411V7yc"}, {"num": 36, "value": "https://www.bilibili.com/video/BV1T7411A7WW"}, {"num": 37, "value": "https://www.bilibili.com/video/BV1sN4y157xE"}, {"num": 38, "value": "https://www.bilibili.com/video/BV1Gt411U78v"}, {"num": 39, "value": "https://www.bilibili.com/video/BV167411j7iZ"}, {"num": 40, "value": "https://www.bilibili.com/video/BV1gN4y1L7xr"}, {"num": 41, "value": "https://www.bilibili.com/video/BV1vt4y1D7pw"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u65709_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]", "exampleValues": [{"num": 0, "value": "\u540d\u573a\u9762\u5408\u96c6\uff08\u66f4\u65b0\u81f3\u76d6\u4e9a\uff09"}, {"num": 1, "value": "\uff1a\u4ece\u4e2d\u56fd\u9a84\u50b2\u5230\u52a3\u8ff9\u4e3b\u64ad\uff0c\u5c01\u6740\u4e94\u5e74\u590d\u51fa\uff0c\u5374\u88ab\u5b98\u65b94\u5b57\u8b66\u544a"}, {"num": 2, "value": "17\u5f20\u724c\u4f60\u80fd\u79d2\u6211\uff1f\uff1f\u4f60\u80fd\u79d2\u6740\u6211\uff1f\uff1f17\u5f20\u724c\u4f60\u4eca\u5929\u80fd\u628a\u6211\u79d2\u4e86\uff0c\u6211\u5f53\u573a\u5c31\u628a\u8fd9\u4e2a\u7535\u8111\u5c4f\u5e55\u5403\u6389\uff01\uff01\uff01"}, {"num": 3, "value": "\u4e00\u4e2d\u8001\u5e08\u5728\u7ebf\u603c"}, {"num": 4, "value": "\u3010\u7535\u97f3\u5355\u66f2\u3011\u725b\u903c\uff01\uff01\uff01"}, {"num": 5, "value": "\u5e1d\u5e08\u5f53\u5e74\u9524\uff0c\u72d0\u5f1f\u610f\u5916\u7206\u51fa\u674e\u6613\u5cf0\u7b49\u4e8b\u60c5\u5c3d\u7136\u6210\u771f"}, {"num": 6, "value": "\u770b\u81ea\u5df1\u5927\u95f9\u5929\u5bab"}, {"num": 7, "value": "\u3010\u3011\u4e94\u4e94\u5f00\u6c38\u4e45\u5173\u64ad\u524d\u7684\u6700\u540e5\u520636\u79d2\uff01"}, {"num": 8, "value": "\u76f4\u64ad\u73a9\u6398\u5730\u6c42\u5347\u5168\u8fc7\u7a0b"}, {"num": 9, "value": "\u8304\u5b50\u751f\u65e5\u4f1aPDD\u76f4\u64ad\u5e26\u5927\u5bb6\u627e"}, {"num": 10, "value": "\u4f60\u662f\u8c01"}, {"num": 11, "value": "\u4e4b\u5fcd\u4f4f\u4e0d\u7b11\u5927\u6311\u6218\uff0c\u4f60\u80fd\u575a\u6301\u591a\u4e45\uff1f\uff1f\uff1f"}, {"num": 12, "value": "\u4f1e\u5175\u4e00\u53f7\u662f\u54ea\u4e2a\u73ed\u7684\uff1f"}, {"num": 13, "value": "\u90fd\u8bf4uu\u662f\u62dc\u91d1\u5973\u8bf4\u300a\u51fa\u4e8b\u300buu\u7b2c1\u4e2a\u8dd1\u53ef\u662f\u966a\u5230\u6700\u540e\u7684\u8fd8\u662fuu"}, {"num": 14, "value": "29\u6740\u5403\u9e21\u5b8c\u6574\u89c6\u9891"}, {"num": 15, "value": "\u3010\u3011\u5b64\u52c7\u8005"}, {"num": 16, "value": "\u540d\u573a\u9762\uff1a\u4e0a\u9519\u8f66\u4e86\uff01\u8fd9\u6bb5\u7b11\u5f97\u6211\u809a\u5b50\u75bc\uff01"}, {"num": 17, "value": "\uff1a\u628a\u6211\u76f4\u64ad\u95f4\u5173\u4e86\uff0c\u6eda\u53bb\u5b66\u4e60\uff01"}, {"num": 18, "value": "\u6012\u55b7xxs"}, {"num": 19, "value": "\u3010\u3011\u4ed9\u5251\u5f00\u4fa0\u4f20"}, {"num": 20, "value": "\u548cPDD\u5f53\u5e74\u53c2\u52a0\u7efc\u827a\u7684\u6f14\u6280\u771f\u7684\u70b8\u88c2"}, {"num": 21, "value": "\u3010\u718a\u51fa\u6ca1\u9b3c\u755c\u3011\u6212\u7f51\u763e"}, {"num": 22, "value": "\u2014\u2014\u65e5\u672c\u4e4b\u884cvlog\u7eed"}, {"num": 23, "value": "\uff1a\u5341\u4e03\u5f20\u724c\u4f60\u80fd\u79d2\u6211\uff1f\u6211\u5403\u5c4f\u5e55"}, {"num": 24, "value": "\u7ed9Uzi\u53d1\u8bed\u97f3\uff0c\u73b0\u5728\u53ef\u4ee5\u5168\u90e8\u5750\u4e0b\u4e86\uff0c\u5e76\u4e14\u8ba9\u4e4c\u5179\u4e5f\u7ad9\u4e86\u8d77\u6765"}, {"num": 25, "value": "\u3010\u3011\u9519\u4f4d\u65f6\u7a7a\uff0c\u5168\u7a0b\u50ac\u6cea"}, {"num": 26, "value": "\u3010\u3011\u6211\u60f3\u4f60\u4eec\u4e86\uff0c\u53ef\u4f60\u4eec\u8fd8\u8bb0\u5f97\u6211\u5417\uff1f"}, {"num": 27, "value": "\u73b0\u5728\u7684vs\u4ee5\u524d\u7684"}, {"num": 28, "value": "\u3010\u4e0d\u8981\u7b11\u6311\u6218\u4e4b\u5fc3\u6001\u662f\u5982\u4f55\u7206\u70b8\u3011"}, {"num": 29, "value": "\u3010\u641e\u7b11\u4e27\u5c38\u7247\u3011\u9cb2\u5c71\u884c\uff0870\u5206\u949f\u5b8c\u6574\u7248\uff09&\u8304\u5b50&\u5468\u6dd1\u6021\u7b49\u9886\u8854\u4e3b\u6f14"}, {"num": 30, "value": "\u725b\u903c\uff0c\u516c\u4ea4\u8f66\u5076\u9047!!"}, {"num": 31, "value": "\u8001\u5e08\u5728\u8bfe\u5802\u653e\u9b3c\u755c\u89c6\u9891\uff0c\u522b\u70b9\u8d5e\uff0c\u4f1a\u6b7b\u4eba\u7684"}, {"num": 32, "value": "\u3010\u3011\u90a3\u4e2a\u5e7f\u573a......\u8d77\u98ce\u4e86"}, {"num": 33, "value": "\u73b0\u5728\u8fdb\u5165\u76f4\u64ad\u95f4\u4f1a\u53d1\u751f\u4ec0\u4e48"}, {"num": 34, "value": "\u56de\u5f52\u5728\u5373\uff1fPDD\u76f4\u64ad\u65f6\u900f\u9732\u5177\u4f53\u65f6\u95f4"}, {"num": 35, "value": "\u5feb\u4e50\u7f51\u8bfe\uff08\u4e32\u573a\uff09"}, {"num": 36, "value": "\u60ca\u73b0\u67d0\u7f51\u8bfe\u73b0\u573a\uff0c\u6570\u5b66\u8bfe\u8001\u5e08\u66b4\u6012"}, {"num": 37, "value": "\u60ca\u73b0\u963f\u4e50\u76f4\u64ad\u95f4\u5237\u793c\u7269\uff01\u963f\u4e50\uff1a\u54e5\u54e5\u8981\u6211\u7ad9\u7740\u6253\u6e38\u620f\u5417\uff1f"}, {"num": 38, "value": "\u770bIG\u593a\u51a0\u770b\u54ed\u4e86\uff0c\u5fc3\u75bc"}, {"num": 39, "value": "\u4e0a\u7f51\u8bfe\u65f6\uff0c\u8001\u5e08\u4e0e\u7684\u5bf9\u8bdd\u7b11\u62bd\u4e86O(\u2229_\u2229)O\u54c8\u54c8~"}, {"num": 40, "value": "\u6211\u7684\u58f0\u97f3\u771f\u7684\u5f88\u50cf\u5417"}, {"num": 41, "value": "\u9a82\u4eba\u540d\u573a\u9762\u5fcd\u4f4f\u4e0d\u8981\u7b11\uff01\uff01\uff01"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657010_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]/em[1]", "exampleValues": [{"num": 0, "value": "\u5362\u672c\u4f1f"}, {"num": 1, "value": "\u5362\u672c\u4f1f"}, {"num": 2, "value": "\u5362\u672c\u4f1f"}, {"num": 3, "value": "\u5362\u672c\u4f1f"}, {"num": 4, "value": "\u5362\u672c\u4f1f"}, {"num": 5, "value": "\u5362\u672c\u4f1f"}, {"num": 6, "value": "\u5362\u672c\u4f1f"}, {"num": 7, "value": "\u5362\u672c\u4f1f"}, {"num": 8, "value": "\u5362\u672c\u4f1f"}, {"num": 9, "value": "\u5362\u672c\u4f1f"}, {"num": 10, "value": "\u5362\u672c\u4f1f"}, {"num": 11, "value": "\u5362\u672c\u4f1f"}, {"num": 12, "value": "\u5362\u672c\u4f1f"}, {"num": 13, "value": "\u5362\u672c\u4f1f"}, {"num": 14, "value": "\u5362\u672c\u4f1f"}, {"num": 15, "value": "\u5362\u672c\u4f1f"}, {"num": 16, "value": "\u5362\u672c\u4f1f"}, {"num": 17, "value": "\u5362\u672c\u4f1f"}, {"num": 18, "value": "\u5362\u672c\u4f1f"}, {"num": 19, "value": "\u5362\u672c\u4f1f"}, {"num": 20, "value": "\u5362\u672c\u4f1f"}, {"num": 21, "value": "\u5362\u672c\u4f1f"}, {"num": 22, "value": "\u5362\u672c\u4f1f"}, {"num": 23, "value": "\u5362\u672c\u4f1f"}, {"num": 24, "value": "\u5362\u672c\u4f1f"}, {"num": 25, "value": "\u5362\u672c\u4f1f"}, {"num": 26, "value": "\u5362\u672c\u4f1f"}, {"num": 27, "value": "\u5362\u672c\u4f1f"}, {"num": 28, "value": "\u5362\u672c\u4f1f"}, {"num": 29, "value": "\u5362\u672c\u4f1f"}, {"num": 30, "value": "\u5362\u672c\u4f1f"}, {"num": 31, "value": "\u5362\u672c\u4f1f"}, {"num": 32, "value": "\u5362\u672c\u4f1f"}, {"num": 33, "value": "\u5362\u672c\u4f1f"}, {"num": 34, "value": "\u5362\u672c\u4f1f"}, {"num": 35, "value": "\u5362\u672c\u4f1f"}, {"num": 36, "value": "\u5362\u672c\u4f1f"}, {"num": 37, "value": "\u5362\u672c\u4f1f"}, {"num": 38, "value": "\u5362\u672c\u4f1f"}, {"num": 39, "value": "\u5362\u672c\u4f1f"}, {"num": 40, "value": "\u5362\u672c\u4f1f"}, {"num": 41, "value": "\u5362\u672c\u4f1f"}], "default": ""}, {"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u657011_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/p[1]/a[1]", "exampleValues": [{"num": 0, "value": "\u67e0\u67daSama \u00b7 2020-4-2"}, {"num": 1, "value": "\u9650\u91cf\u7248\u84dd\u80d6\u7eb8 \u00b7 8-19"}, {"num": 2, "value": "\u98ce\u7eaa\u59d4\u5458\u554a\u7956 \u00b7 2017-7-26"}, {"num": 3, "value": "\u5170\u5170\u6211\u8001\u5a46_ \u00b7 2020-2-26"}, {"num": 4, "value": "\u4e00\u54b8\u83ca\u83ca \u00b7 2017-12-20"}, {"num": 5, "value": "\u5927\u98ce\u4e2d\u6447\u6446\u7684\u706b\u82d7 \u00b7 9-12"}, {"num": 6, "value": "\u5362\u59e5\u7237\u7559\u58f0\u673a \u00b7 1-21"}, {"num": 7, "value": "\u8d26\u53f7\u6ce8\u95009499082 \u00b7 3-6"}, {"num": 8, "value": "mdtx58 \u00b7 2020-1-11"}, {"num": 9, "value": "PDD\u5728B\u7ad9 \u00b7 2021-11-4"}, {"num": 10, "value": "\u963f\u98devlog\u8bb0\u5f55\u5f00\u54e5 \u00b7 2020-5-26"}, {"num": 11, "value": "\u82b1\u829d\u8679 \u00b7 2019-8-10"}, {"num": 12, "value": "\u627e\u4e0d\u5230\u62e8\u7247\u7684K\u5b9d \u00b7 2020-2-28"}, {"num": 13, "value": "55\u5f00\u6c38\u8fdc\u7684\u795e \u00b7 2-15"}, {"num": 14, "value": "\u66d9\u795e\u4e4b\u5149 \u00b7 2018-7-23"}, {"num": 15, "value": "\u53ef\u4e50\u541bCy \u00b7 2021-12-3"}, {"num": 16, "value": "\u5fcd\u91ce\u54a9\u54a9_ \u00b7 2020-4-28"}, {"num": 17, "value": "\u4e0d\u77e5\u540d\u80a5\u7682 \u00b7 2019-7-16"}, {"num": 18, "value": "\u5f20\u4e09\u662f\u6211\u5927\u54e5 \u00b7 2020-5-23"}, {"num": 19, "value": "\u9716\u8a00\u4e36 \u00b7 2020-5-13"}, {"num": 20, "value": "happykid17 \u00b7 2021-1-4"}, {"num": 21, "value": "\u6cab\u7136Fight \u00b7 2019-7-6"}, {"num": 22, "value": "\u963f\u98devlog\u8bb0\u5f55\u5f00\u54e5 \u00b7 2020-4-25"}, {"num": 23, "value": "ttsy\u5929\u5929\u5c11\u7237 \u00b7 2018-7-20"}, {"num": 24, "value": "\u7535\u7ade\u5c71\u91cc\u5a03 \u00b7 8-6"}, {"num": 25, "value": "\u51b7\u989c\u83cc\u4e36 \u00b7 2021-4-19"}, {"num": 26, "value": "\u963f\u98devlog\u8bb0\u5f55\u5f00\u54e5 \u00b7 5-14"}, {"num": 27, "value": "\u5305\u5b50\u653e\u76d0 \u00b7 8-21"}, {"num": 28, "value": "\u70ed\u60c5\u4f3c\u706b\u7684\u5c0f\u6d77 \u00b7 2019-9-20"}, {"num": 29, "value": "\u6d45\u6f84\u6708 \u00b7 2020-10-1"}, {"num": 30, "value": "\u574f\u5154\u5b50x \u00b7 2020-3-21"}, {"num": 31, "value": "\u6cfd\u534e\u8f85\u4e00 \u00b7 2019-9-22"}, {"num": 32, "value": "\u6c61\u795eya \u00b7 2020-11-28"}, {"num": 33, "value": "\u6253\u7834\u6158\u6848 \u00b7 2018-6-4"}, {"num": 34, "value": "PDD\u5728B\u7ad9 \u00b7 4-3"}, {"num": 35, "value": "\u9999\u8549\u68d2\u68d2\u9524ts \u00b7 2020-2-12"}, {"num": 36, "value": "\u6211\u7684\u4e09\u4e03\u6ca1\u6709\u5206 \u00b7 2020-2-21"}, {"num": 37, "value": "\u9ad8\u80fd\u6e38\u620f\u773c \u00b7 8-8"}, {"num": 38, "value": "\u964c\u8f69\u6cfd \u00b7 2018-11-11"}, {"num": 39, "value": "Kiyohime\u4e7e\u9cb2 \u00b7 2020-2-17"}, {"num": 40, "value": "\u6708\u4e0bundermoon \u00b7 7-29"}, {"num": 41, "value": "\u6e6b\u747e\u5434 \u00b7 2020-7-29"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u657012_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/p[1]/a[1]", "exampleValues": [{"num": 0, "value": "https://space.bilibili.com/152292466"}, {"num": 1, "value": "https://space.bilibili.com/505241381"}, {"num": 2, "value": "https://space.bilibili.com/28824825"}, {"num": 3, "value": "https://space.bilibili.com/449276953"}, {"num": 4, "value": "https://space.bilibili.com/26311441"}, {"num": 5, "value": "https://space.bilibili.com/1492647"}, {"num": 6, "value": "https://space.bilibili.com/2028911406"}, {"num": 7, "value": "https://space.bilibili.com/1977691792"}, {"num": 8, "value": "https://space.bilibili.com/493533134"}, {"num": 9, "value": "https://space.bilibili.com/36882906"}, {"num": 10, "value": "https://space.bilibili.com/551271353"}, {"num": 11, "value": "https://space.bilibili.com/9336404"}, {"num": 12, "value": "https://space.bilibili.com/12319573"}, {"num": 13, "value": "https://space.bilibili.com/548489530"}, {"num": 14, "value": "https://space.bilibili.com/226736083"}, {"num": 15, "value": "https://space.bilibili.com/436582505"}, {"num": 16, "value": "https://space.bilibili.com/18915489"}, {"num": 17, "value": "https://space.bilibili.com/13142874"}, {"num": 18, "value": "https://space.bilibili.com/340497271"}, {"num": 19, "value": "https://space.bilibili.com/17422165"}, {"num": 20, "value": "https://space.bilibili.com/333644619"}, {"num": 21, "value": "https://space.bilibili.com/381448438"}, {"num": 22, "value": "https://space.bilibili.com/551271353"}, {"num": 23, "value": "https://space.bilibili.com/155682730"}, {"num": 24, "value": "https://space.bilibili.com/328379242"}, {"num": 25, "value": "https://space.bilibili.com/29379264"}, {"num": 26, "value": "https://space.bilibili.com/551271353"}, {"num": 27, "value": "https://space.bilibili.com/630915163"}, {"num": 28, "value": "https://space.bilibili.com/389114021"}, {"num": 29, "value": "https://space.bilibili.com/8034163"}, {"num": 30, "value": "https://space.bilibili.com/39486882"}, {"num": 31, "value": "https://space.bilibili.com/312129507"}, {"num": 32, "value": "https://space.bilibili.com/413118612"}, {"num": 33, "value": "https://space.bilibili.com/258882426"}, {"num": 34, "value": "https://space.bilibili.com/36882906"}, {"num": 35, "value": "https://space.bilibili.com/294591363"}, {"num": 36, "value": "https://space.bilibili.com/331804025"}, {"num": 37, "value": "https://space.bilibili.com/1510650555"}, {"num": 38, "value": "https://space.bilibili.com/112883352"}, {"num": 39, "value": "https://space.bilibili.com/407529648"}, {"num": 40, "value": "https://space.bilibili.com/17779099"}, {"num": 41, "value": "https://space.bilibili.com/587969326"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657013_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[9]/div[3]/span[1]", "exampleValues": [{"num": 1, "value": "\u6b63\u5728\u7f13\u51b2..."}, {"num": 13, "value": "\u6b63\u5728\u7f13\u51b2..."}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657014_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[1]/span[1]", "exampleValues": [{"num": 1, "value": "\u83b7\u53d6\u89c6\u9891\u53c2\u6570..."}, {"num": 13, "value": "\u83b7\u53d6\u89c6\u9891\u53c2\u6570..."}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657015_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[1]/span[2]", "exampleValues": [{"num": 1, "value": "[\u6210\u529f]"}, {"num": 13, "value": "[\u6210\u529f]"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657016_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[1]", "exampleValues": [{"num": 1, "value": "\u64ad\u653e\u5668\u521d\u59cb\u5316..."}, {"num": 13, "value": "\u64ad\u653e\u5668\u521d\u59cb\u5316..."}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657017_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[2]", "exampleValues": [{"num": 1, "value": "[\u6210\u529f]"}, {"num": 13, "value": "[\u6210\u529f]"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657018_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[3]", "exampleValues": [{"num": 1, "value": "3.16.0-9b97d64a"}, {"num": 13, "value": "3.16.0-9b97d64a"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657019_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[3]/span[1]", "exampleValues": [{"num": 1, "value": "\u83b7\u53d6\u64ad\u653e\u5730\u5740..."}, {"num": 13, "value": "\u83b7\u53d6\u64ad\u653e\u5730\u5740..."}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657020_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[3]/span[2]", "exampleValues": [{"num": 1, "value": "[\u6210\u529f]"}, {"num": 13, "value": "[\u6210\u529f]"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657021_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[4]/span[1]", "exampleValues": [{"num": 1, "value": "\u52a0\u8f7d\u89c6\u9891\u4fe1\u606f..."}, {"num": 13, "value": "\u52a0\u8f7d\u89c6\u9891\u4fe1\u606f..."}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657022_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[4]/span[2]", "exampleValues": [{"num": 1, "value": "[\u6210\u529f]"}, {"num": 13, "value": "[\u6210\u529f]"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657023_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[5]/span[1]", "exampleValues": [{"num": 1, "value": "\u52a0\u8f7d\u89c6\u9891\u5185\u5bb9..."}, {"num": 13, "value": "\u52a0\u8f7d\u89c6\u9891\u5185\u5bb9..."}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u657024_\u6587\u672c", "desc": "", "relativeXpath": "/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]/em[2]", "exampleValues": [{"num": 13, "value": "\u5362\u672c\u4f1f"}, {"num": 27, "value": "\u5362\u672c\u4f1f"}, {"num": 30, "value": "\u5362\u672c\u4f1f"}], "default": ""}], "loopType": 1}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/20.json b/ElectronJS/tasks/20.json new file mode 100644 index 00000000..99f2e18c --- /dev/null +++ b/ElectronJS/tasks/20.json @@ -0,0 +1 @@ +{"id": 20, "name": "Bilibili\u7c89\u4e1d", "url": "https://space.bilibili.com/291929894/fans/fans", "links": "https://space.bilibili.com/291929894/fans/fans", "containJudge": false, "desc": "https://space.bilibili.com/291929894/fans/fans", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://space.bilibili.com/291929894/fans/fans", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://space.bilibili.com/291929894/fans/fans"}, {"id": 1, "name": "loopTimes_Loop_1", "nodeId": 2, "nodeName": "Loop", "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", "type": "int", "exampleValue": 0, "value": 0}], "outputParameters": [{"id": 0, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u5bf9\u65b9\u7b54\u590d5"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://space.bilibili.com/291929894/fans/fans", "links": "https://space.bilibili.com/291929894/fans/fans", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [4], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//a[contains(text(),\"\u4e0b\u4e00\u9875\")]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 3, "parentId": 2, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"page-follows\"]/div[1]/div[2]/div[2]/div[2]/ul[2]/li[7]", "wait": 1, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": 3, "index": 4, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [5], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[2]/div[4]/div[1]/div[1]/div[1]/div[2]/div[2]/div[2]/ul[1]/li/div[2]/a[1]/span[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 4, "index": 5, "parentId": 3, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "\u5bf9\u65b9\u7b54\u590d5"}], "default": ""}], "loopType": 1}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/23.json b/ElectronJS/tasks/23.json new file mode 100644 index 00000000..4e64d8c5 --- /dev/null +++ b/ElectronJS/tasks/23.json @@ -0,0 +1 @@ +{"id": 23, "name": "eBay Titles - Simple Demo", "url": "https://www.ebay.com", "links": "https://www.ebay.com", "containJudge": false, "desc": "https://www.ebay.com", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://www.ebay.com", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://www.ebay.com"}, {"id": 1, "name": "inputText_1", "nodeName": "Input Text", "nodeId": 2, "desc": "The text to be entered, such as 'computer' at eBay search box", "type": "string", "exampleValue": "iPhone", "value": "iPhone"}, {"id": 2, "name": "loopTimes_Loop Click Next Page_2", "nodeId": 5, "nodeName": "Loop Click Next Page", "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", "type": "int", "exampleValue": 10, "value": 10}], "outputParameters": [{"id": 0, "name": "Title", "desc": "", "type": "string", "exampleValue": "Apple iPhone 11 - 64GB - Black - Carrier Unlocked - NO FACE ID"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2, 3, 5], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.ebay.com", "links": "https://www.ebay.com", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-ac\"]", "wait": 0, "value": "iPhone"}}, {"id": 3, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Search", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-btn\"]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 3, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"s0-52-12-5-4[0]-42\"]/form[1]/fieldset[1]/input[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 4, "index": 5, "parentId": 0, "type": 1, "option": 8, "title": "Loop Click Next Page", "sequence": [7, 6], "isInLoop": false, "position": 3, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "//a[contains(@class,'pagination__next')] ", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 10, "historyWait": 2}}, {"id": 6, "index": 6, "parentId": 4, "type": 0, "option": 2, "title": "Click Next", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 6, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"srp-river-results\"]/ul[1]/li[61]/div[2]/span[1]/span[1]/nav[1]/a[1]", "wait": 1, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": 5, "index": 7, "parentId": 4, "type": 1, "option": 8, "title": "Loop Collection", "sequence": [8], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 7, "index": 8, "parentId": 5, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 7, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "Title", "desc": "", "relativeXpath": "//div[contains(@class,'s-item__title')] ", "exampleValues": [{"num": 0, "value": "Apple iPhone 11 - 64GB - Black - Carrier Unlocked - NO FACE ID"}, {"num": 1, "value": "Apple iPhone 12 Pro Max - Factory Unlocked - 128GB - Very Good"}, {"num": 2, "value": "Apple iPhone SE 2nd Gen 64GB Unlocked AT&T T-Mobile Verizon Good Condition"}, {"num": 3, "value": "Apple iPhone 6 16GB 64GB 128GB Factory Unlocked SmartPhone AT&T T-mobile Verizon"}, {"num": 4, "value": "Apple iPhone 12 A2172 64/128/256GB AT&T T-Mobile Verizon Unlocked GREAT"}, {"num": 5, "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 6, "value": "Apple iPhone 13 PRO MAX 128GB 256GB 512GB 1TB (UNLOCKED) \u2705APPLE WARNTY\u26ab\ud83d\udd34\ud83d\udd35\u2724O/B\u2724"}, {"num": 7, "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 8, "value": "Apple iPhone XR - 64GB - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 9, "value": "APPLE IPHONE 7 *ALL COLORS* FACTORY UNLOCKED 32GB (VERY GOOD CONDITION)"}, {"num": 10, "value": "Apple iPhone 11 64GB Unlocked Smartphone - Very Good"}, {"num": 11, "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 12, "value": "Apple iPhone 12 Mini 64GB Unlocked Smartphone - Very Good"}, {"num": 13, "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T"}, {"num": 14, "value": "Apple iPhone SE 2nd Gen. 2020 64GB Unlocked A2275 GSM + CDMA -BEST BUDGET DEAL-"}, {"num": 15, "value": "Apple iPhone 7 Plus - 128GB - Factory Unlocked - Very Good Condition "}, {"num": 16, "value": "Apple iPhone 12 - 64GB - All Colors - Unlocked Smartphone - Good Condition "}, {"num": 17, "value": "Apple iPhone 13 A2482 128GB Midnight Unlocked Excellent Condition"}, {"num": 18, "value": "Apple iPhone 11 64GB/128GB/256GB - ALL COLOURS - UNLOCKED - VERY GOOD CONDITION"}, {"num": 19, "value": "Apple iPhone 12 Pro Max A2342 256GB Unlocked Good Condition"}, {"num": 20, "value": "Apple iPhone 12 Pro Max 5G 128GB Factory Unlocked CDMA + GSM EXCELLENT"}, {"num": 21, "value": "Apple iPhone 12 Pro A2341 128GB Unlocked Very Good Condition (Free Shipping)"}, {"num": 22, "value": "Apple iPhone 11 A2111 64/128/256 - All Colors - (Factory Unlocked) - Excellent -"}, {"num": 23, "value": "Apple iPhone 11 Pro Max - 256GB - All Colors (Unlocked) - Very Good Condition "}, {"num": 24, "value": "Apple iPhone 12 Pro Max (A2342) - All Colors - (Unlocked) - 10/10 Open Box -"}, {"num": 25, "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 26, "value": "Apple iPhone 13 (Unlocked) Pre-Order-New Open Box, Free Shipping!"}, {"num": 27, "value": "Apple iPhone 12 - 5G - 128GB Factory Unlocked GSM + CDMA - OPEN BOX"}, {"num": 28, "value": "Apple iPhone 8 64GB Factory Unlocked Verizon AT&T T-Mobile Sprint Good"}, {"num": 29, "value": "Apple iPhone 12 (A2172) 64GB Blue Unlocked GSM/CDMA -Fair Condition"}, {"num": 30, "value": "Apple iPhone 11 64GB/128GB/256GB - ALL COLOURS - UNLOCKED - GOOD CONDITION"}, {"num": 31, "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T Ultra"}, {"num": 32, "value": "Apple iPhone 11 64GB Factory Unlocked 4G LTE Smartphone - Good"}, {"num": 33, "value": "Apple iPhone XR 64GB 128GB Fully Unlocked Smartphone A1984 - Good"}, {"num": 34, "value": "Apple iPhone XR 64GB Factory Unlocked Smartphone - Very Good"}, {"num": 35, "value": "Apple iPhone 11 - 128GB - All Colors - Fully Unlocked (CDMA+GSM)- Good Condition"}, {"num": 36, "value": "NEW Apple iPhone 11 A2111 (FACTORY UNLOCKED) - ALL COLORS & CAPACITY"}, {"num": 37, "value": "Apple iPhone 12 64GB/128GB/256GB - ALL COLOURS - UNLOCKED- VERY GOOD CONDITION"}, {"num": 38, "value": "Open Box Apple iPhone 8 Plus 64GB Factory Unlocked Verizon T-Mobile- Gray/Silver"}, {"num": 39, "value": "Apple iPhone 6s 16/32/64 GB - All Colors - Fully Unlocked - Very Good Condition"}, {"num": 40, "value": "Apple iPhone 8 64GB GSM Factory Unlocked Smartphone- Excellent condition"}, {"num": 41, "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket"}, {"num": 42, "value": "Apple iPhone 8 64GB Verizon T-Mobile AT&T Unlocked Smartphone PRISTINE Condition"}, {"num": 43, "value": "Apple iPhone 12 128GB Unlocked Smartphone - Very Good"}, {"num": 44, "value": "Apple iPhone 12 Mini 64GB 128GB 256GB Unlocked AT&T T-Mobile Verizon Very Good"}, {"num": 45, "value": "Apple iPhone 14 Pro Max Unlocked eSim, Pre-Order.. FREE UPGRADE TO 1TB MODEL!"}, {"num": 46, "value": "Apple iPhone SE 2nd Gen 2020 Fully Unlocked GSM/CDMA 64GB 128GB 256GB"}, {"num": 47, "value": "Apple iPhone 6 16GB Space Gray A1549 Unlocked GSM 4G LTE New In Box SEALED"}, {"num": 48, "value": "Apple iPhone 14 128GB ( Unlocked) Excellent"}, {"num": 49, "value": "Apple iPhone 12 Mini 5.4\" 64GB 128GB Factory Unlocked (Any Carrier) Very Good"}, {"num": 50, "value": "Apple iPhone 13 Pro 128/256/512GB A2483 Unlocked Open Box"}, {"num": 51, "value": "Apple iPhone 8 64GB 256GB Unlocked Open Box New Other"}, {"num": 52, "value": "Apple iPhone 12 mini (5G) Factory Unlocked GSM+CDMA 256GB 128GB |64GB Excellent"}, {"num": 53, "value": "Apple iPhone 12 64GB 128GB 256GB Unlocked AT&T T-Mobile Verizon Sprint Very Good"}, {"num": 54, "value": "Apple iPhone XR 64GB Black Unlocked Fair Condition"}, {"num": 55, "value": "Apple iPhone 11 Pro -64GB-Space Gray Unlocked A2160 CDMA + GSM Smartphone GOOD "}, {"num": 56, "value": "Apple iPhone 12 Mini (5G) GSM/CDMA Factory Unlocked 256GB |128GB | 64GB"}, {"num": 57, "value": "Apple iPhone 11 - 64GB 128GB 256GB - All Colors - Excellent Condition"}, {"num": 58, "value": "Apple iPhone 11 - 64GB / 128GB / 256GB - Factory Unlocked - Smartphone"}, {"num": 59, "value": "Apple iPhone 6 A1549 32GB Space Gray Unlocked GSM/CDMA Fair "}], "default": ""}], "loopType": 1}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/25.json b/ElectronJS/tasks/25.json new file mode 100644 index 00000000..50f41324 --- /dev/null +++ b/ElectronJS/tasks/25.json @@ -0,0 +1 @@ +{"id": 25, "name": "eBay Titles", "url": "https://www.ebay.com", "links": "https://www.ebay.com", "containJudge": false, "desc": "https://www.ebay.com", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://www.ebay.com", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://www.ebay.com"}, {"id": 1, "name": "inputText_1", "nodeName": "Input Text", "nodeId": 2, "desc": "The text to be entered, such as 'computer' at eBay search box", "type": "string", "exampleValue": "iPhone", "value": "iPhone"}], "outputParameters": [{"id": 0, "name": "Title", "desc": "", "type": "string", "exampleValue": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' "}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2, 3, 8], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.ebay.com", "links": "https://www.ebay.com", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-ac\"]", "wait": 0, "value": "iPhone"}}, {"id": 3, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-btn\"]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [5, 6], "isInLoop": false, "position": 3, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 5, "parentId": 4, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "para1_text", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' "}, {"num": 1, "value": "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro Cricket"}, {"num": 2, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition Warranty"}, {"num": 3, "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket"}, {"num": 4, "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 5, "value": "Apple iPhone XS Max - 64GB Used T-Mobile"}, {"num": 6, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UK"}, {"num": 7, "value": "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint Condition"}, {"num": 8, "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 9, "value": "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone Used"}, {"num": 10, "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 11, "value": "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone Used"}, {"num": 12, "value": "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!"}, {"num": 13, "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T"}, {"num": 14, "value": "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All Colours"}, {"num": 15, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK Stock"}, {"num": 16, "value": "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade A"}, {"num": 17, "value": "Apple iPhone SE 2nd Gen. - 256GB - Midnight (Unlocked)"}, {"num": 18, "value": "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UK"}, {"num": 19, "value": "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good Condition"}, {"num": 20, "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 21, "value": "Apple iPhone XS Max 64GB Black AT&T"}, {"num": 22, "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket"}, {"num": 23, "value": "Apple iPhone 11 - 128GB - Factory Unlocked - Good Condition"}, {"num": 24, "value": "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good Condition"}, {"num": 25, "value": "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)"}, {"num": 26, "value": "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 27, "value": "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work good"}, {"num": 28, "value": "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!"}, {"num": 29, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK Stock"}, {"num": 30, "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good Condition"}, {"num": 31, "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UK"}, {"num": 32, "value": "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)"}, {"num": 33, "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition "}, {"num": 34, "value": "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition"}, {"num": 35, "value": "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - Excellent"}, {"num": 36, "value": "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good Condition"}, {"num": 37, "value": "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) "}, {"num": 38, "value": "iPhone 12 Pro Max 128GB Graphite"}, {"num": 39, "value": "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 "}, {"num": 40, "value": "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone Used"}, {"num": 41, "value": "Apple iPhone 11 Pro Max - 64GB - Midnight\u00a0Green (Unlocked) A2218 (CDMA + GSM)"}, {"num": 42, "value": "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon Good"}, {"num": 43, "value": "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone Used"}, {"num": 44, "value": "Apple iPhone 8 64GB Unlocked A1905 GSM - Space Gray"}, {"num": 45, "value": "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone Used"}, {"num": 46, "value": "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)"}, {"num": 47, "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+"}, {"num": 48, "value": "Apple iPhone 12 - 256GB - Blue (Unlocked)"}, {"num": 49, "value": "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone Used"}, {"num": 50, "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 51, "value": "iphone 11"}, {"num": 52, "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 53, "value": "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon"}, {"num": 54, "value": "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 55, "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good Refurbished"}, {"num": 56, "value": "Apple iPhone 13 Pro Max A2484 256GB Graphite LOCKED (READ)"}, {"num": 57, "value": "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked Excellent"}, {"num": 58, "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T Ultra"}, {"num": 59, "value": "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)"}], "default": ""}], "loopType": 1}}, {"id": -1, "index": 6, "parentId": 4, "type": 1, "option": 8, "title": "Loop", "sequence": [7], "isInLoop": true, "position": 1, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/div/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 7, "parentId": 6, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "para2_text", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "HKD 1,756.28 to HKD 2,987.25"}, {"num": 1, "value": "HKD 1,646.12 to HKD 2,038.15"}, {"num": 2, "value": "HKD 2,289.86 to HKD 3,256.24"}, {"num": 3, "value": "HKD 862.07 to HKD 1,881.34"}, {"num": 4, "value": "HKD 2,046.31 to HKD 2,258.00"}, {"num": 5, "value": "HKD 1,352.50"}, {"num": 6, "value": "HKD 2,802.43 to HKD 3,188.98"}, {"num": 7, "value": "HKD 1,764.12 to HKD 3,002.93"}, {"num": 8, "value": "HKD 1,622.92"}, {"num": 9, "value": "HKD 3,410.56 to HKD 5,605.92"}, {"num": 10, "value": "HKD 4,252.01 to HKD 4,541.92"}, {"num": 11, "value": "HKD 1,764.05 to HKD 2,352.09"}, {"num": 12, "value": "HKD 1,058.08"}, {"num": 13, "value": "HKD 783.98 to HKD 1,568.03"}, {"num": 14, "value": "HKD 1,836.04"}, {"num": 15, "value": "HKD 2,512.51 to HKD 3,285.62"}, {"num": 16, "value": "HKD 1,212.91 to HKD 1,492.68"}, {"num": 17, "value": "HKD 492.86"}, {"num": 18, "value": "HKD 3,382.26 to HKD 3,865.45"}, {"num": 19, "value": "HKD 1,701.40 to HKD 2,916.69"}, {"num": 20, "value": "HKD 2,899.07 to HKD 3,478.90"}, {"num": 21, "value": "HKD 1,136.88"}, {"num": 22, "value": "HKD 862.07 to HKD 1,881.34"}, {"num": 23, "value": "HKD 1,732.76 to HKD 2,979.41"}, {"num": 24, "value": "HKD 3,285.23 to HKD 4,251.62"}, {"num": 25, "value": "HKD 2,213.03"}, {"num": 26, "value": "HKD 5,121.76"}, {"num": 27, "value": "HKD 689.97"}, {"num": 28, "value": "HKD 783.66"}, {"num": 29, "value": "HKD 2,222.59"}, {"num": 30, "value": "HKD 2,512.51 to HKD 3,092.34"}, {"num": 31, "value": "HKD 1,739.40 to HKD 2,029.32"}, {"num": 32, "value": "HKD 1,191.76"}, {"num": 33, "value": "HKD 670.29"}, {"num": 34, "value": "HKD 3,672.18 to HKD 4,058.73"}, {"num": 35, "value": "HKD 1,160.40 to HKD 1,497.55"}, {"num": 36, "value": "HKD 2,415.49 to HKD 2,831.03"}, {"num": 37, "value": "HKD 1,403.46 to HKD 2,258.08"}, {"num": 38, "value": "HKD 5,063.87"}, {"num": 39, "value": "HKD 470.35 to HKD 940.79"}, {"num": 40, "value": "HKD 1,842.45 to HKD 3,528.17"}, {"num": 41, "value": "HKD 1,981.09"}, {"num": 42, "value": "HKD 1,685.72 to HKD 2,893.16"}, {"num": 43, "value": "HKD 2,704.91 to HKD 3,488.97"}, {"num": 44, "value": "HKD 1,215.29"}, {"num": 45, "value": "HKD 1,724.84 to HKD 1,960.06"}, {"num": 46, "value": "HKD 1,403.46"}, {"num": 47, "value": "HKD 3,377.43"}, {"num": 48, "value": "HKD 3,097.02"}, {"num": 49, "value": "HKD 862.38 to HKD 1,176.00"}, {"num": 50, "value": "HKD 2,258.00 to HKD 2,469.70"}, {"num": 51, "value": "HKD 1,414.63"}, {"num": 52, "value": "HKD 1,764.05 to HKD 1,905.18"}, {"num": 53, "value": "HKD 1,803.33 to HKD 2,273.76"}, {"num": 54, "value": "HKD 1,658.20"}, {"num": 55, "value": "HKD 2,270.53 to HKD 2,753.72"}, {"num": 56, "value": "HKD 2,352.17"}, {"num": 57, "value": "HKD 4,831.94"}, {"num": 58, "value": "HKD 1,411.22 to HKD 1,881.65"}, {"num": 59, "value": "HKD 1,419.14 to HKD 2,297.28"}], "default": ""}]}}, {"id": 4, "index": 8, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [9], "isInLoop": false, "position": 3, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 5, "index": 9, "parentId": 4, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "Title", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' "}, {"num": 1, "value": "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro Cricket"}, {"num": 2, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition Warranty"}, {"num": 3, "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket"}, {"num": 4, "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 5, "value": "Apple iPhone XS Max - 64GB Used T-Mobile"}, {"num": 6, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UK"}, {"num": 7, "value": "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint Condition"}, {"num": 8, "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition"}, {"num": 9, "value": "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone Used"}, {"num": 10, "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 11, "value": "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone Used"}, {"num": 12, "value": "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!"}, {"num": 13, "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T"}, {"num": 14, "value": "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All Colours"}, {"num": 15, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK Stock"}, {"num": 16, "value": "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade A"}, {"num": 17, "value": "Apple iPhone SE 2nd Gen. - 256GB - Midnight (Unlocked)"}, {"num": 18, "value": "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UK"}, {"num": 19, "value": "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good Condition"}, {"num": 20, "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 21, "value": "Apple iPhone XS Max 64GB Black AT&T"}, {"num": 22, "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket"}, {"num": 23, "value": "Apple iPhone 11 - 128GB - Factory Unlocked - Good Condition"}, {"num": 24, "value": "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good Condition"}, {"num": 25, "value": "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)"}, {"num": 26, "value": "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good Condition"}, {"num": 27, "value": "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work good"}, {"num": 28, "value": "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!"}, {"num": 29, "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK Stock"}, {"num": 30, "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good Condition"}, {"num": 31, "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UK"}, {"num": 32, "value": "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)"}, {"num": 33, "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition "}, {"num": 34, "value": "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition"}, {"num": 35, "value": "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - Excellent"}, {"num": 36, "value": "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good Condition"}, {"num": 37, "value": "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) "}, {"num": 38, "value": "iPhone 12 Pro Max 128GB Graphite"}, {"num": 39, "value": "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 "}, {"num": 40, "value": "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone Used"}, {"num": 41, "value": "Apple iPhone 11 Pro Max - 64GB - Midnight\u00a0Green (Unlocked) A2218 (CDMA + GSM)"}, {"num": 42, "value": "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon Good"}, {"num": 43, "value": "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone Used"}, {"num": 44, "value": "Apple iPhone 8 64GB Unlocked A1905 GSM - Space Gray"}, {"num": 45, "value": "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone Used"}, {"num": 46, "value": "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)"}, {"num": 47, "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+"}, {"num": 48, "value": "Apple iPhone 12 - 256GB - Blue (Unlocked)"}, {"num": 49, "value": "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone Used"}, {"num": 50, "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 51, "value": "iphone 11"}, {"num": 52, "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 53, "value": "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon"}, {"num": 54, "value": "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 55, "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good Refurbished"}, {"num": 56, "value": "Apple iPhone 13 Pro Max A2484 256GB Graphite LOCKED (READ)"}, {"num": 57, "value": "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked Excellent"}, {"num": 58, "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T Ultra"}, {"num": 59, "value": "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)"}], "default": ""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/27.json b/ElectronJS/tasks/27.json new file mode 100644 index 00000000..5add6a1c --- /dev/null +++ b/ElectronJS/tasks/27.json @@ -0,0 +1 @@ +{"id": 27, "name": "eBay Names", "url": "https://www.ebay.com", "links": "https://www.ebay.com", "containJudge": false, "desc": "https://www.ebay.com", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://www.ebay.com", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://www.ebay.com"}, {"id": 1, "name": "inputText_1", "nodeName": "Input Text", "nodeId": 2, "desc": "The text to be entered, such as 'computer' at eBay search box", "type": "string", "exampleValue": "iPhone", "value": "iPhone"}, {"id": 2, "name": "loopTimes_Loop_2", "nodeId": 4, "nodeName": "Loop", "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", "type": "int", "exampleValue": 0, "value": 0}], "outputParameters": [{"id": 0, "name": "names", "desc": "", "type": "string", "exampleValue": "New ListingRead* Apple iPhone 12 mini - 256GB - Blue (Unlocked) A2176 ~52851"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2, 3, 4], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.ebay.com", "links": "https://www.ebay.com", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-ac\"]", "wait": 0, "value": "iPhone"}}, {"id": 3, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-btn\"]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 4, "index": 4, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [6, 5], "isInLoop": false, "position": 3, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "//*[contains(@class, \"pagination__next\")]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 6, "index": 5, "parentId": 4, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 5, "tabIndex": -1, "useLoop": true, "xpath": "//*[contains(@class, \"pagination__next\")]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": 5, "index": 6, "parentId": 4, "type": 1, "option": 8, "title": "Loop", "sequence": [7], "isInLoop": true, "position": 0, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 7, "index": 7, "parentId": 5, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 6, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "names", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "New ListingRead* Apple iPhone 12 mini - 256GB - Blue (Unlocked) A2176 ~52851"}, {"num": 1, "value": "Apple iPhone 7 32GB 64GB 128GB 256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T"}, {"num": 2, "value": "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)"}, {"num": 3, "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked - Good Condition - TWO YEAR WARRANTY"}, {"num": 4, "value": "Apple iPhone 5S 16GB 32GB 64GB Unlocked Smartphone - Very Good Condition + CHRGR"}, {"num": 5, "value": "Apple iPhone X 64GB 256GB - Grey Silver - UNLOCKED - Excellent Grade A Condition"}, {"num": 6, "value": "Apple iPhone 11 Pro 64GB 256GB 512GB - Unlocked - Excellent Condition - Grade A+"}, {"num": 7, "value": "Apple iPhone 13 - 128GB - Midnight (Unlocked) **NEW SEALED**"}, {"num": 8, "value": "Apple iPhone 6 - 16/32/64GB Unlocked All Colours Grade A Condition + CHARGR"}, {"num": 9, "value": "Apple iPhone 11 Pro 64GB 256GB - Unlocked - 12 Months Warranty - Very Good"}, {"num": 10, "value": "Apple iPhone 12 Pro Max 256GB Unlocked Gold"}, {"num": 11, "value": "Apple iPhone XR - 128GB - All Colors - Fully Unlocked - Very Good Condition "}, {"num": 12, "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Very Good Condition "}, {"num": 13, "value": "Apple iPhone 6s Plus 64GB GSM Unlocked AT&T T-Mobile Very Good Condition "}, {"num": 14, "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours - Excellent"}, {"num": 15, "value": "Apple iPhone XS - 256GB Space Gray (Factory Unlocked) CDMA+GSM"}, {"num": 16, "value": "Apple iPhone 11 - 64GB - Purple"}, {"num": 17, "value": "Apple iPhone 11 Pro - 64GB - Space Grey (Unlocked) A2215 (GSM)"}, {"num": 18, "value": "Apple iPhone 13 Pro - 256GB - Graphite (Unlocked)"}, {"num": 19, "value": "Apple iPhone 11 64GB 128GB 256GB - Smartphone All Colours - VERY Good Condition"}, {"num": 20, "value": "Apple iPhone 14 Pro - 256GB - Space Black (Unlocked)"}, {"num": 21, "value": "Apple iPhone XS 256GB - Excellent Condition - Gold - Unlocked + Box!"}, {"num": 22, "value": "Iphone 11 64GB Unlocked Green Scratched Screen"}, {"num": 23, "value": "\ud83d\udd25Apple iPhone X - 64/256GB - Space Grey/ Silver - UNLOCKED - GOOD CONDITION \ud83d\udd25"}, {"num": 24, "value": "Apple iPhone 14 Pro Unlocked eSim 256GB"}, {"num": 25, "value": "UNLOCKED Red Iphone XR 64GB - CDMA + GSM - Works Great!"}, {"num": 26, "value": "Apple iPhone X (iPhone 10) 64GB 256GB All Colours Unlocked- Excellent Grade A"}, {"num": 27, "value": "Apple iPhone SE 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon"}, {"num": 28, "value": "Refurbished Apple iPhone 8 - 64GB 128GB 256GB - Unlocked - Good Condition - UK"}, {"num": 29, "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Very Good Condition"}, {"num": 30, "value": "Apple iPhone XS 64GB 256GB 512GB Unlocked Space Grey,Silver,Gold Good Condition"}, {"num": 31, "value": "Apple iPhone X (iPhone 10) 64GB 256GB Unlocked Grey/Silver Very Good Condition"}, {"num": 32, "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked All Colours -Excellent Condition"}, {"num": 33, "value": "Apple iPhone 13 Pro Max 128/256/512/1TB Unlocked All Colours Good Condition"}, {"num": 34, "value": "New ListingApple iPhone 12 PRO MAX 256gb silver factory unlocked MGCL3LL/A model A2342"}, {"num": 35, "value": "New ListingApple iPhone X - 64GB - White (Unlocked) A1901 (GSM) (CA)"}, {"num": 36, "value": "Apple iPhone 7 Plus Unlocked Various Colors 32GB 128GB 256GB Smartphone Used"}, {"num": 37, "value": "Apple iPhone XS 64GB - Good Condition - BH 82% - Silver - Unlocked!"}, {"num": 38, "value": "New ListingRead* Apple iPhone 12 mini - 64GB - Blue (Unlocked) A2176 ~52843"}, {"num": 39, "value": "New ListingRead* Apple iPhone 12 mini - 64GB - Black (TracFone) A2176 ~52845"}, {"num": 40, "value": "Apple iPhone 11 - 64gb/128gb/256gb - Unlocked - Next Day Delivery - Grade A+"}, {"num": 41, "value": "iPhone XR Black 64gb Unlocked"}, {"num": 42, "value": "Apple iPhone 11- 64GB - Midnight\u00a0Green (Unlocked) A2215 (CDMA + GSM)"}, {"num": 43, "value": "Apple iPhone 11 - 256GB - Black (Unlocked) A2111 (CDMA + GSM)"}, {"num": 44, "value": "Apple iPhone XR - 64GB - Black (Unlocked) A1984 (CDMA + GSM)"}, {"num": 45, "value": "iphone xr 128gb unlocked black model MRY92 B/A"}, {"num": 46, "value": "Apple iPhone 11 Pro - 256GB - Space Grey (Unlocked) A2215 (GSM)"}, {"num": 47, "value": "New ListingApple iPhone 14 Pro - 256GB - Space black (Unlocked) Brand New ,sealed,"}, {"num": 48, "value": "Apple iPhone 8 - 64GB - All Colors - Unlocked - Very Good Condition "}, {"num": 49, "value": "Apple iPhone 11 Pro Max - 64GB - Space Grey (Unlocked) *FAULTY*"}, {"num": 50, "value": "\ud83d\udd25Apple iPhone XR - 64GB - Black (Verizon) A1984 (CDMA + GSM)\ud83d\udd25"}, {"num": 51, "value": "Apple iPhone 8 - 256GB - A1863 - Rose Gold (Unlocked) Excellent Condition"}, {"num": 52, "value": "Apple iPhone X - 64GB - Space Gray (AT&T)"}, {"num": 53, "value": "Apple iPhone XS - 64GB - All Colors - Unlocked (CDMA+GSM) - Very Good Condition "}, {"num": 54, "value": "Apple iPhone 7 Unlocked Various Colors 32GB 128GB 256GB Smartphone Used "}, {"num": 55, "value": "Apple iPhone XR - 64GB - All Colors - (AT&T) - Smartphone - Good Condition "}, {"num": 56, "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Very Good"}, {"num": 57, "value": "Apple iPhone 8+ Plus 64GB/128GB/256GB Smartphone Verizon Unlocked T-Mobile AT&T"}, {"num": 58, "value": "Apple iPhone 12 Pro Max 128GB 256GB 512GB Unlocked All Colours - Excellent"}, {"num": 59, "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours - Very Good"}], "default": ""}], "loopType": 1}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/28.json b/ElectronJS/tasks/28.json new file mode 100644 index 00000000..22e32023 --- /dev/null +++ b/ElectronJS/tasks/28.json @@ -0,0 +1 @@ +{"id":28,"name":"eBay Names and Link Addresses - demo","url":"https://www.ebay.com","links":"https://www.ebay.com","containJudge":false,"desc":"eBay Names and Link Addresses - demo","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://www.ebay.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.ebay.com"},{"id":1,"name":"inputText_1","nodeName":"Input Text","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"string","exampleValue":"iPhone","value":"iPhone"},{"id":2,"name":"loopTimes_Loop Click Next Page_2","nodeId":4,"nodeName":"Loop Click Next Page","desc":"循环Loop Click Next Page执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"Name","desc":"","type":"string","exampleValue":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"id":1,"name":"Link Address","desc":"","type":"string","exampleValue":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.ebay.com","links":"https://www.ebay.com","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"Input Text","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-ac\"]","wait":0,"value":"iPhone"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"gh-btn\"]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":4,"index":4,"parentId":0,"type":1,"option":8,"title":"Loop Click Next Page","sequence":[6,5],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":6,"index":5,"parentId":4,"type":0,"option":2,"title":"Click Next","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination__next\")]","wait":0,"scrollType":0,"scrollCount":0,"paras":[],"loopType":0}},{"id":5,"index":6,"parentId":4,"type":1,"option":8,"title":"Loop Collection","sequence":[7],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":7,"index":7,"parentId":5,"type":0,"option":3,"title":"Collect Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":7,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"Name","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab"},{"num":1,"value":"Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab"},{"num":2,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab"},{"num":3,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":4,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":5,"value":"Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab"},{"num":6,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":7,"value":"Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab"},{"num":8,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab"},{"num":9,"value":"Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab"},{"num":10,"value":"Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":11,"value":"Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab"},{"num":12,"value":"Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":13,"value":"Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab"},{"num":14,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab"},{"num":15,"value":"Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab"},{"num":16,"value":"Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab"},{"num":17,"value":"iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab"},{"num":18,"value":"Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab"},{"num":19,"value":"Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab"},{"num":20,"value":"Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":21,"value":"New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":22,"value":"Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab"},{"num":23,"value":"Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab"},{"num":24,"value":"Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab"},{"num":25,"value":"Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab"},{"num":26,"value":"Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab"},{"num":27,"value":"original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab"},{"num":28,"value":"Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab"},{"num":29,"value":"Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab"},{"num":30,"value":"Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":31,"value":"Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab"},{"num":32,"value":"Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab"},{"num":33,"value":"Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab"},{"num":34,"value":"Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab"},{"num":35,"value":"Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab"},{"num":36,"value":"Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab"},{"num":37,"value":"Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab"},{"num":38,"value":"iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab"},{"num":39,"value":"Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab"},{"num":40,"value":"New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab"},{"num":41,"value":"Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab"},{"num":42,"value":"Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab"},{"num":43,"value":"Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab"},{"num":44,"value":"Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":45,"value":"Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab"},{"num":46,"value":"Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab"},{"num":47,"value":"Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab"},{"num":48,"value":"Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab"},{"num":49,"value":"Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab"},{"num":50,"value":"Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab"},{"num":51,"value":"Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":52,"value":"Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab"},{"num":53,"value":"Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":54,"value":"Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab"},{"num":55,"value":"Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab"},{"num":56,"value":"Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab"},{"num":57,"value":"Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab"},{"num":58,"value":"Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab"},{"num":59,"value":"New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab"}],"default":""},{"nodeType":2,"contentType":0,"relative":true,"name":"Link Address","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh"},{"num":1,"value":"https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh"},{"num":2,"value":"https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh"},{"num":3,"value":"https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh"},{"num":4,"value":"https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":5,"value":"https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":6,"value":"https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":7,"value":"https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":8,"value":"https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":9,"value":"https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":10,"value":"https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":11,"value":"https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":12,"value":"https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ"},{"num":13,"value":"https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh"},{"num":14,"value":"https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh"},{"num":15,"value":"https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh"},{"num":16,"value":"https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":17,"value":"https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":18,"value":"https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":19,"value":"https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":20,"value":"https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":21,"value":"https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":22,"value":"https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":23,"value":"https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":24,"value":"https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":25,"value":"https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":26,"value":"https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":27,"value":"https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ"},{"num":28,"value":"https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh"},{"num":29,"value":"https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh"},{"num":30,"value":"https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh"},{"num":31,"value":"https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh"},{"num":32,"value":"https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":33,"value":"https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":34,"value":"https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":35,"value":"https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":36,"value":"https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":37,"value":"https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":38,"value":"https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh"},{"num":39,"value":"https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh"},{"num":40,"value":"https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":41,"value":"https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":42,"value":"https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":43,"value":"https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":44,"value":"https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":45,"value":"https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":46,"value":"https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":47,"value":"https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ"},{"num":48,"value":"https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":49,"value":"https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":50,"value":"https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":51,"value":"https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":52,"value":"https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":53,"value":"https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":54,"value":"https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":55,"value":"https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":56,"value":"https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":57,"value":"https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ"},{"num":58,"value":"https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh"},{"num":59,"value":"https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh"}],"default":""}],"loopType":1}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/29.json b/ElectronJS/tasks/29.json new file mode 100644 index 00000000..625ab395 --- /dev/null +++ b/ElectronJS/tasks/29.json @@ -0,0 +1 @@ +{"id": 29, "name": "eBay Detail Page Info Collection", "url": "https://www.ebay.com", "links": "https://www.ebay.com", "containJudge": false, "desc": "https://www.ebay.com", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://www.ebay.com", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://www.ebay.com"}, {"id": 1, "name": "inputText_1", "nodeName": "Input Text", "nodeId": 2, "desc": "The text to be entered, such as 'computer' at eBay search box", "type": "string", "exampleValue": "iPhone", "value": "iPhone"}, {"id": 2, "name": "loopTimes_Loop Click Next Page_2", "nodeId": 7, "nodeName": "Loop Click Next Page", "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", "type": "int", "exampleValue": 0, "value": 0}], "outputParameters": [{"id": 0, "name": "para1_text", "desc": "", "type": "string", "exampleValue": " Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' "}, {"id": 1, "name": "para2_text", "desc": "", "type": "string", "exampleValue": "US $224.00"}, {"id": 2, "name": "para3_text", "desc": "", "type": "string", "exampleValue": "1,605 sold"}, {"id": 3, "name": "para4_text", "desc": "", "type": "string", "exampleValue": "3,874 watchers"}, {"id": 4, "name": "para5_text", "desc": "", "type": "string", "exampleValue": "Returns accepted"}, {"id": 5, "name": "para6_text", "desc": "", "type": "string", "exampleValue": "US $17.25 (approx HKD 135.25)\u00a0eBay International ShippingShop worldwide with confidence including detailed tracking and hassle-free returns.\u00a0Learn more | See detailsfor shipping"}, {"id": 6, "name": "para7_text", "desc": "", "type": "string", "exampleValue": "Phones are in Excellent cosmetic condition. Devices are ready to activate. Clean ESN. PhoneCheck "}, {"id": 7, "name": "para8_text", "desc": "", "type": "string", "exampleValue": "Read moreabout condition"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2, 3, 7], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.ebay.com", "links": "https://www.ebay.com", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-ac\"]", "wait": 0, "value": "iPhone"}}, {"id": 3, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"gh-btn\"]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": 5, "index": 4, "parentId": 4, "type": 1, "option": 8, "title": "Loop", "sequence": [5, 6], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 7, "index": 5, "parentId": 5, "type": 0, "option": 2, "title": "Click Page Link", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": true, "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 1}}, {"id": 8, "index": 6, "parentId": 5, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 2, "tabIndex": 1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "para1_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[1]/div[1]/div[1]", "exampleValues": [{"num": 0, "value": " Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' "}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para2_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/span[1]/span[1]", "exampleValues": [{"num": 0, "value": "US $224.00"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para3_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[4]/ul[1]/li[1]", "exampleValues": [{"num": 0, "value": "1,605 sold"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para4_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[4]/ul[1]/li[2]", "exampleValues": [{"num": 0, "value": "3,874 watchers"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para5_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[4]/ul[1]/li[3]", "exampleValues": [{"num": 0, "value": "Returns accepted"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para6_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]", "exampleValues": [{"num": 0, "value": "US $17.25 (approx HKD 135.25)\u00a0eBay International ShippingShop worldwide with confidence including detailed tracking and hassle-free returns.\u00a0Learn more | See detailsfor shipping"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para7_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[1]/div[1]/div[1]/div[2]/div[2]/span[2]", "exampleValues": [{"num": 0, "value": "Phones are in Excellent cosmetic condition. Devices are ready to activate. Clean ESN. PhoneCheck "}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "para8_text", "desc": "", "relativeXpath": "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[1]/div[1]/div[1]/div[2]/div[2]/a[1]/span[1]", "exampleValues": [{"num": 0, "value": "Read moreabout condition"}], "default": ""}]}}, {"id": 4, "index": 7, "parentId": 0, "type": 1, "option": 8, "title": "Loop Click Next Page", "sequence": [4, 8], "isInLoop": false, "position": 3, "parameters": {"history": 5, "tabIndex": 0, "useLoop": false, "xpath": "//*[contains(@class, \"pagination__next\")]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 6, "index": 8, "parentId": 4, "type": 0, "option": 2, "title": "Click Next", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 5, "tabIndex": 0, "useLoop": true, "xpath": "//*[contains(@class, \"pagination__next\")]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/3.json b/ElectronJS/tasks/3.json deleted file mode 100644 index 2ce90368..00000000 --- a/ElectronJS/tasks/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id":3,"name":"toutiao_author_desc","url":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","links":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","containJudge":false,"desc":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"Open Page","value":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media"}],"outputParameters":[{"id":0,"name":"参数2_文本","desc":"","type":"string","exampleValue":"简介:关注小荷医典,获取“权威、科学、实用、易懂”的医学信息"},{"id":1,"name":"参数3_文本","desc":"","type":"string","exampleValue":"63.3万获赞"},{"id":2,"name":"参数1_文本","desc":"","type":"string","exampleValue":"小荷医典"},{"id":3,"name":"参数1_链接地址","desc":"","type":"string","exampleValue":"https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"Open Page","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":3,"url":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","links":"https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":2,"title":"Click Element","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//a[contains(@class, 'flex-row')][1]","wait":2,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":-1,"index":3,"parentId":0,"type":1,"option":8,"title":"Loop","sequence":[4],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/button","wait":0,"scrollType":0,"scrollCount":0,"loopType":1,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":-1,"index":4,"parentId":3,"type":0,"option":3,"title":"Extract Data","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"参数1_文本","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"63.3万获赞"},{"num":1,"value":"10.3万粉丝"},{"num":2,"value":"5关注"}],"default":""}],"loopType":1}},{"id":3,"index":5,"parentId":0,"type":0,"option":3,"title":"Extract Data","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数2_文本","desc":"","relativeXpath":"//p[contains(@class, 'user-desc')]","exampleValues":[{"num":0,"value":"简介:关注小荷医典,获取“权威、科学、实用、易懂”的医学信息"}],"default":""},{"nodeType":0,"contentType":0,"relative":false,"name":"参数3_文本","desc":"","relativeXpath":"//div[contains(@class, 'relation-stat')]","exampleValues":[{"num":0,"value":"63.3万获赞"}],"default":""},{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","relativeXpath":"//div[contains(@class, 'detail')]//span[contains(@class, 'name')]","exampleValues":[{"num":0,"value":"小荷医典"}]},{"nodeType":2,"contentType":0,"relative":false,"name":"参数1_链接地址","desc":"","relativeXpath":"//a[@class=\"avatar\"]","exampleValues":[{"num":0,"value":"https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile"}]}]}},{"id":-1,"index":6,"parentId":0,"type":0,"option":3,"title":"Extract Data","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":2,"contentType":0,"relative":false,"name":"参数6_链接地址","desc":"","relativeXpath":"//a[contains(@class, 'flex-row')][1]","exampleValues":[{"num":0,"value":"https://so.toutiao.com/search/jump?url=https%3A%2F%2Fwww.toutiao.com%2Fc%2Fuser%2F95347840570%2F&aid=4916&jtoken=804fb410ca0c16fb0980b0a082d0c707d7ae7fb539575218f9e98534f7a9a598c00b8d749a4eb8859d5df7b1b0a122356b0b56810577c9f74a5faf9d6c18f340"}],"default":""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/30.json b/ElectronJS/tasks/30.json new file mode 100644 index 00000000..70a75335 --- /dev/null +++ b/ElectronJS/tasks/30.json @@ -0,0 +1 @@ +{"id": 30, "name": "WIKI", "url": "https://en.wikipedia.org/wiki/World_Wide_Web", "links": "https://en.wikipedia.org/wiki/World_Wide_Web", "containJudge": false, "desc": "https://en.wikipedia.org/wiki/World_Wide_Web", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://en.wikipedia.org/wiki/World_Wide_Web", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://en.wikipedia.org/wiki/World_Wide_Web"}], "outputParameters": [{"id": 0, "name": "para1_text", "desc": "", "type": "string", "exampleValue": "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages\u2014and to move from one web page to another through hyperlinks\u2014came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n\n \n Example.org \u2013 The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better\u00a0source\u00a0needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious \u2013 discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to w\u00e0n w\u00e9i w\u01ceng (\u4e07\u7ef4\u7f51), which satisfies www and literally means \"myriad-dimensional net\",[45][better\u00a0source\u00a0needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories \u2013 a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5\u00a0billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information\u2014such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations\u2014groups of interested and often competing parties chartered with the task of standardization\u2014not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC\u00a03986 allowed resources to be identified by URI in a subset of US-ASCII. RFC\u00a03987 allows more characters\u2014any character in the Universal Character Set\u2014and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52\u201358. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page\u00a0needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN\u00a0978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p.\u00a02. ISBN\u00a09780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN\u00a0978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN\u00a0978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript \u2013 The definitive guide (6\u00a0ed.). p.\u00a01. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification \u2013 W3C Recommendation \u2013 Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME \u2013 and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary\u00a0\u2013 Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press\u00a0\u2013 Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd\u00a0ed.). Beijing: O'Reilly. p.\u00a0264. ISBN\u00a0978-0596001728. OCLC\u00a049502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX\u00a010.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265\u2013269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11\u201314 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, \u0141., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241\u201352.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? \u2013 an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 \u2013 New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July\u2013December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1\u20132. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp.\u00a068\u201369, 127. ISBN\u00a0978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp.\u00a04\u20135. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p.\u00a07. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards \u2013 Mastering HTML5, CSS3, and XML. Apress. ISBN\u00a0978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBr\u00fcgger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol\u00a0\u2013 HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Br\u00fcgger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erd\u0151s Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" \u00b7 \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Pusk\u00e1s\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n\u00a0Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://en.wikipedia.org/wiki/World_Wide_Web", "links": "https://en.wikipedia.org/wiki/World_Wide_Web", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 3, "title": "Collect Data", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "para1_text", "desc": "", "relativeXpath": "/html/body/div[1]/div[1]/div[3]/main[1]/div[2]/div[3]/div[1]", "exampleValues": [{"num": 0, "value": "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages\u2014and to move from one web page to another through hyperlinks\u2014came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org \u2013 The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better\u00a0source\u00a0needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious \u2013 discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to w\u00e0n w\u00e9i w\u01ceng (\u4e07\u7ef4\u7f51), which satisfies www and literally means \"myriad-dimensional net\",[45][better\u00a0source\u00a0needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories \u2013 a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5\u00a0billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information\u2014such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations\u2014groups of interested and often competing parties chartered with the task of standardization\u2014not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC\u00a03986 allowed resources to be identified by URI in a subset of US-ASCII. RFC\u00a03987 allows more characters\u2014any character in the Universal Character Set\u2014and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52\u201358. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page\u00a0needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN\u00a0978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p.\u00a02. ISBN\u00a09780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN\u00a0978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN\u00a0978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript \u2013 The definitive guide (6\u00a0ed.). p.\u00a01. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification \u2013 W3C Recommendation \u2013 Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME \u2013 and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary\u00a0\u2013 Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press\u00a0\u2013 Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd\u00a0ed.). Beijing: O'Reilly. p.\u00a0264. ISBN\u00a0978-0596001728. OCLC\u00a049502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX\u00a010.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265\u2013269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11\u201314 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, \u0141., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241\u201352.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? \u2013 an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 \u2013 New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July\u2013December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1\u20132. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp.\u00a068\u201369, 127. ISBN\u00a0978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp.\u00a04\u20135. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p.\u00a07. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards \u2013 Mastering HTML5, CSS3, and XML. Apress. ISBN\u00a0978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBr\u00fcgger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol\u00a0\u2013 HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Br\u00fcgger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erd\u0151s Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" \u00b7 \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Pusk\u00e1s\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n\u00a0Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n"}], "default": ""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/31.json b/ElectronJS/tasks/31.json new file mode 100644 index 00000000..6f96c3c5 --- /dev/null +++ b/ElectronJS/tasks/31.json @@ -0,0 +1 @@ +{"id": 31, "name": "WIKI WWW", "url": "https://en.wikipedia.org/wiki/World_Wide_Web", "links": "https://en.wikipedia.org/wiki/World_Wide_Web", "containJudge": false, "desc": "https://en.wikipedia.org/wiki/World_Wide_Web", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://en.wikipedia.org/wiki/World_Wide_Web", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://en.wikipedia.org/wiki/World_Wide_Web"}], "outputParameters": [{"id": 0, "name": "para1_text", "desc": "", "type": "string", "exampleValue": "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages\u2014and to move from one web page to another through hyperlinks\u2014came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org \u2013 The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better\u00a0source\u00a0needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious \u2013 discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to w\u00e0n w\u00e9i w\u01ceng (\u4e07\u7ef4\u7f51), which satisfies www and literally means \"myriad-dimensional net\",[45][better\u00a0source\u00a0needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories \u2013 a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5\u00a0billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information\u2014such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations\u2014groups of interested and often competing parties chartered with the task of standardization\u2014not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC\u00a03986 allowed resources to be identified by URI in a subset of US-ASCII. RFC\u00a03987 allows more characters\u2014any character in the Universal Character Set\u2014and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52\u201358. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page\u00a0needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN\u00a0978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p.\u00a02. ISBN\u00a09780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN\u00a0978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN\u00a0978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript \u2013 The definitive guide (6\u00a0ed.). p.\u00a01. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification \u2013 W3C Recommendation \u2013 Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME \u2013 and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary\u00a0\u2013 Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press\u00a0\u2013 Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd\u00a0ed.). Beijing: O'Reilly. p.\u00a0264. ISBN\u00a0978-0596001728. OCLC\u00a049502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX\u00a010.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265\u2013269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11\u201314 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, \u0141., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241\u201352.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? \u2013 an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 \u2013 New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July\u2013December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1\u20132. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp.\u00a068\u201369, 127. ISBN\u00a0978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp.\u00a04\u20135. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p.\u00a07. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards \u2013 Mastering HTML5, CSS3, and XML. Apress. ISBN\u00a0978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBr\u00fcgger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol\u00a0\u2013 HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Br\u00fcgger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erd\u0151s Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" \u00b7 \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Pusk\u00e1s\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n\u00a0Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://en.wikipedia.org/wiki/World_Wide_Web", "links": "https://en.wikipedia.org/wiki/World_Wide_Web", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 3, "title": "Collect Data", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "para1_text", "desc": "", "relativeXpath": "/html/body/div[1]/div[1]/div[3]/main[1]/div[2]/div[3]/div[1]", "exampleValues": [{"num": 0, "value": "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages\u2014and to move from one web page to another through hyperlinks\u2014came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org \u2013 The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better\u00a0source\u00a0needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious \u2013 discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to w\u00e0n w\u00e9i w\u01ceng (\u4e07\u7ef4\u7f51), which satisfies www and literally means \"myriad-dimensional net\",[45][better\u00a0source\u00a0needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories \u2013 a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5\u00a0billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information\u2014such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations\u2014groups of interested and often competing parties chartered with the task of standardization\u2014not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC\u00a03986 allowed resources to be identified by URI in a subset of US-ASCII. RFC\u00a03987 allows more characters\u2014any character in the Universal Character Set\u2014and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52\u201358. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page\u00a0needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN\u00a0978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p.\u00a02. ISBN\u00a09780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN\u00a0978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN\u00a0978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript \u2013 The definitive guide (6\u00a0ed.). p.\u00a01. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification \u2013 W3C Recommendation \u2013 Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME \u2013 and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary\u00a0\u2013 Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press\u00a0\u2013 Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd\u00a0ed.). Beijing: O'Reilly. p.\u00a0264. ISBN\u00a0978-0596001728. OCLC\u00a049502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX\u00a010.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265\u2013269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11\u201314 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, \u0141., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241\u201352.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? \u2013 an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 \u2013 New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July\u2013December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1\u20132. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp.\u00a068\u201369, 127. ISBN\u00a0978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp.\u00a04\u20135. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p.\u00a07. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards \u2013 Mastering HTML5, CSS3, and XML. Apress. ISBN\u00a0978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBr\u00fcgger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol\u00a0\u2013 HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Br\u00fcgger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erd\u0151s Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" \u00b7 \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Pusk\u00e1s\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n\u00a0Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n"}], "default": ""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/32.json b/ElectronJS/tasks/32.json new file mode 100644 index 00000000..ec756dc2 --- /dev/null +++ b/ElectronJS/tasks/32.json @@ -0,0 +1 @@ +{"id":32,"name":"知乎_登录后采集","url":"https://www.zhihu.com","links":"https://www.zhihu.com","containJudge":false,"desc":"https://www.zhihu.com\n使用带用户配置的浏览器模式来先手工登录后保存信息,再接着执行。","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.zhihu.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.zhihu.com"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"string","exampleValue":"历史上有哪些通过“正当手段”干出不正当事的人物?"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.zhihu.com","links":"https://www.zhihu.com","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[3],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"scrollType":0,"scrollCount":0,"loopType":2,"pathList":"//*[contains(@class, \"css-0\")]/div[2]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[3]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[4]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[5]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[6]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[7]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[8]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[9]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[10]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[11]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[12]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[13]/div[1]/div[1]/div[1]/h2[1]/div[1]","textList":"","exitCount":0,"historyWait":2}},{"id":3,"index":3,"parentId":2,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"参数1_文本","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"历史上有哪些通过“正当手段”干出不正当事的人物?"},{"num":1,"value":"新加坡有哪些不好的地方?"},{"num":2,"value":"孙悟空可以秒杀山村老尸那样的厉鬼吗?"},{"num":3,"value":"为什么渐渐厌倦玩《原神》了?"},{"num":4,"value":"历史上有哪些著名的考古乌龙事件?"},{"num":5,"value":"苹果公司为什么能把用户调教得这么好?"},{"num":6,"value":"哪个瞬间让你发现了世界的bug?"},{"num":7,"value":"假如中国的院士,想为亲属谋体制内的工作,难度大吗?为什么?"},{"num":8,"value":"你一直珍藏的视频是哪个?"},{"num":9,"value":"如何评价《原神》角色艾莉丝?"},{"num":10,"value":"索罗斯如何做空的英镑、泰铢?为什么做空香港失败了?"},{"num":11,"value":"如何在婚前认清并杜绝王力宏这种男人?"}],"default":""}],"loopType":2}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/4.json b/ElectronJS/tasks/4.json index cdde29d0..69336470 100644 --- a/ElectronJS/tasks/4.json +++ b/ElectronJS/tasks/4.json @@ -1,52 +1 @@ -{ - "id": 4, - "name": "新web采集任务", - "url": "about:blank", - "links": "", - "containJudge": false, - "desc": "", - "inputParameters": [], - "outputParameters": [], - "graph": [ - { - "index": 0, - "id": 0, - "parentId": 0, - "type": -1, - "option": 0, - "title": "root", - "sequence": [ - 1 - ], - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "wait": 0 - }, - "isInLoop": false - }, - { - "id": 1, - "index": 1, - "parentId": 0, - "type": 0, - "option": 2, - "title": "点击元素", - "sequence": [], - "isInLoop": false, - "position": 0, - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [] - } - } - ] -} \ No newline at end of file +{"id": 4, "name": "\u5237\u70b9\u51fb\u91cf", "url": "https://www.bilibili.com", "links": "https://suzhoutaohuawu.com/", "containJudge": false, "desc": "https://suzhoutaohuawu.com/", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://suzhoutaohuawu.com/", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://suzhoutaohuawu.com/"}], "outputParameters": [], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 3, "url": "https://suzhoutaohuawu.com/", "links": "https://suzhoutaohuawu.com/", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 2, "parentId": 0, "type": 0, "option": 4, "title": "Input Text", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"nav-searchform\"]/div[1]/input[1]", "wait": 0, "value": "ii"}}, {"id": -1, "index": 3, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//*[@id=\"nav-searchform\"]/div[2]/svg[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 4, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [5], "isInLoop": false, "position": 3, "parameters": {"history": 2, "tabIndex": 1, "useLoop": false, "xpath": "/html/body/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 5, "parentId": 4, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 2, "tabIndex": 1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "DJSODA\u6027\u611f\u571f\u55e8\ud83d\ude0d\ud83d\ude18\ud83d\udc95\u2764\ufe0f\ud83e\udde1\ud83d\udc9b\ud83d\udc9a\ud83d\udc99\ud83d\udc9c\ud83d\udc97"}, {"num": 1, "value": "\u5173\u4e8e\u73b0\u89c6\u7814\u6b63\u786e\u6253\u5f00\u59ff\u52bf\u7684\u53e6\u4e00\u53ef\u80fd\u6027"}, {"num": 2, "value": "DEMO-\u5468\u6770\u4f26"}, {"num": 3, "value": "\u30104K\u3011\u624b\u673a\u548c\u76f8\u673a\u5982\u4f55\u9ad8\u97f3\u8d28\u76f4\u64adR\u00d8DECasterPro\u76f4\u64ad\u6848\u4f8b\u3010\u8d75\u541b\u65e5\u8bb0Vlog154\u3011"}, {"num": 4, "value": "\u7528\u53e4\u8463Apple\u4e0a\u7f51\u3001\u5237\u8d34\u5427\uff01"}, {"num": 5, "value": "\u9694\u5c4f\u75bc\uff012\u5c81\u5a03\u88ab1\u7897\u6ce1\u9762\u81f4\u6df1\u5ea6\u70eb\u4f24\uff0c\u5bb6\u4eba\u5904\u7406\u65b9\u5f0f\u4ee4\u533b\u751f\u53f9\u606f"}, {"num": 6, "value": "\u30104K\u6cbb\u6108\u3011\u771f\u5b9e\u5b58\u5728\u7684\u52a8\u6f2b\u573a\u666f\uff0c\u5728\u65b0\u7586\uff01\u300a\u4f0a\u7281\u7684\u7ae5\u8bdd\uff1a\u9e70\u7684\u56fd\u300b"}, {"num": 7, "value": "\u3010\u9ad8\u4e2d\u7269\u7406\u3011\uff08\u8001\u6559\u6750\uff09\u7535\u5b66\u7bc7\uff0850\u5c0f\u65f6\u5b66\u5b8c\u9ad8\u4e2d\u7269\u7406\u7cfb\u5217\uff09"}, {"num": 8, "value": "\u4f60\u4e00\u5b9a\u542c\u8fc7\u7684\u300aJade\u300b\u4e3b\u6253\u6b4c\u4e28\u4f60\u6709\u5fc3"}, {"num": 9, "value": "\u4ed6\u7684\u6bcf\u4e2a\u773c\u795e\u90fd\u5199\u6ee1\u4e86\u7231\u4f60\uff0c\u4f60\u53c8\u600e\u4e48\u820d\u5f97\u8ba9\u4ed6\u96be\u8fc7\uff01\uff01\uff01\u7a46\u5ddd\u773c\u795e\u5408\u96c6"}, {"num": 10, "value": "\u9632\u66b4\u5229\u5668\u2014\u4e16\u754c\u8b66\u7528\u9632\u66b4\u88c5\u7532\u8f66\u5927\u76d8\u70b9#\u9632\u66b4\u8f66#SWAT#\u5251\u9f7f\u864e"}, {"num": 11, "value": "\u5730\u8868\u6700\u5f3a\u201c\u7269\u7406\u9ed1\u5ba2\u201d\u5728\u7ebf\u8d85\u5ea6!!\uff01\u3010WATCHDOGS-\u6700\u9a9a\u9ed1\u5ba2\u3011"}, {"num": 12, "value": "\u3010\u719f\u8089\u30116\u5206\u949f\u542c\u5b8c31\u4f4d\u97f3\u4e50\u5bb6\u768452\u9996\u53e4\u5178\u97f3\u4e50_\u7b2c\u4e8c\u5b63\u53e4\u5178\u97f3\u4e50\u6df7\u642d_ClassicalMusicMashup"}, {"num": 13, "value": "\u26a1\ufe0f\u5764\u5764\u5965\u7279\u66fc\u26a1\ufe0f"}, {"num": 14, "value": "\u25c8\u9ed1\u6267\u4e8b\u25aa\ufe0e\ud835\udd6e\ud835\udd8d\ud835\udd8e\ud835\udd91\ud835\udd89\ud835\udd97\ud835\udd8a\ud835\udd93\ud835\udd7a\ud835\udd8b\ud835\udd7f\ud835\udd8d\ud835\udd8a\ud835\udd6e\ud835\udd94\ud835\udd97\ud835\udd93\u25c8"}, {"num": 15, "value": "\u5f53\u4e00\u540d\u91d1\u5c5e\u9f13\u624b\u8feb\u4e8e\u751f\u8ba1\u4e0d\u5f97\u4e0d\u7ed9\u513f\u6b4c\u4f34\u594f\u65f6"}, {"num": 16, "value": "\u8857\u5934\u9738\u738b\uff5e\u8df3\u7ef3"}, {"num": 17, "value": "\u560e\u72fc"}, {"num": 18, "value": "\u3010\u8bd5\u8bd5\u5c31\u901d\u4e16\u3011\u6781\u5ea6\u8212\u9002\u8001\u9f20\u53bb\u4e16\u5408\u96c6\uff08\uff09"}, {"num": 19, "value": "\u3010\u5f71\u89c6\u89e3\u8bf4\u3011\u5927\u5e7b\u672f\u5e08\uff1a2022\u5e74\u94b1\u5c0f\u8c6a\u65b0\u4f5c\uff0c\u5e7b\u672f\u5347\u7ea7\u8c1c\u6848\u91cd\u91cd\uff0c\u795e\u79d8\u51f6\u624b\u7adf\u7528\u6cd5\u672f\u6740\u4eba"}, {"num": 20, "value": "\u3010\u8981\u4e0d\u8981\u6765\u6761\u5c3e\u5df4\uff1f\u3011-Furtail\u7535\u52a8\u4f53\u611f\u5c3e\u5df4"}, {"num": 21, "value": "\u5f90\u4e50\u540c\u300a\u56de\u5bb6\u4e4b\u8def(\u300a\u72ec\u884c\u6708\u7403\u300b\u7535\u5f71\u63d2\u66f2)\u300b"}, {"num": 22, "value": "[\u5b9e\u6559]\u559c\u6b22\u4e00\u4e2a\u4eba\u7684\u773c\u795e\u662f\u85cf\u4e0d\u4f4f\u7684\uff01\u8f7b\u4e95\u6cfd\u7684\u773c\u795e\u53d8\u5316\u5408\u96c6"}, {"num": 23, "value": "\u3010\u8bf7\u56de\u7b541988\u3011\u4e00\u7b11\u61f8\u547d\u6bcf\u5929\u4e00\u904d\u9632\u6b62\u6291\u90c1"}, {"num": 24, "value": "\u7ebd\u7ea6\uff5c\u56e0\u4e3a\u68a6\u60f3\u548c\u81ea\u7531"}, {"num": 25, "value": "\u3010\u5728\u4e0b\u841d\u8389\u63a7\u3011labo\u62c6\u7bb1\uff06\u8bd5\u73a9"}, {"num": 26, "value": "\u7b2c94\u96c6TED\u539f\u58f0\u8ddf\u8bfb\u7b14\u8bb0\u4eba\u7684\u4e00\u751f\uff0c\u5176\u5b9e\u53ea\u67099\u5e74\uff08\u89c6\u9891\u7b14\u8bb0\u7248\uff09"}, {"num": 27, "value": "\u3010\u56fd\u4ea7\u3011\u5728\u52fe\u5f15\u4e2d\u5b66\u4f1a\u72312017\u3010\u7b2c\u4e00\u81f3\u56db\u96c6\u3011"}, {"num": 28, "value": "\u300aDEEMO\u300b\u6982\u5ff5\u524d\u5bfc\u7247"}, {"num": 29, "value": "\u519b\u8ff7\u5708\u90a3\u4e9b\u8da3\u56fe-\u6c49\u65af\u7bc7"}, {"num": 30, "value": "\u5f20\u53d4\u5e73\uff1a\u4e0d\u8ba9\u68b3\u5e73\uff0c\u5c31\u68b3\u70b8\u3002\u4e11\u4e0d\u5230\u4f60\u7b97\u6211\u8f93\uff01\u9ec4\u5955/\u4f55\u6da6\u4e1c/\u79e6\u5c9a/\u9648\u51a0\u9716/\u6768\u854a/\u90d1\u56fd\u9716/\u9648\u6021\u84c9/\u51af\u7ecd\u5cf0\u300a\u98ce\u4e912\u300b"}, {"num": 31, "value": "\u65b0\u4eba\u5feb\u901f\u8fdb\u9636\uff01\u7d20\u7ec4\u9ad8\u8fbe\u73a9\u65e7\u5316\uff01\u8fea\u53d4\u6210\u578b\u8272\u9a6c\u514b\u7b14\u62df\u771f\u65e7\u5316\u5927\u6311\u6218\u4e4bSDBBZAKU\u590f\u4e9a\u7ea2\u624e\u53e4\u5927\u795e\u5c0f\u8bfe\u5802"}, {"num": 32, "value": "\u3010\u610f\u5883\u5411\u3011Dreamspt."}, {"num": 33, "value": "\u5c0f\u5b66\u751f\uff1a??"}, {"num": 34, "value": "\u5341\u5e74\u524d\u90a3\u4e9b\u4e0d\u7528\u6c2a\u91d1\u7684\u624b\u6e38\uff0c\u5230\u5e95\u6709\u591a\u4e48\u4e0a\u5934\uff1f\u3010\u627e\u6e38\u5de5\u5177\u4eba01\u3011"}, {"num": 35, "value": "\u3010\u9706\u5cf0\u00b7\u53cb\u8c0a\u5411\u3011\u4e0d\u6015\u80d6\u91cc\u5c31\u6233\u8fdb\u6765\u4e0d\u751c\u4e0d\u8981\u94b1"}, {"num": 36, "value": "1991\u5e74\u4f0a\u4e3d\u838e\u767d\u4e8c\u4e16\u5728\u7f8e\u56fd\u4f1a\u6f14\u8bb2QueenElizabethAddresstoCongress(1991)"}, {"num": 37, "value": "\u30104K60\u5e27\u3011\u68ee\u9ad8\u5343\u91cc-\u898b\u3066(LOOK)[\u898b\u3066\u30b9\u30da\u30b7\u30e3\u30eb\uff5e\u30e9\u30a4\u30f4in\u6c50\u7559PIT4.15.\u201989]AI\u4fee\u590d"}, {"num": 38, "value": "\u53e4\u5ddd\u96c4\u8f89\u4e28\u4ed6\u8bf4\u82f1\u6587\u65f6\u771f\u7684\u597d\u8ff7\u4eba\u542c\u53e4\u5ddd\u7537\u795e\u7684\u6d41\u5229\u82f1\u6587"}, {"num": 39, "value": "\u7b2c87\u96c6\u6cb9\u7ba13000\u4e07\u64ad\u653e\u91cf\u6f14\u8bb2\u505a\u4eba\u4e00\u5b9a\u8981\u575a\u6301\uff01(\u89c6\u9891\u7b14\u8bb0\u7248)"}, {"num": 40, "value": "\u5c45\u7136\u771f\u6709\u4eba\u628a\u865a\u5047\u5ba3\u4f20\u5e7f\u544a\u505a\u6210\u6e38\u620f\u4e86\uff1f\uff1f\uff1f\u3010\u627e\u6e38\u5de5\u5177\u4eba16\u3011"}, {"num": 41, "value": "\u3010\u4e00\u955c\u5230\u5e95\u3011\u8d76\u4e0a\u5154\u5154\u9996\u53d1\u8f66\uff01\u5168\u7f51\u6700\u5feb\u6700\u7f8eTWICE-TalkthatTalk\u5168\u66f2\u7ffb\u8df3|Kpop\u7ffb\u8df3|byChannel"}], "default": ""}, {"nodeType": 0, "contentType": 1, "relative": true, "name": "\u53c2\u65702_\u6587\u672c", "desc": "", "relativeXpath": "/em[1]", "exampleValues": [{"num": 0, "value": "II"}, {"num": 1, "value": "II"}, {"num": 2, "value": "II"}, {"num": 3, "value": "II"}, {"num": 4, "value": "II"}, {"num": 5, "value": "II"}, {"num": 6, "value": "II"}, {"num": 7, "value": "II"}, {"num": 8, "value": "II"}, {"num": 9, "value": "II"}, {"num": 10, "value": "II"}, {"num": 11, "value": "II"}, {"num": 12, "value": "II"}, {"num": 13, "value": "II"}, {"num": 14, "value": "II"}, {"num": 15, "value": "II"}, {"num": 16, "value": "II"}, {"num": 17, "value": "II"}, {"num": 18, "value": "II"}, {"num": 19, "value": "II"}, {"num": 20, "value": "II"}, {"num": 21, "value": "II"}, {"num": 22, "value": "II"}, {"num": 23, "value": "II"}, {"num": 24, "value": "II"}, {"num": 25, "value": "ii"}, {"num": 26, "value": "II"}, {"num": 27, "value": "II"}, {"num": 28, "value": "II"}, {"num": 29, "value": "II"}, {"num": 30, "value": "II"}, {"num": 31, "value": "II"}, {"num": 32, "value": "II"}, {"num": 33, "value": "ii"}, {"num": 34, "value": "II"}, {"num": 35, "value": "II"}, {"num": 36, "value": "II"}, {"num": 37, "value": "II"}, {"num": 38, "value": "II"}, {"num": 39, "value": "II"}, {"num": 40, "value": "II"}, {"num": 41, "value": "II"}], "default": ""}], "loopType": 1}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/5.json b/ElectronJS/tasks/5.json index a9d3191b..e1f8da70 100644 --- a/ElectronJS/tasks/5.json +++ b/ElectronJS/tasks/5.json @@ -1,740 +1 @@ -{ - "id": 5, - "name": "eBay Names and Link Addresses - demo", - "url": "https://www.ebay.com", - "links": "https://www.ebay.com", - "containJudge": false, - "desc": "https://www.ebay.com\neBay Names and Link Addresses - demo", - "inputParameters": [ - { - "id": 0, - "name": "urlList_0", - "nodeId": 1, - "nodeName": "Open Page", - "value": "https://www.ebay.com", - "desc": "List of URLs to be collected, separated by \\n for multiple lines", - "type": "string", - "exampleValue": "https://www.ebay.com" - }, - { - "id": 1, - "name": "inputText_1", - "nodeName": "Input Text", - "nodeId": 2, - "desc": "The text to be entered, such as 'computer' at eBay search box", - "type": "string", - "exampleValue": "iPhone", - "value": "iPhone" - }, - { - "id": 2, - "name": "loopTimes_Loop Click Next Page_2", - "nodeId": 4, - "nodeName": "Loop Click Next Page", - "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", - "type": "int", - "exampleValue": 0, - "value": 0 - } - ], - "outputParameters": [ - { - "id": 0, - "name": "Name", - "desc": "", - "type": "string", - "exampleValue": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "id": 1, - "name": "Link Address", - "desc": "", - "type": "string", - "exampleValue": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - } - ], - "graph": [ - { - "index": 0, - "id": 0, - "parentId": 0, - "type": -1, - "option": 0, - "title": "root", - "sequence": [ - 1, - 2, - 3, - 4 - ], - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "wait": 0 - }, - "isInLoop": false - }, - { - "id": 1, - "index": 1, - "parentId": 0, - "type": 0, - "option": 1, - "title": "Open Page", - "sequence": [ ], - "isInLoop": false, - "position": 0, - "parameters": { - "useLoop": false, - "xpath": "", - "wait": 0, - "url": "https://www.ebay.com", - "links": "https://www.ebay.com", - "scrollType": 0, - "scrollCount": 0 - } - }, - { - "id": 2, - "index": 2, - "parentId": 0, - "type": 0, - "option": 4, - "title": "Input Text", - "sequence": [ ], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-ac\"]", - "wait": 0, - "value": "iPhone" - } - }, - { - "id": 3, - "index": 3, - "parentId": 0, - "type": 0, - "option": 2, - "title": "Click Element", - "sequence": [ ], - "isInLoop": false, - "position": 2, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[@id=\"gh-btn\"]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [ ] - } - }, - { - "id": 4, - "index": 4, - "parentId": 0, - "type": 1, - "option": 8, - "title": "Loop Click Next Page", - "sequence": [ - 6, - 5 - ], - "isInLoop": false, - "position": 3, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 0, - "pathList": "", - "textList": "", - "exitCount": 0, - "historyWait": 2 - } - }, - { - "id": 6, - "index": 5, - "parentId": 4, - "type": 0, - "option": 2, - "title": "Click Next", - "sequence": [ ], - "isInLoop": true, - "position": 1, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": true, - "xpath": "//*[contains(@class, \"pagination__next\")]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "paras": [ ], - "loopType": 0 - } - }, - { - "id": 5, - "index": 6, - "parentId": 4, - "type": 1, - "option": 8, - "title": "Loop Collection", - "sequence": [ - 7 - ], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", - "wait": 0, - "scrollType": 0, - "scrollCount": 0, - "loopType": 1, - "pathList": "", - "textList": "", - "exitCount": 0, - "historyWait": 2 - } - }, - { - "id": 7, - "index": 7, - "parentId": 5, - "type": 0, - "option": 3, - "title": "Collect Data", - "sequence": [ ], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 7, - "tabIndex": -1, - "useLoop": false, - "xpath": "", - "wait": 0, - "paras": [ - { - "nodeType": 1, - "contentType": 0, - "relative": true, - "name": "Name", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" - }, - { - "num": 1, - "value": "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 2, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab" - }, - { - "num": 3, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 4, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 5, - "value": "Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab" - }, - { - "num": 6, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 7, - "value": "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab" - }, - { - "num": 8, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" - }, - { - "num": 9, - "value": "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab" - }, - { - "num": 10, - "value": "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 11, - "value": "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab" - }, - { - "num": 12, - "value": "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 13, - "value": "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab" - }, - { - "num": 14, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab" - }, - { - "num": 15, - "value": "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab" - }, - { - "num": 16, - "value": "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab" - }, - { - "num": 17, - "value": "iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab" - }, - { - "num": 18, - "value": "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" - }, - { - "num": 19, - "value": "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab" - }, - { - "num": 20, - "value": "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 21, - "value": "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 22, - "value": "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" - }, - { - "num": 23, - "value": "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab" - }, - { - "num": 24, - "value": "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab" - }, - { - "num": 25, - "value": "Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab" - }, - { - "num": 26, - "value": "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab" - }, - { - "num": 27, - "value": "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab" - }, - { - "num": 28, - "value": "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab" - }, - { - "num": 29, - "value": "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab" - }, - { - "num": 30, - "value": "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 31, - "value": "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab" - }, - { - "num": 32, - "value": "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 33, - "value": "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab" - }, - { - "num": 34, - "value": "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 35, - "value": "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab" - }, - { - "num": 36, - "value": "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" - }, - { - "num": 37, - "value": "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab" - }, - { - "num": 38, - "value": "iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab" - }, - { - "num": 39, - "value": "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab" - }, - { - "num": 40, - "value": "New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab" - }, - { - "num": 41, - "value": "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 42, - "value": "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab" - }, - { - "num": 43, - "value": "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab" - }, - { - "num": 44, - "value": "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 45, - "value": "Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab" - }, - { - "num": 46, - "value": "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" - }, - { - "num": 47, - "value": "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 48, - "value": "Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab" - }, - { - "num": 49, - "value": "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab" - }, - { - "num": 50, - "value": "Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab" - }, - { - "num": 51, - "value": "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 52, - "value": "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab" - }, - { - "num": 53, - "value": "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 54, - "value": "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab" - }, - { - "num": 55, - "value": "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" - }, - { - "num": 56, - "value": "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab" - }, - { - "num": 57, - "value": "Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab" - }, - { - "num": 58, - "value": "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab" - }, - { - "num": 59, - "value": "New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab" - } - ], - "default": "" - }, - { - "nodeType": 2, - "contentType": 0, - "relative": true, - "name": "Link Address", - "desc": "", - "relativeXpath": "", - "exampleValues": [ - { - "num": 0, - "value": "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 1, - "value": "https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 2, - "value": "https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh" - }, - { - "num": 3, - "value": "https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 4, - "value": "https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 5, - "value": "https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 6, - "value": "https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 7, - "value": "https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 8, - "value": "https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 9, - "value": "https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 10, - "value": "https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 11, - "value": "https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 12, - "value": "https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ" - }, - { - "num": 13, - "value": "https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 14, - "value": "https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh" - }, - { - "num": 15, - "value": "https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 16, - "value": "https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 17, - "value": "https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 18, - "value": "https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 19, - "value": "https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 20, - "value": "https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 21, - "value": "https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 22, - "value": "https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 23, - "value": "https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 24, - "value": "https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 25, - "value": "https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 26, - "value": "https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 27, - "value": "https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" - }, - { - "num": 28, - "value": "https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 29, - "value": "https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 30, - "value": "https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 31, - "value": "https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh" - }, - { - "num": 32, - "value": "https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 33, - "value": "https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 34, - "value": "https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 35, - "value": "https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 36, - "value": "https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 37, - "value": "https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 38, - "value": "https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 39, - "value": "https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh" - }, - { - "num": 40, - "value": "https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 41, - "value": "https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 42, - "value": "https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 43, - "value": "https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 44, - "value": "https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 45, - "value": "https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 46, - "value": "https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 47, - "value": "https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ" - }, - { - "num": 48, - "value": "https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 49, - "value": "https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 50, - "value": "https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 51, - "value": "https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 52, - "value": "https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 53, - "value": "https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 54, - "value": "https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 55, - "value": "https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 56, - "value": "https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 57, - "value": "https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" - }, - { - "num": 58, - "value": "https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh" - }, - { - "num": 59, - "value": "https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh" - } - ], - "default": "" - } - ], - "loopType": 1 - } - } - ] -} \ No newline at end of file +{"id": 5, "name": "jjwxc", "url": "https://www.jjwxc.com", "links": "https://www.jjwxc.com", "containJudge": false, "desc": "https://www.jjwxc.com", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://www.jjwxc.com", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://www.jjwxc.com"}], "outputParameters": [{"id": 0, "name": "\u53c2\u65702_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u300a\u4e71\u5c18\u4e4b\u98ce\u300b\u00a0"}, {"id": 1, "name": "\u53c2\u65703_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://www.jjwxc.net/onebook.php?novelid=90001"}, {"id": 2, "name": "\u53c2\u65704_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u60a6\u4e59"}, {"id": 3, "name": "\u53c2\u65705_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://www.jjwxc.net/oneauthor.php?authorid=46931"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 4], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.jjwxc.com", "links": "https://www.jjwxc.com", "scrollType": 0, "scrollCount": 0}}, {"id": -1, "index": 2, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[4]/div[2]/div[1]/div[3]/div[1]/ul[1]/li", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 3, "parentId": 2, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [], "loopType": 1}}, {"id": 2, "index": 4, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [5], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[4]/div[2]/div[1]/div[3]/div[1]/ul[1]/li", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 3, "index": 5, "parentId": 2, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65702_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "/a[1]", "exampleValues": [{"num": 0, "value": "\u300a\u4e71\u5c18\u4e4b\u98ce\u300b\u00a0"}, {"num": 1, "value": "\u300a\u597d\u5c71\u597d\u6c34\u597d\u82b1\u513f\uff08\u65b0\u7bc7\u300b\u00a0"}, {"num": 2, "value": "\u300a\u70c8\u706b\u5982\u6b4cI\u300b\u00a0"}, {"num": 3, "value": "\u300a\u5927\u5510\u664b\u9633\u516c\u4e3b\u300b\u00a0"}, {"num": 4, "value": "\u300a\u9b54\u9b3c\u7684\u4f53\u6e29\u300b\u00a0"}, {"num": 5, "value": "\u300a\u4e0d\u65ad\u4f5c\u6b7b\u540e\u6211\u6210\u4e86\u767d\u6708\u300b\u00a0"}, {"num": 6, "value": "\u300a\u4f55\u5904\u6696\u9633\u4e0d\u503e\u57ce\u300b\u00a0"}, {"num": 7, "value": "\u300a\u6709\u532a\u300b\u00a0"}, {"num": 8, "value": "\u300a\u730e\u4eba\u540c\u4eba-\u65e0\u5904\u4e0d\u5728\u300b\u00a0"}, {"num": 9, "value": "\u300a\u4eba\u4e0d\u53ef\u8c8c\u76f8\u300b\u00a0"}, {"num": 10, "value": "\u300a\u6bcf\u65e5\u4e00\u8868\u767d\u300b\u00a0"}, {"num": 11, "value": "\u300a[\u7efc\u82f1\u7f8e]App\u4e0d\u80fd\u300b\u00a0"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65703_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "/a[1]", "exampleValues": [{"num": 0, "value": "https://www.jjwxc.net/onebook.php?novelid=90001"}, {"num": 1, "value": "https://www.jjwxc.net/onebook.php?novelid=42195"}, {"num": 2, "value": "https://www.jjwxc.net/onebook.php?novelid=487"}, {"num": 3, "value": "https://www.jjwxc.net/onebook.php?novelid=2419670"}, {"num": 4, "value": "https://www.jjwxc.net/onebook.php?novelid=3945423"}, {"num": 5, "value": "https://www.jjwxc.net/onebook.php?novelid=4682400"}, {"num": 6, "value": "https://www.jjwxc.net/onebook.php?novelid=2089609"}, {"num": 7, "value": "https://www.jjwxc.net/onebook.php?novelid=2595385"}, {"num": 8, "value": "https://www.jjwxc.net/onebook.php?novelid=439197"}, {"num": 9, "value": "https://www.jjwxc.net/onebook.php?novelid=3109031"}, {"num": 10, "value": "https://www.jjwxc.net/onebook.php?novelid=1639058"}, {"num": 11, "value": "https://www.jjwxc.net/onebook.php?novelid=2820411"}], "default": ""}, {"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65704_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "/a[2]", "exampleValues": [{"num": 0, "value": "\u60a6\u4e59"}, {"num": 1, "value": "ane"}, {"num": 2, "value": "\u660e\u6653\u6eaa"}, {"num": 3, "value": "\u9c7c\u4e03\u5f69"}, {"num": 4, "value": "\u85e4\u841d\u4e3a\u679d"}, {"num": 5, "value": "\u7eaa\u5a74"}, {"num": 6, "value": "\u5317\u503e"}, {"num": 7, "value": "priest"}, {"num": 8, "value": "\u82b1\u547d\u7f57"}, {"num": 9, "value": "\u6708\u4e0b\u8776\u5f71"}, {"num": 10, "value": "\u6816\u89c1"}, {"num": 11, "value": "Ventisca"}], "default": ""}, {"nodeType": 2, "contentType": 0, "relative": true, "name": "\u53c2\u65705_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "/a[2]", "exampleValues": [{"num": 0, "value": "https://www.jjwxc.net/oneauthor.php?authorid=46931"}, {"num": 1, "value": "https://www.jjwxc.net/oneauthor.php?authorid=10396"}, {"num": 2, "value": "https://www.jjwxc.net/oneauthor.php?authorid=32"}, {"num": 3, "value": "https://www.jjwxc.net/oneauthor.php?authorid=711837"}, {"num": 4, "value": "https://www.jjwxc.net/oneauthor.php?authorid=2071925"}, {"num": 5, "value": "https://www.jjwxc.net/oneauthor.php?authorid=2222864"}, {"num": 6, "value": "https://www.jjwxc.net/oneauthor.php?authorid=719966"}, {"num": 7, "value": "https://www.jjwxc.net/oneauthor.php?authorid=145956"}, {"num": 8, "value": "https://www.jjwxc.net/oneauthor.php?authorid=319139"}, {"num": 9, "value": "https://www.jjwxc.net/oneauthor.php?authorid=321503"}, {"num": 10, "value": "https://www.jjwxc.net/oneauthor.php?authorid=585107"}, {"num": 11, "value": "https://www.jjwxc.net/oneauthor.php?authorid=898115"}], "default": ""}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/6.json b/ElectronJS/tasks/6.json index e547d62e..446ac86e 100644 --- a/ElectronJS/tasks/6.json +++ b/ElectronJS/tasks/6.json @@ -1 +1 @@ -{"id":6,"name":"asdf1","url":"about:blank","links":"","containJudge":false,"desc":"asdf","inputParameters":[{"id":0,"name":"inputText_0","nodeName":"输入文字","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"string","exampleValue":"","value":""}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"value":""}},{"id":-1,"index":3,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"scrollType":0,"scrollCount":0,"loopType":0,"pathList":"","textList":"","exitCount":0,"historyWait":2}},{"id":-1,"index":4,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"value":""}}]} \ No newline at end of file +{"id": 6, "name": "toutiao_authors", "url": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0", "links": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0", "containJudge": false, "desc": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 2, "nodeName": "Open Page", "value": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0"}, {"id": 1, "name": "loopTimes_Loop_Click_1", "nodeId": 5, "nodeName": "Loop_Click", "desc": "\u5faa\u73afLoop_Click\u6267\u884c\u7684\u6b21\u6570\uff080\u4ee3\u8868\u65e0\u9650\u5faa\u73af\uff09", "type": "int", "exampleValue": 5, "value": 5}], "outputParameters": [{"id": 0, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u7ecf\u5e38\u6234\u8033\u673a\u5371\u5bb3 - \u8bed\u97f3\u79d1\u666e - \u535a\u79be\u533b\u751f"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [2, 5], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": -1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://www.jd.com", "links": "https://www.jd.com", "scrollType": 0, "scrollCount": 0}}, {"id": 1, "index": 2, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 5, "url": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0", "links": "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=\u957f\u671f\u6234\u8033\u673a\u542c\u97f3\u4e50\u4f1a\u600e\u6837?\u6216\u8bb8\u4f1a\u9020\u6210\u8033\u804b\uff0c\u4e14\u5f88\u96be\u6062\u590d&pd=synthesis&action_type=pagination&page_num=0", "scrollType": 0, "scrollCount": 0}}, {"id": 3, "index": 3, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [4], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "//div[contains(@class, \"cs-source\")]//span[contains(@class, 'text-ellipsis')][1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 5, "index": 4, "parentId": 3, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 1, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u94fe\u63a5\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "\u7ecf\u5e38\u6234\u8033\u673a\u5371\u5bb3 - \u8bed\u97f3\u79d1\u666e - \u535a\u79be\u533b\u751f"}, {"num": 1, "value": "\u7ecf\u5e38\u6234\u8033\u673a\u6709\u4ec0\u4e48\u5371\u5bb3 - \u535a\u79be\u5fae\u89c6 - \u535a\u79be\u533b\u751f"}, {"num": 2, "value": "\u7ecf\u5e38\u6234\u8033\u673a\u8033\u6735\u4f1a\u4e0d\u4f1a\u804b - \u4e13\u5bb6\u6587\u7ae0 - \u535a\u79be\u533b\u751f"}, {"num": 3, "value": "\u957f\u65f6\u95f4\u6234\u8033\u673a\u542c\u6b4c\u6216\u81f4\u8033\u804b-\u540d\u533b\u5728\u7ebf\u7f51"}], "default": ""}], "loopType": 1}}, {"id": 2, "index": 5, "parentId": 0, "type": 1, "option": 8, "title": "Loop_Click", "sequence": [3, 6], "isInLoop": false, "position": 1, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "//span[contains(text(), \"\u4e0b\u4e00\u9875\")]/../..", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 5, "historyWait": 2}}, {"id": 4, "index": 6, "parentId": 2, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 5, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"s-dom-f0607f20\"]/div[1]/div[1]/a[7]", "wait": 0, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/7.json b/ElectronJS/tasks/7.json new file mode 100644 index 00000000..c3eee3f0 --- /dev/null +++ b/ElectronJS/tasks/7.json @@ -0,0 +1 @@ +{"id": 7, "name": "toutiao_author_desc", "url": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", "links": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u56fd\u5bb6\u53cd\u8bc8\u4e2d\u5fc3&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5149\u660e\u7f51&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", "containJudge": false, "desc": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u56fd\u5bb6\u53cd\u8bc8\u4e2d\u5fc3&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5149\u660e\u7f51&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", "desc": "\u8981\u91c7\u96c6\u7684\u7f51\u5740\u5217\u8868,\u591a\u884c\u4ee5\\n\u5206\u5f00", "type": "string", "exampleValue": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u56fd\u5bb6\u53cd\u8bc8\u4e2d\u5fc3&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5149\u660e\u7f51&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media"}], "outputParameters": [{"id": 0, "name": "\u53c2\u65702_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u7b80\u4ecb\uff1a\u5173\u6ce8\u5c0f\u8377\u533b\u5178\uff0c\u83b7\u53d6\u201c\u6743\u5a01\u3001\u79d1\u5b66\u3001\u5b9e\u7528\u3001\u6613\u61c2\u201d\u7684\u533b\u5b66\u4fe1\u606f"}, {"id": 1, "name": "\u53c2\u65703_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "63.3\u4e07\u83b7\u8d5e"}, {"id": 2, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u5c0f\u8377\u533b\u5178"}, {"id": 3, "name": "\u53c2\u65701_\u94fe\u63a5\u5730\u5740", "desc": "", "type": "string", "exampleValue": "https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2, 5], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 3, "url": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", "links": "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5c0f\u8377\u533b\u5178&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u56fd\u5bb6\u53cd\u8bc8\u4e2d\u5fc3&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=\u5149\u660e\u7f51&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 5, "tabIndex": -1, "useLoop": false, "xpath": "//a[contains(@class, 'flex-row')][1]", "wait": 2, "scrollType": 0, "scrollCount": 0, "paras": []}}, {"id": -1, "index": 3, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [4], "isInLoop": false, "position": 2, "parameters": {"history": 1, "tabIndex": 1, "useLoop": false, "xpath": "/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/button", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 4, "parentId": 3, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 1, "tabIndex": 1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "63.3\u4e07\u83b7\u8d5e"}, {"num": 1, "value": "10.3\u4e07\u7c89\u4e1d"}, {"num": 2, "value": "5\u5173\u6ce8"}], "default": ""}], "loopType": 1}}, {"id": 3, "index": 5, "parentId": 0, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": false, "position": 2, "parameters": {"history": 1, "tabIndex": 1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": false, "name": "\u53c2\u65702_\u6587\u672c", "desc": "", "relativeXpath": "//p[contains(@class, 'user-desc')]", "exampleValues": [{"num": 0, "value": "\u7b80\u4ecb\uff1a\u5173\u6ce8\u5c0f\u8377\u533b\u5178\uff0c\u83b7\u53d6\u201c\u6743\u5a01\u3001\u79d1\u5b66\u3001\u5b9e\u7528\u3001\u6613\u61c2\u201d\u7684\u533b\u5b66\u4fe1\u606f"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "\u53c2\u65703_\u6587\u672c", "desc": "", "relativeXpath": "//div[contains(@class, 'relation-stat')]", "exampleValues": [{"num": 0, "value": "63.3\u4e07\u83b7\u8d5e"}], "default": ""}, {"nodeType": 0, "contentType": 0, "relative": false, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "relativeXpath": "//div[contains(@class, 'detail')]//span[contains(@class, 'name')]", "exampleValues": [{"num": 0, "value": "\u5c0f\u8377\u533b\u5178"}]}, {"nodeType": 2, "contentType": 0, "relative": false, "name": "\u53c2\u65701_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "//a[@class=\"avatar\"]", "exampleValues": [{"num": 0, "value": "https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile"}]}]}}, {"id": -1, "index": 6, "parentId": 0, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": false, "position": 1, "parameters": {"history": 5, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 2, "contentType": 0, "relative": false, "name": "\u53c2\u65706_\u94fe\u63a5\u5730\u5740", "desc": "", "relativeXpath": "//a[contains(@class, 'flex-row')][1]", "exampleValues": [{"num": 0, "value": "https://so.toutiao.com/search/jump?url=https%3A%2F%2Fwww.toutiao.com%2Fc%2Fuser%2F95347840570%2F&aid=4916&jtoken=804fb410ca0c16fb0980b0a082d0c707d7ae7fb539575218f9e98534f7a9a598c00b8d749a4eb8859d5df7b1b0a122356b0b56810577c9f74a5faf9d6c18f340"}], "default": ""}]}}]} \ No newline at end of file diff --git a/Examples/Sample Tasks/services.js b/Examples/Sample Tasks/services.js new file mode 100644 index 00000000..6ce3330a --- /dev/null +++ b/Examples/Sample Tasks/services.js @@ -0,0 +1,69548 @@ +db.getCollection("services").insert( { + _id: ObjectId("6321ac335fe056c0e300cd0c"), + containJudge: false, + desc: "https://www.bilibili.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.bilibili.com", + links: "https://www.bilibili.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[1]/input[1]", + wait: NumberInt("0"), + value: "卢本伟" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[2]", + wait: NumberInt("3"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop click next page", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"i_cecream\"]/div/div[2]/div[2]/div/div/div[3]/div/div/button[10]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[@id=\"i_cecream\"]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/button[10]", + wait: NumberInt("4"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "/div[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 正在缓冲...\n \n \n \n \n \n 获取视频参数...\n [成功]\n \n \n \n \n 播放器初始化...\n [成功]\n 3.16.0-9b97d64a\n \n \n \n 获取播放地址...\n [成功]\n \n \n \n \n 加载视频信息...\n [成功]\n \n \n \n \n 加载视频内容...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 604万4.5万18:23" + }, + { + num: NumberInt("1"), + value: "\n \n \n \n \n \n 全体起立!!!四个字:不要开挂。up主牛,给他订的五年\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 正在缓冲...\n \n \n \n \n \n 获取视频参数...\n [成功]\n \n \n \n \n 播放器初始化...\n [成功]\n 3.16.0-9b97d64a\n \n \n \n 获取播放地址...\n [成功]\n \n \n \n \n 加载视频信息...\n [成功]\n \n \n \n \n 加载视频内容...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 194.5万218605:44" + }, + { + num: NumberInt("2"), + value: "57.4万70401:41" + }, + { + num: NumberInt("3"), + value: "3730.7万8.4万01:35" + }, + { + num: NumberInt("4"), + value: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 正在缓冲...\n \n \n \n \n \n 获取视频参数...\n [成功]\n \n \n \n \n 播放器初始化...\n [成功]\n 3.16.0-9b97d64a\n \n \n \n 获取播放地址...\n [成功]\n \n \n \n \n 加载视频信息...\n [成功]\n \n \n \n \n 加载视频内容...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 23万19304:24" + }, + { + num: NumberInt("5"), + value: "71.6万199411:40" + }, + { + num: NumberInt("6"), + value: "1633.3万15.6万02:00" + }, + { + num: NumberInt("7"), + value: "22.9万19905:36" + }, + { + num: NumberInt("8"), + value: "稍后再看71万67803:11" + }, + { + num: NumberInt("9"), + value: "稍后再看611.9万28.6万09:55:55" + }, + { + num: NumberInt("10"), + value: "972.2万7万09:09" + }, + { + num: NumberInt("11"), + value: "509.9万3.2万18:41" + }, + { + num: NumberInt("12"), + value: "463万10.9万32:03" + }, + { + num: NumberInt("13"), + value: "558.4万551700:46" + }, + { + num: NumberInt("14"), + value: "17.7万1300:29" + }, + { + num: NumberInt("15"), + value: "125.1万1.9万04:16" + }, + { + num: NumberInt("16"), + value: "648.5万70100:32" + }, + { + num: NumberInt("17"), + value: "46万15804:51" + }, + { + num: NumberInt("18"), + value: "142.8万453802:07" + }, + { + num: NumberInt("19"), + value: "675.5万3.8万04:53" + }, + { + num: NumberInt("20"), + value: "322.6万151700:59" + }, + { + num: NumberInt("21"), + value: "153.8万37901:23" + }, + { + num: NumberInt("22"), + value: "53.1万7800:09" + }, + { + num: NumberInt("23"), + value: "645.8万11.4万01:11:05" + }, + { + num: NumberInt("24"), + value: "70.2万87601:01" + }, + { + num: NumberInt("25"), + value: "448.5万1.1万09:58" + }, + { + num: NumberInt("26"), + value: "322.6万6.1万47:53" + }, + { + num: NumberInt("27"), + value: "209.4万653703:31" + }, + { + num: NumberInt("28"), + value: "141.8万71200:49" + }, + { + num: NumberInt("29"), + value: "63.5万132201:20" + }, + { + num: NumberInt("30"), + value: "382.9万2万02:11" + }, + { + num: NumberInt("31"), + value: "91.5万46502:58" + }, + { + num: NumberInt("32"), + value: "1.1万1900:43" + }, + { + num: NumberInt("33"), + value: "262万922401:49" + }, + { + num: NumberInt("34"), + value: "31.7万10801:27" + }, + { + num: NumberInt("35"), + value: "33.1万258502:46" + }, + { + num: NumberInt("36"), + value: "1.3万200:17" + }, + { + num: NumberInt("37"), + value: "60.1万8200:35" + }, + { + num: NumberInt("38"), + value: "184.3万249005:12" + }, + { + num: NumberInt("39"), + value: "33.4万266709:21" + }, + { + num: NumberInt("40"), + value: "365万774201:12" + }, + { + num: NumberInt("41"), + value: "140.4万915706:29" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接地址", + desc: "", + relativeXpath: "/div[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.bilibili.com/video/BV1fc41187xA" + }, + { + num: NumberInt("1"), + value: "https://www.bilibili.com/video/BV1it4y1J7Wn" + }, + { + num: NumberInt("2"), + value: "https://www.bilibili.com/video/BV1G7411K71U" + }, + { + num: NumberInt("3"), + value: "https://www.bilibili.com/video/BV1Xx411p74G" + }, + { + num: NumberInt("4"), + value: "https://www.bilibili.com/video/BV1pe4y1a7rJ" + }, + { + num: NumberInt("5"), + value: "https://www.bilibili.com/video/BV1uS4y1L77Z" + }, + { + num: NumberInt("6"), + value: "https://www.bilibili.com/video/BV1nW4118797" + }, + { + num: NumberInt("7"), + value: "https://www.bilibili.com/video/BV1v34y1k7SM" + }, + { + num: NumberInt("8"), + value: "https://www.bilibili.com/video/BV1GL41137Cv" + }, + { + num: NumberInt("9"), + value: "https://www.bilibili.com/video/BV1GJ411p7aq" + }, + { + num: NumberInt("10"), + value: "https://www.bilibili.com/video/BV1MC4y1p7yf" + }, + { + num: NumberInt("11"), + value: "https://www.bilibili.com/video/BV1Z4411X7qs" + }, + { + num: NumberInt("12"), + value: "https://www.bilibili.com/video/BV1ss411P7e1" + }, + { + num: NumberInt("13"), + value: "https://www.bilibili.com/video/BV1FE411H7L1" + }, + { + num: NumberInt("14"), + value: "https://www.bilibili.com/video/BV1T44y1p7mz" + }, + { + num: NumberInt("15"), + value: "https://www.bilibili.com/video/BV1dZ4y1X7Fi" + }, + { + num: NumberInt("16"), + value: "https://www.bilibili.com/video/BV1c54114764" + }, + { + num: NumberInt("17"), + value: "https://www.bilibili.com/video/BV1TQ4y1P7bp" + }, + { + num: NumberInt("18"), + value: "https://www.bilibili.com/video/BV1R4411c7zr" + }, + { + num: NumberInt("19"), + value: "https://www.bilibili.com/video/BV1xt411G73j" + }, + { + num: NumberInt("20"), + value: "https://www.bilibili.com/video/BV1ui4y1c7Pd" + }, + { + num: NumberInt("21"), + value: "https://www.bilibili.com/video/BV1ta411f7cY" + }, + { + num: NumberInt("22"), + value: "https://www.bilibili.com/video/BV1BE411A777" + }, + { + num: NumberInt("23"), + value: "https://www.bilibili.com/video/BV1NT4y1w776" + }, + { + num: NumberInt("24"), + value: "https://www.bilibili.com/video/BV1yW411N7zc" + }, + { + num: NumberInt("25"), + value: "https://www.bilibili.com/video/BV1TZ4y147ME" + }, + { + num: NumberInt("26"), + value: "https://www.bilibili.com/video/BV1UJ41137aF" + }, + { + num: NumberInt("27"), + value: "https://www.bilibili.com/video/BV1MB4y1c7Cg" + }, + { + num: NumberInt("28"), + value: "https://www.bilibili.com/video/BV1Gt411U78v" + }, + { + num: NumberInt("29"), + value: "https://www.bilibili.com/video/BV1Ds411N7dU" + }, + { + num: NumberInt("30"), + value: "https://www.bilibili.com/video/BV1ip4y1Q7V1" + }, + { + num: NumberInt("31"), + value: "https://www.bilibili.com/video/BV1ry4y1v7Xw" + }, + { + num: NumberInt("32"), + value: "https://www.bilibili.com/video/BV14B4y1V7Uv" + }, + { + num: NumberInt("33"), + value: "https://www.bilibili.com/video/BV11q4y1H76N" + }, + { + num: NumberInt("34"), + value: "https://www.bilibili.com/video/BV1TB4y1W7cz" + }, + { + num: NumberInt("35"), + value: "https://www.bilibili.com/video/BV1T54y167Hs" + }, + { + num: NumberInt("36"), + value: "https://www.bilibili.com/video/BV1Fd4y197d7" + }, + { + num: NumberInt("37"), + value: "https://www.bilibili.com/video/BV1rS4y1U76q" + }, + { + num: NumberInt("38"), + value: "https://www.bilibili.com/video/BV1At411f7bu" + }, + { + num: NumberInt("39"), + value: "https://www.bilibili.com/video/BV1A4411G7Lz" + }, + { + num: NumberInt("40"), + value: "https://www.bilibili.com/video/BV1T7411A7WW" + }, + { + num: NumberInt("41"), + value: "https://www.bilibili.com/video/BV1t7411G7pr" + } + ], + default: "" + }, + { + nodeType: NumberInt("4"), + contentType: NumberInt("1"), + relative: true, + name: "参数3_图片地址", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/picture[1]/img[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://i2.hdslb.com/bfs/archive/b8d6c6e21212b54a92a36ea03f61b7e334cc24e7.jpg@672w_378h_1c" + }, + { + num: NumberInt("1"), + value: "https://i1.hdslb.com/bfs/archive/76edeea7716a3f050782d08ebecea529984aa874.jpg@672w_378h_1c" + }, + { + num: NumberInt("2"), + value: "https://i2.hdslb.com/bfs/archive/75886e1dc52230d510b5c843f65ef7e2c5acf4cd.jpg@672w_378h_1c" + }, + { + num: NumberInt("3"), + value: "https://i1.hdslb.com/bfs/archive/34ed0f1580db36e8c95d4b653f6caaaa1b6fe4cd.jpg@672w_378h_1c" + }, + { + num: NumberInt("4"), + value: "https://i2.hdslb.com/bfs/archive/0b20c3b9dbd88e8a299fcfb82d756504410da912.jpg@672w_378h_1c" + }, + { + num: NumberInt("5"), + value: "https://i2.hdslb.com/bfs/archive/e2b5d191fb2fcce7cd6dc8d2d8df21be755fc04c.jpg@672w_378h_1c" + }, + { + num: NumberInt("6"), + value: "https://i2.hdslb.com/bfs/archive/75e33c83b77d0aa11de0eee225737cc123a40f96.jpg@672w_378h_1c" + }, + { + num: NumberInt("7"), + value: "https://i2.hdslb.com/bfs/archive/bca7479215b41e9c25e0518d1aaae004e9d35a18.jpg@672w_378h_1c" + }, + { + num: NumberInt("8"), + value: "https://i0.hdslb.com/bfs/archive/3579b9a4262c57de3bf1ab4a0f7306fb62d028d8.jpg@672w_378h_1c" + }, + { + num: NumberInt("9"), + value: "https://i0.hdslb.com/bfs/archive/9bbef2353cf65fecadfadc20d134aa08c1fae50a.jpg@672w_378h_1c" + }, + { + num: NumberInt("10"), + value: "https://i0.hdslb.com/bfs/archive/f238dbec60b54da32ee891db147481f96737777c.jpg@672w_378h_1c" + }, + { + num: NumberInt("11"), + value: "https://i0.hdslb.com/bfs/archive/c6091fc208c2565cdb99ed9ddd1dbb36250fef5d.jpg@672w_378h_1c" + }, + { + num: NumberInt("12"), + value: "https://i0.hdslb.com/bfs/archive/a6969ff4649d8bb301cd04a0c7d153f4af3bbc6a.jpg@672w_378h_1c" + }, + { + num: NumberInt("13"), + value: "https://i0.hdslb.com/bfs/archive/44de9fd295eb91ff60ddcc3fc5cedba169983fe5.jpg@672w_378h_1c" + }, + { + num: NumberInt("14"), + value: "https://i0.hdslb.com/bfs/archive/b40e9b7639e71c45246a0b24577e1b1ac325f81b.jpg@672w_378h_1c" + }, + { + num: NumberInt("15"), + value: "https://i0.hdslb.com/bfs/archive/5a7c88a8c831e054406994d28b47f43310014a10.jpg@672w_378h_1c" + }, + { + num: NumberInt("16"), + value: "https://i2.hdslb.com/bfs/archive/437b6e36cafdc77cf0dc3b3b6d476d0bff64f076.jpg@672w_378h_1c" + }, + { + num: NumberInt("17"), + value: "https://i0.hdslb.com/bfs/archive/23013873a2b0c2269e046219f3006c2f53193044.jpg@672w_378h_1c" + }, + { + num: NumberInt("18"), + value: "https://i2.hdslb.com/bfs/archive/66563dee5c5c22a0cec50251926cc743dd947817.jpg@672w_378h_1c" + }, + { + num: NumberInt("19"), + value: "https://i0.hdslb.com/bfs/archive/f4411a38b88bb1591841dd5e4caf2ae9b0e24f13.jpg@672w_378h_1c" + }, + { + num: NumberInt("20"), + value: "https://i1.hdslb.com/bfs/archive/3c98a797f0738c50612590431e12c8b4799d20e3.jpg@672w_378h_1c" + }, + { + num: NumberInt("21"), + value: "https://i1.hdslb.com/bfs/archive/80320e8b252443770e157fefcc62941f1ca7f0dd.jpg@672w_378h_1c" + }, + { + num: NumberInt("22"), + value: "https://i1.hdslb.com/bfs/archive/2751704b052eb8fdc9eb470d03633b2026b018e2.jpg@672w_378h_1c" + }, + { + num: NumberInt("23"), + value: "https://i0.hdslb.com/bfs/archive/993e5d4910a8287e238a2c7069c585a77ccceedd.jpg@672w_378h_1c" + }, + { + num: NumberInt("24"), + value: "https://i1.hdslb.com/bfs/archive/e66075f80e9a65564e7898a6d295294d0231802c.jpg@672w_378h_1c" + }, + { + num: NumberInt("25"), + value: "https://i0.hdslb.com/bfs/archive/66c6e52e928a15102dba5606db0948ce4a4b82d8.jpg@672w_378h_1c" + }, + { + num: NumberInt("26"), + value: "https://i1.hdslb.com/bfs/archive/8eb797389171a758b639fa1fd93115d7afc2d509.jpg@672w_378h_1c" + }, + { + num: NumberInt("27"), + value: "https://i1.hdslb.com/bfs/archive/713b5244044fe41ce3d4615094196c1c7a6edfb5.jpg@672w_378h_1c" + }, + { + num: NumberInt("28"), + value: "https://i0.hdslb.com/bfs/archive/0e0f599401ce6e40791088f93a510946cf333d3a.jpg@672w_378h_1c" + }, + { + num: NumberInt("29"), + value: "https://i2.hdslb.com/bfs/archive/29578616a75ab38c8dddb5ef09b8acc6e43951aa.jpg@672w_378h_1c" + }, + { + num: NumberInt("30"), + value: "https://i1.hdslb.com/bfs/archive/83119681117e5bfb023ed4d22cbda8c930ff51da.jpg@672w_378h_1c" + }, + { + num: NumberInt("31"), + value: "https://i0.hdslb.com/bfs/archive/eba4713963d5af9f5462dfb0a2c9dbb302b7b7b1.jpg@672w_378h_1c" + }, + { + num: NumberInt("32"), + value: "https://i1.hdslb.com/bfs/archive/27f9ffb23e8d2dda2e21f463c5d1f9dd4b11a14d.jpg@672w_378h_1c" + }, + { + num: NumberInt("33"), + value: "https://i0.hdslb.com/bfs/archive/7357ec8850f5c143805897e9e3e5f2c5833dfdeb.jpg@672w_378h_1c" + }, + { + num: NumberInt("34"), + value: "https://i0.hdslb.com/bfs/archive/fa3dadf17f447e5d3e2e6de65ccf3de318d4ff5d.jpg@672w_378h_1c" + }, + { + num: NumberInt("35"), + value: "https://i1.hdslb.com/bfs/archive/902ce5dea4ecb9d11e6b915b3af2d6b65da789a2.jpg@672w_378h_1c" + }, + { + num: NumberInt("36"), + value: "https://i2.hdslb.com/bfs/archive/ce10bd1662b39c6080d82885616635b45dc482df.jpg@672w_378h_1c" + }, + { + num: NumberInt("37"), + value: "https://i2.hdslb.com/bfs/archive/0d17d777947d23de70620076b400c40e4a000b29.jpg@672w_378h_1c" + }, + { + num: NumberInt("38"), + value: "https://i0.hdslb.com/bfs/archive/908e142e20a7663a10b4bd34d586747499c76dc1.jpg@672w_378h_1c" + }, + { + num: NumberInt("39"), + value: "https://i0.hdslb.com/bfs/archive/7af6d58f2a853cd4ac2d6a1b3513895c23ac5f88.jpg@672w_378h_1c" + }, + { + num: NumberInt("40"), + value: "https://i2.hdslb.com/bfs/archive/b48f70e304e40a899abba8a50c8a1e6fd77033bf.jpg@672w_378h_1c" + }, + { + num: NumberInt("41"), + value: "https://i2.hdslb.com/bfs/archive/c876f7b9a2e94c34e69e7a9b70997de4624a3fe1.jpg@672w_378h_1c" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数4_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[9]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "正在缓冲..." + }, + { + num: NumberInt("1"), + value: "正在缓冲..." + }, + { + num: NumberInt("4"), + value: "正在缓冲..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数5_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "获取视频参数..." + }, + { + num: NumberInt("1"), + value: "获取视频参数..." + }, + { + num: NumberInt("4"), + value: "获取视频参数..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数6_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[1]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "[成功]" + }, + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("4"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数7_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "播放器初始化..." + }, + { + num: NumberInt("1"), + value: "播放器初始化..." + }, + { + num: NumberInt("4"), + value: "播放器初始化..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数8_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "[成功]" + }, + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("4"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数9_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.16.0-9b97d64a" + }, + { + num: NumberInt("1"), + value: "3.16.0-9b97d64a" + }, + { + num: NumberInt("4"), + value: "3.16.0-9b97d64a" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数10_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "获取播放地址..." + }, + { + num: NumberInt("1"), + value: "获取播放地址..." + }, + { + num: NumberInt("4"), + value: "获取播放地址..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数11_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[3]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "[成功]" + }, + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("4"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数12_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[4]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "加载视频信息..." + }, + { + num: NumberInt("1"), + value: "加载视频信息..." + }, + { + num: NumberInt("4"), + value: "加载视频信息..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数13_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[4]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "[成功]" + }, + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("4"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数14_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[5]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "加载视频内容..." + }, + { + num: NumberInt("1"), + value: "加载视频内容..." + }, + { + num: NumberInt("4"), + value: "加载视频内容..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数15_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[2]/div[1]/div[1]/span[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "604万" + }, + { + num: NumberInt("1"), + value: "194.5万" + }, + { + num: NumberInt("2"), + value: "57.4万" + }, + { + num: NumberInt("3"), + value: "3730.7万" + }, + { + num: NumberInt("4"), + value: "23万" + }, + { + num: NumberInt("5"), + value: "71.6万" + }, + { + num: NumberInt("6"), + value: "1633.3万" + }, + { + num: NumberInt("7"), + value: "22.9万" + }, + { + num: NumberInt("8"), + value: "71万" + }, + { + num: NumberInt("9"), + value: "611.9万" + }, + { + num: NumberInt("10"), + value: "972.2万" + }, + { + num: NumberInt("11"), + value: "509.9万" + }, + { + num: NumberInt("12"), + value: "463万" + }, + { + num: NumberInt("13"), + value: "558.4万" + }, + { + num: NumberInt("14"), + value: "17.7万" + }, + { + num: NumberInt("15"), + value: "125.1万" + }, + { + num: NumberInt("16"), + value: "648.5万" + }, + { + num: NumberInt("17"), + value: "46万" + }, + { + num: NumberInt("18"), + value: "142.8万" + }, + { + num: NumberInt("19"), + value: "675.5万" + }, + { + num: NumberInt("20"), + value: "322.6万" + }, + { + num: NumberInt("21"), + value: "153.8万" + }, + { + num: NumberInt("22"), + value: "53.1万" + }, + { + num: NumberInt("23"), + value: "645.8万" + }, + { + num: NumberInt("24"), + value: "70.2万" + }, + { + num: NumberInt("25"), + value: "448.5万" + }, + { + num: NumberInt("26"), + value: "322.6万" + }, + { + num: NumberInt("27"), + value: "209.4万" + }, + { + num: NumberInt("28"), + value: "141.8万" + }, + { + num: NumberInt("29"), + value: "63.5万" + }, + { + num: NumberInt("30"), + value: "382.9万" + }, + { + num: NumberInt("31"), + value: "91.5万" + }, + { + num: NumberInt("32"), + value: "1.1万" + }, + { + num: NumberInt("33"), + value: "262万" + }, + { + num: NumberInt("34"), + value: "31.7万" + }, + { + num: NumberInt("35"), + value: "33.1万" + }, + { + num: NumberInt("36"), + value: "1.3万" + }, + { + num: NumberInt("37"), + value: "60.1万" + }, + { + num: NumberInt("38"), + value: "184.3万" + }, + { + num: NumberInt("39"), + value: "33.4万" + }, + { + num: NumberInt("40"), + value: "365万" + }, + { + num: NumberInt("41"), + value: "140.4万" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数16_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[2]/div[1]/div[1]/span[2]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "4.5万" + }, + { + num: NumberInt("1"), + value: "2186" + }, + { + num: NumberInt("2"), + value: "704" + }, + { + num: NumberInt("3"), + value: "8.4万" + }, + { + num: NumberInt("4"), + value: "193" + }, + { + num: NumberInt("5"), + value: "1994" + }, + { + num: NumberInt("6"), + value: "15.6万" + }, + { + num: NumberInt("7"), + value: "199" + }, + { + num: NumberInt("8"), + value: "678" + }, + { + num: NumberInt("9"), + value: "28.6万" + }, + { + num: NumberInt("10"), + value: "7万" + }, + { + num: NumberInt("11"), + value: "3.2万" + }, + { + num: NumberInt("12"), + value: "10.9万" + }, + { + num: NumberInt("13"), + value: "5517" + }, + { + num: NumberInt("14"), + value: "13" + }, + { + num: NumberInt("15"), + value: "1.9万" + }, + { + num: NumberInt("16"), + value: "701" + }, + { + num: NumberInt("17"), + value: "158" + }, + { + num: NumberInt("18"), + value: "4538" + }, + { + num: NumberInt("19"), + value: "3.8万" + }, + { + num: NumberInt("20"), + value: "1517" + }, + { + num: NumberInt("21"), + value: "379" + }, + { + num: NumberInt("22"), + value: "78" + }, + { + num: NumberInt("23"), + value: "11.4万" + }, + { + num: NumberInt("24"), + value: "876" + }, + { + num: NumberInt("25"), + value: "1.1万" + }, + { + num: NumberInt("26"), + value: "6.1万" + }, + { + num: NumberInt("27"), + value: "6537" + }, + { + num: NumberInt("28"), + value: "712" + }, + { + num: NumberInt("29"), + value: "1322" + }, + { + num: NumberInt("30"), + value: "2万" + }, + { + num: NumberInt("31"), + value: "465" + }, + { + num: NumberInt("32"), + value: "19" + }, + { + num: NumberInt("33"), + value: "9224" + }, + { + num: NumberInt("34"), + value: "108" + }, + { + num: NumberInt("35"), + value: "2585" + }, + { + num: NumberInt("36"), + value: "2" + }, + { + num: NumberInt("37"), + value: "82" + }, + { + num: NumberInt("38"), + value: "2490" + }, + { + num: NumberInt("39"), + value: "2667" + }, + { + num: NumberInt("40"), + value: "7742" + }, + { + num: NumberInt("41"), + value: "9157" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数17_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[2]/div[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "18:23" + }, + { + num: NumberInt("1"), + value: "05:44" + }, + { + num: NumberInt("2"), + value: "01:41" + }, + { + num: NumberInt("3"), + value: "01:35" + }, + { + num: NumberInt("4"), + value: "04:24" + }, + { + num: NumberInt("5"), + value: "11:40" + }, + { + num: NumberInt("6"), + value: "02:00" + }, + { + num: NumberInt("7"), + value: "05:36" + }, + { + num: NumberInt("8"), + value: "03:11" + }, + { + num: NumberInt("9"), + value: "09:55:55" + }, + { + num: NumberInt("10"), + value: "09:09" + }, + { + num: NumberInt("11"), + value: "18:41" + }, + { + num: NumberInt("12"), + value: "32:03" + }, + { + num: NumberInt("13"), + value: "00:46" + }, + { + num: NumberInt("14"), + value: "00:29" + }, + { + num: NumberInt("15"), + value: "04:16" + }, + { + num: NumberInt("16"), + value: "00:32" + }, + { + num: NumberInt("17"), + value: "04:51" + }, + { + num: NumberInt("18"), + value: "02:07" + }, + { + num: NumberInt("19"), + value: "04:53" + }, + { + num: NumberInt("20"), + value: "00:59" + }, + { + num: NumberInt("21"), + value: "01:23" + }, + { + num: NumberInt("22"), + value: "00:09" + }, + { + num: NumberInt("23"), + value: "01:11:05" + }, + { + num: NumberInt("24"), + value: "01:01" + }, + { + num: NumberInt("25"), + value: "09:58" + }, + { + num: NumberInt("26"), + value: "47:53" + }, + { + num: NumberInt("27"), + value: "03:31" + }, + { + num: NumberInt("28"), + value: "00:49" + }, + { + num: NumberInt("29"), + value: "01:20" + }, + { + num: NumberInt("30"), + value: "02:11" + }, + { + num: NumberInt("31"), + value: "02:58" + }, + { + num: NumberInt("32"), + value: "00:43" + }, + { + num: NumberInt("33"), + value: "01:49" + }, + { + num: NumberInt("34"), + value: "01:27" + }, + { + num: NumberInt("35"), + value: "02:46" + }, + { + num: NumberInt("36"), + value: "00:17" + }, + { + num: NumberInt("37"), + value: "00:35" + }, + { + num: NumberInt("38"), + value: "05:12" + }, + { + num: NumberInt("39"), + value: "09:21" + }, + { + num: NumberInt("40"), + value: "01:12" + }, + { + num: NumberInt("41"), + value: "06:29" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数18_链接文本", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "卢本伟名场面合集(更新至盖亚)" + }, + { + num: NumberInt("1"), + value: "卢本伟:从中国骄傲到劣迹主播,封杀五年复出,却被官方4字警告" + }, + { + num: NumberInt("2"), + value: "一中老师在线怼卢本伟" + }, + { + num: NumberInt("3"), + value: "17张牌你能秒我??你能秒杀我??17张牌你今天能把我卢本伟秒了,我当场就把这个电脑屏幕吃掉!!!" + }, + { + num: NumberInt("4"), + value: "帝师当年锤卢本伟,狐弟意外爆出李易峰等事情尽然成真" + }, + { + num: NumberInt("5"), + value: "卢本伟看自己大闹天宫" + }, + { + num: NumberInt("6"), + value: "【电音单曲】卢本伟牛逼!!!" + }, + { + num: NumberInt("7"), + value: "【卢本伟】五五开永久关播前的最后5分36秒!" + }, + { + num: NumberInt("8"), + value: "茄子生日会PDD直播带大家找卢本伟" + }, + { + num: NumberInt("9"), + value: "卢本伟直播玩掘地求升全过程" + }, + { + num: NumberInt("10"), + value: "你是谁 卢本伟" + }, + { + num: NumberInt("11"), + value: "卢本伟之忍住不笑大挑战,你能坚持多久???" + }, + { + num: NumberInt("12"), + value: "卢本伟29杀吃鸡完整视频" + }, + { + num: NumberInt("13"), + value: "伞兵一号卢本伟是哪个班的?" + }, + { + num: NumberInt("14"), + value: "都说uu是拜金女 说卢本伟《出事》uu第1个跑 可是陪卢本伟到最后的还是uu" + }, + { + num: NumberInt("15"), + value: "【卢本伟】孤 勇 者" + }, + { + num: NumberInt("16"), + value: "卢本伟名场面:上错车了!这段笑得我肚子疼!" + }, + { + num: NumberInt("17"), + value: "卢本伟怒喷xxs" + }, + { + num: NumberInt("18"), + value: "【熊出没鬼畜】卢本伟戒网瘾" + }, + { + num: NumberInt("19"), + value: "卢本伟:把我直播间关了,滚去学习!" + }, + { + num: NumberInt("20"), + value: "卢本伟和PDD当年参加综艺的演技真的炸裂" + }, + { + num: NumberInt("21"), + value: "卢本伟给Uzi发语音,现在可以全部坐下了,并且让乌兹也站了起来" + }, + { + num: NumberInt("22"), + value: "卢本伟牛逼,公交车偶遇卢本伟!!" + }, + { + num: NumberInt("23"), + value: "【搞笑丧尸片】鲲山行(70分钟完整版) 卢本伟&茄子&周淑怡 等领衔主演" + }, + { + num: NumberInt("24"), + value: "现在进入卢本伟直播间会发生什么" + }, + { + num: NumberInt("25"), + value: "卢本伟——日本之行vlog续" + }, + { + num: NumberInt("26"), + value: "【不要笑挑战卢本伟之心态是如何爆炸】" + }, + { + num: NumberInt("27"), + value: "【卢本伟】错位时空,全程催泪" + }, + { + num: NumberInt("28"), + value: "卢本伟看IG夺冠看哭了,心疼" + }, + { + num: NumberInt("29"), + value: "卢本伟:十七张牌你能秒我?我吃屏幕" + }, + { + num: NumberInt("30"), + value: "【卢本伟】仙剑开侠传" + }, + { + num: NumberInt("31"), + value: "PDD谈卢本伟的复出和近况" + }, + { + num: NumberInt("32"), + value: "现在的卢本伟vs以前的卢本伟" + }, + { + num: NumberInt("33"), + value: "卢本伟买西瓜" + }, + { + num: NumberInt("34"), + value: "PDD:很感谢卢本伟当年天天拉着我双排直播 不然我早摆烂了" + }, + { + num: NumberInt("35"), + value: "【卢本伟】那个广场......起风了" + }, + { + num: NumberInt("36"), + value: "澳洲教授:你个Doinb又来给卢本伟代课是吧?" + }, + { + num: NumberInt("37"), + value: "电竞经理 卢本伟语音包" + }, + { + num: NumberInt("38"), + value: "卢本伟第一次直播的样子,你还记得吗?(录播开始时)" + }, + { + num: NumberInt("39"), + value: "『进击的全明星/传说的开始/第一集』卢本伟:我的外挂到账了!" + }, + { + num: NumberInt("40"), + value: "卢本伟惊现某网课现场,数学课老师暴怒" + }, + { + num: NumberInt("41"), + value: "【掘地求升】卢本伟:玩游戏一定要啸着玩" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数19_链接地址", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.bilibili.com/video/BV1fc41187xA?spm_id_from=333.337.search-card.all.click" + }, + { + num: NumberInt("1"), + value: "https://www.bilibili.com/video/BV1it4y1J7Wn" + }, + { + num: NumberInt("2"), + value: "https://www.bilibili.com/video/BV1G7411K71U" + }, + { + num: NumberInt("3"), + value: "https://www.bilibili.com/video/BV1Xx411p74G" + }, + { + num: NumberInt("4"), + value: "https://www.bilibili.com/video/BV1pe4y1a7rJ" + }, + { + num: NumberInt("5"), + value: "https://www.bilibili.com/video/BV1uS4y1L77Z" + }, + { + num: NumberInt("6"), + value: "https://www.bilibili.com/video/BV1nW4118797" + }, + { + num: NumberInt("7"), + value: "https://www.bilibili.com/video/BV1v34y1k7SM" + }, + { + num: NumberInt("8"), + value: "https://www.bilibili.com/video/BV1GL41137Cv" + }, + { + num: NumberInt("9"), + value: "https://www.bilibili.com/video/BV1GJ411p7aq" + }, + { + num: NumberInt("10"), + value: "https://www.bilibili.com/video/BV1MC4y1p7yf" + }, + { + num: NumberInt("11"), + value: "https://www.bilibili.com/video/BV1Z4411X7qs" + }, + { + num: NumberInt("12"), + value: "https://www.bilibili.com/video/BV1ss411P7e1" + }, + { + num: NumberInt("13"), + value: "https://www.bilibili.com/video/BV1FE411H7L1" + }, + { + num: NumberInt("14"), + value: "https://www.bilibili.com/video/BV1T44y1p7mz" + }, + { + num: NumberInt("15"), + value: "https://www.bilibili.com/video/BV1dZ4y1X7Fi" + }, + { + num: NumberInt("16"), + value: "https://www.bilibili.com/video/BV1c54114764" + }, + { + num: NumberInt("17"), + value: "https://www.bilibili.com/video/BV1TQ4y1P7bp" + }, + { + num: NumberInt("18"), + value: "https://www.bilibili.com/video/BV1R4411c7zr" + }, + { + num: NumberInt("19"), + value: "https://www.bilibili.com/video/BV1xt411G73j" + }, + { + num: NumberInt("20"), + value: "https://www.bilibili.com/video/BV1ui4y1c7Pd" + }, + { + num: NumberInt("21"), + value: "https://www.bilibili.com/video/BV1ta411f7cY" + }, + { + num: NumberInt("22"), + value: "https://www.bilibili.com/video/BV1BE411A777" + }, + { + num: NumberInt("23"), + value: "https://www.bilibili.com/video/BV1NT4y1w776" + }, + { + num: NumberInt("24"), + value: "https://www.bilibili.com/video/BV1yW411N7zc" + }, + { + num: NumberInt("25"), + value: "https://www.bilibili.com/video/BV1TZ4y147ME" + }, + { + num: NumberInt("26"), + value: "https://www.bilibili.com/video/BV1UJ41137aF" + }, + { + num: NumberInt("27"), + value: "https://www.bilibili.com/video/BV1MB4y1c7Cg" + }, + { + num: NumberInt("28"), + value: "https://www.bilibili.com/video/BV1Gt411U78v" + }, + { + num: NumberInt("29"), + value: "https://www.bilibili.com/video/BV1Ds411N7dU" + }, + { + num: NumberInt("30"), + value: "https://www.bilibili.com/video/BV1ip4y1Q7V1" + }, + { + num: NumberInt("31"), + value: "https://www.bilibili.com/video/BV1ry4y1v7Xw" + }, + { + num: NumberInt("32"), + value: "https://www.bilibili.com/video/BV14B4y1V7Uv" + }, + { + num: NumberInt("33"), + value: "https://www.bilibili.com/video/BV11q4y1H76N" + }, + { + num: NumberInt("34"), + value: "https://www.bilibili.com/video/BV1TB4y1W7cz" + }, + { + num: NumberInt("35"), + value: "https://www.bilibili.com/video/BV1T54y167Hs" + }, + { + num: NumberInt("36"), + value: "https://www.bilibili.com/video/BV1Fd4y197d7" + }, + { + num: NumberInt("37"), + value: "https://www.bilibili.com/video/BV1rS4y1U76q" + }, + { + num: NumberInt("38"), + value: "https://www.bilibili.com/video/BV1At411f7bu" + }, + { + num: NumberInt("39"), + value: "https://www.bilibili.com/video/BV1A4411G7Lz" + }, + { + num: NumberInt("40"), + value: "https://www.bilibili.com/video/BV1T7411A7WW" + }, + { + num: NumberInt("41"), + value: "https://www.bilibili.com/video/BV1t7411G7pr" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数20_文本", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/a[1]/h3[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "名场面合集(更新至盖亚)" + }, + { + num: NumberInt("1"), + value: ":从中国骄傲到劣迹主播,封杀五年复出,却被官方4字警告" + }, + { + num: NumberInt("2"), + value: "一中老师在线怼" + }, + { + num: NumberInt("3"), + value: "17张牌你能秒我??你能秒杀我??17张牌你今天能把我秒了,我当场就把这个电脑屏幕吃掉!!!" + }, + { + num: NumberInt("4"), + value: "帝师当年锤,狐弟意外爆出李易峰等事情尽然成真" + }, + { + num: NumberInt("5"), + value: "看自己大闹天宫" + }, + { + num: NumberInt("6"), + value: "【电音单曲】牛逼!!!" + }, + { + num: NumberInt("7"), + value: "【】五五开永久关播前的最后5分36秒!" + }, + { + num: NumberInt("8"), + value: "茄子生日会PDD直播带大家找" + }, + { + num: NumberInt("9"), + value: "直播玩掘地求升全过程" + }, + { + num: NumberInt("10"), + value: "你是谁" + }, + { + num: NumberInt("11"), + value: "之忍住不笑大挑战,你能坚持多久???" + }, + { + num: NumberInt("12"), + value: "29杀吃鸡完整视频" + }, + { + num: NumberInt("13"), + value: "伞兵一号是哪个班的?" + }, + { + num: NumberInt("14"), + value: "都说uu是拜金女说《出事》uu第1个跑可是陪到最后的还是uu" + }, + { + num: NumberInt("15"), + value: "【】孤勇者" + }, + { + num: NumberInt("16"), + value: "名场面:上错车了!这段笑得我肚子疼!" + }, + { + num: NumberInt("17"), + value: "怒喷xxs" + }, + { + num: NumberInt("18"), + value: "【熊出没鬼畜】戒网瘾" + }, + { + num: NumberInt("19"), + value: ":把我直播间关了,滚去学习!" + }, + { + num: NumberInt("20"), + value: "和PDD当年参加综艺的演技真的炸裂" + }, + { + num: NumberInt("21"), + value: "给Uzi发语音,现在可以全部坐下了,并且让乌兹也站了起来" + }, + { + num: NumberInt("22"), + value: "牛逼,公交车偶遇!!" + }, + { + num: NumberInt("23"), + value: "【搞笑丧尸片】鲲山行(70分钟完整版)&茄子&周淑怡等领衔主演" + }, + { + num: NumberInt("24"), + value: "现在进入直播间会发生什么" + }, + { + num: NumberInt("25"), + value: "——日本之行vlog续" + }, + { + num: NumberInt("26"), + value: "【不要笑挑战之心态是如何爆炸】" + }, + { + num: NumberInt("27"), + value: "【】错位时空,全程催泪" + }, + { + num: NumberInt("28"), + value: "看IG夺冠看哭了,心疼" + }, + { + num: NumberInt("29"), + value: ":十七张牌你能秒我?我吃屏幕" + }, + { + num: NumberInt("30"), + value: "【】仙剑开侠传" + }, + { + num: NumberInt("31"), + value: "PDD谈的复出和近况" + }, + { + num: NumberInt("32"), + value: "现在的vs以前的" + }, + { + num: NumberInt("33"), + value: "买西瓜" + }, + { + num: NumberInt("34"), + value: "PDD:很感谢当年天天拉着我双排直播不然我早摆烂了" + }, + { + num: NumberInt("35"), + value: "【】那个广场......起风了" + }, + { + num: NumberInt("36"), + value: "澳洲教授:你个Doinb又来给代课是吧?" + }, + { + num: NumberInt("37"), + value: "电竞经理语音包" + }, + { + num: NumberInt("38"), + value: "第一次直播的样子,你还记得吗?(录播开始时)" + }, + { + num: NumberInt("39"), + value: "『进击的全明星/传说的开始/第一集』:我的外挂到账了!" + }, + { + num: NumberInt("40"), + value: "惊现某网课现场,数学课老师暴怒" + }, + { + num: NumberInt("41"), + value: "【掘地求升】:玩游戏一定要啸着玩" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数21_文本", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/a[1]/h3[1]/em[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "卢本伟" + }, + { + num: NumberInt("1"), + value: "卢本伟" + }, + { + num: NumberInt("2"), + value: "卢本伟" + }, + { + num: NumberInt("3"), + value: "卢本伟" + }, + { + num: NumberInt("4"), + value: "卢本伟" + }, + { + num: NumberInt("5"), + value: "卢本伟" + }, + { + num: NumberInt("6"), + value: "卢本伟" + }, + { + num: NumberInt("7"), + value: "卢本伟" + }, + { + num: NumberInt("8"), + value: "卢本伟" + }, + { + num: NumberInt("9"), + value: "卢本伟" + }, + { + num: NumberInt("10"), + value: "卢本伟" + }, + { + num: NumberInt("11"), + value: "卢本伟" + }, + { + num: NumberInt("12"), + value: "卢本伟" + }, + { + num: NumberInt("13"), + value: "卢本伟" + }, + { + num: NumberInt("14"), + value: "卢本伟" + }, + { + num: NumberInt("15"), + value: "卢本伟" + }, + { + num: NumberInt("16"), + value: "卢本伟" + }, + { + num: NumberInt("17"), + value: "卢本伟" + }, + { + num: NumberInt("18"), + value: "卢本伟" + }, + { + num: NumberInt("19"), + value: "卢本伟" + }, + { + num: NumberInt("20"), + value: "卢本伟" + }, + { + num: NumberInt("21"), + value: "卢本伟" + }, + { + num: NumberInt("22"), + value: "卢本伟" + }, + { + num: NumberInt("23"), + value: "卢本伟" + }, + { + num: NumberInt("24"), + value: "卢本伟" + }, + { + num: NumberInt("25"), + value: "卢本伟" + }, + { + num: NumberInt("26"), + value: "卢本伟" + }, + { + num: NumberInt("27"), + value: "卢本伟" + }, + { + num: NumberInt("28"), + value: "卢本伟" + }, + { + num: NumberInt("29"), + value: "卢本伟" + }, + { + num: NumberInt("30"), + value: "卢本伟" + }, + { + num: NumberInt("31"), + value: "卢本伟" + }, + { + num: NumberInt("32"), + value: "卢本伟" + }, + { + num: NumberInt("33"), + value: "卢本伟" + }, + { + num: NumberInt("34"), + value: "卢本伟" + }, + { + num: NumberInt("35"), + value: "卢本伟" + }, + { + num: NumberInt("36"), + value: "卢本伟" + }, + { + num: NumberInt("37"), + value: "卢本伟" + }, + { + num: NumberInt("38"), + value: "卢本伟" + }, + { + num: NumberInt("39"), + value: "卢本伟" + }, + { + num: NumberInt("40"), + value: "卢本伟" + }, + { + num: NumberInt("41"), + value: "卢本伟" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数22_链接文本", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/p[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "柠柚Sama · 2020-4-2" + }, + { + num: NumberInt("1"), + value: "限量版蓝胖纸 · 8-19" + }, + { + num: NumberInt("2"), + value: "兰兰我老婆_ · 2020-2-26" + }, + { + num: NumberInt("3"), + value: "风纪委员啊祖 · 2017-7-26" + }, + { + num: NumberInt("4"), + value: "大风中摇摆的火苗 · 9-12" + }, + { + num: NumberInt("5"), + value: "卢姥爷留声机 · 1-21" + }, + { + num: NumberInt("6"), + value: "一咸菊菊 · 2017-12-20" + }, + { + num: NumberInt("7"), + value: "账号注销9499082 · 3-6" + }, + { + num: NumberInt("8"), + value: "PDD在B站 · 2021-11-4" + }, + { + num: NumberInt("9"), + value: "mdtx58 · 2020-1-11" + }, + { + num: NumberInt("10"), + value: "阿飞vlog记录开哥 · 2020-5-26" + }, + { + num: NumberInt("11"), + value: "花芝虹 · 2019-8-10" + }, + { + num: NumberInt("12"), + value: "曙神之光 · 2018-7-23" + }, + { + num: NumberInt("13"), + value: "找不到拨片的K宝 · 2020-2-28" + }, + { + num: NumberInt("14"), + value: "55开永远的神 · 2-15" + }, + { + num: NumberInt("15"), + value: "可乐君Cy · 2021-12-3" + }, + { + num: NumberInt("16"), + value: "忍野咩咩_ · 2020-4-28" + }, + { + num: NumberInt("17"), + value: "张三是我大哥 · 2020-5-23" + }, + { + num: NumberInt("18"), + value: "沫然Fight · 2019-7-6" + }, + { + num: NumberInt("19"), + value: "不知名肥皂 · 2019-7-16" + }, + { + num: NumberInt("20"), + value: "happykid17 · 2021-1-4" + }, + { + num: NumberInt("21"), + value: "电竞山里娃 · 8-6" + }, + { + num: NumberInt("22"), + value: "坏兔子x · 2020-3-21" + }, + { + num: NumberInt("23"), + value: "浅澄月 · 2020-10-1" + }, + { + num: NumberInt("24"), + value: "打破慘案 · 2018-6-4" + }, + { + num: NumberInt("25"), + value: "阿飞vlog记录开哥 · 2020-4-25" + }, + { + num: NumberInt("26"), + value: "热情似火的小海 · 2019-9-20" + }, + { + num: NumberInt("27"), + value: "冷颜菌丶 · 2021-4-19" + }, + { + num: NumberInt("28"), + value: "陌轩泽 · 2018-11-11" + }, + { + num: NumberInt("29"), + value: "ttsy天天少爷 · 2018-7-20" + }, + { + num: NumberInt("30"), + value: "霖言丶 · 2020-5-13" + }, + { + num: NumberInt("31"), + value: "PDD在B站 · 2020-12-10" + }, + { + num: NumberInt("32"), + value: "包子放盐 · 8-21" + }, + { + num: NumberInt("33"), + value: "清澈小老弟 · 2021-7-27" + }, + { + num: NumberInt("34"), + value: "PDD在B站 · 6-30" + }, + { + num: NumberInt("35"), + value: "污神ya · 2020-11-28" + }, + { + num: NumberInt("36"), + value: "大鹅队长 · 9-12" + }, + { + num: NumberInt("37"), + value: "阴间圣人 · 3-20" + }, + { + num: NumberInt("38"), + value: "叶下莫亿 · 2018-10-17" + }, + { + num: NumberInt("39"), + value: "被玩坏的Zom · 2019-6-17" + }, + { + num: NumberInt("40"), + value: "我的三七没有分 · 2020-2-21" + }, + { + num: NumberInt("41"), + value: "Q_XON · 2020-2-14" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数23_链接地址", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/p[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://space.bilibili.com/152292466" + }, + { + num: NumberInt("1"), + value: "https://space.bilibili.com/505241381" + }, + { + num: NumberInt("2"), + value: "https://space.bilibili.com/449276953" + }, + { + num: NumberInt("3"), + value: "https://space.bilibili.com/28824825" + }, + { + num: NumberInt("4"), + value: "https://space.bilibili.com/1492647" + }, + { + num: NumberInt("5"), + value: "https://space.bilibili.com/2028911406" + }, + { + num: NumberInt("6"), + value: "https://space.bilibili.com/26311441" + }, + { + num: NumberInt("7"), + value: "https://space.bilibili.com/1977691792" + }, + { + num: NumberInt("8"), + value: "https://space.bilibili.com/36882906" + }, + { + num: NumberInt("9"), + value: "https://space.bilibili.com/493533134" + }, + { + num: NumberInt("10"), + value: "https://space.bilibili.com/551271353" + }, + { + num: NumberInt("11"), + value: "https://space.bilibili.com/9336404" + }, + { + num: NumberInt("12"), + value: "https://space.bilibili.com/226736083" + }, + { + num: NumberInt("13"), + value: "https://space.bilibili.com/12319573" + }, + { + num: NumberInt("14"), + value: "https://space.bilibili.com/548489530" + }, + { + num: NumberInt("15"), + value: "https://space.bilibili.com/436582505" + }, + { + num: NumberInt("16"), + value: "https://space.bilibili.com/18915489" + }, + { + num: NumberInt("17"), + value: "https://space.bilibili.com/340497271" + }, + { + num: NumberInt("18"), + value: "https://space.bilibili.com/381448438" + }, + { + num: NumberInt("19"), + value: "https://space.bilibili.com/13142874" + }, + { + num: NumberInt("20"), + value: "https://space.bilibili.com/333644619" + }, + { + num: NumberInt("21"), + value: "https://space.bilibili.com/328379242" + }, + { + num: NumberInt("22"), + value: "https://space.bilibili.com/39486882" + }, + { + num: NumberInt("23"), + value: "https://space.bilibili.com/8034163" + }, + { + num: NumberInt("24"), + value: "https://space.bilibili.com/258882426" + }, + { + num: NumberInt("25"), + value: "https://space.bilibili.com/551271353" + }, + { + num: NumberInt("26"), + value: "https://space.bilibili.com/389114021" + }, + { + num: NumberInt("27"), + value: "https://space.bilibili.com/29379264" + }, + { + num: NumberInt("28"), + value: "https://space.bilibili.com/112883352" + }, + { + num: NumberInt("29"), + value: "https://space.bilibili.com/155682730" + }, + { + num: NumberInt("30"), + value: "https://space.bilibili.com/17422165" + }, + { + num: NumberInt("31"), + value: "https://space.bilibili.com/36882906" + }, + { + num: NumberInt("32"), + value: "https://space.bilibili.com/630915163" + }, + { + num: NumberInt("33"), + value: "https://space.bilibili.com/338407352" + }, + { + num: NumberInt("34"), + value: "https://space.bilibili.com/36882906" + }, + { + num: NumberInt("35"), + value: "https://space.bilibili.com/413118612" + }, + { + num: NumberInt("36"), + value: "https://space.bilibili.com/297317" + }, + { + num: NumberInt("37"), + value: "https://space.bilibili.com/322325839" + }, + { + num: NumberInt("38"), + value: "https://space.bilibili.com/225512648" + }, + { + num: NumberInt("39"), + value: "https://space.bilibili.com/10380338" + }, + { + num: NumberInt("40"), + value: "https://space.bilibili.com/331804025" + }, + { + num: NumberInt("41"), + value: "https://space.bilibili.com/397092968" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数24_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "全体起立!!!" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数25_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("1"), + value: "四个字:不要开挂。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数26_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[3]", + exampleValues: [ + { + num: NumberInt("1"), + value: "up主牛,给他订的五年" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数27_文本", + desc: "", + relativeXpath: "/div[2]/a[1]/div[1]/div[1]/div[1]/span[1]", + exampleValues: [ + { + num: NumberInt("8"), + value: "稍后再看" + }, + { + num: NumberInt("9"), + value: "稍后再看" + }, + { + num: NumberInt("10"), + value: "" + }, + { + num: NumberInt("11"), + value: "" + }, + { + num: NumberInt("12"), + value: "" + }, + { + num: NumberInt("13"), + value: "" + }, + { + num: NumberInt("14"), + value: "" + }, + { + num: NumberInt("15"), + value: "" + }, + { + num: NumberInt("16"), + value: "" + }, + { + num: NumberInt("17"), + value: "" + }, + { + num: NumberInt("18"), + value: "" + }, + { + num: NumberInt("19"), + value: "" + }, + { + num: NumberInt("20"), + value: "" + }, + { + num: NumberInt("21"), + value: "" + }, + { + num: NumberInt("22"), + value: "" + }, + { + num: NumberInt("23"), + value: "" + }, + { + num: NumberInt("24"), + value: "" + }, + { + num: NumberInt("25"), + value: "" + }, + { + num: NumberInt("26"), + value: "" + }, + { + num: NumberInt("27"), + value: "" + }, + { + num: NumberInt("28"), + value: "" + }, + { + num: NumberInt("29"), + value: "" + }, + { + num: NumberInt("30"), + value: "" + }, + { + num: NumberInt("31"), + value: "" + }, + { + num: NumberInt("32"), + value: "" + }, + { + num: NumberInt("33"), + value: "" + }, + { + num: NumberInt("34"), + value: "" + }, + { + num: NumberInt("35"), + value: "" + }, + { + num: NumberInt("36"), + value: "" + }, + { + num: NumberInt("37"), + value: "" + }, + { + num: NumberInt("38"), + value: "" + }, + { + num: NumberInt("39"), + value: "" + }, + { + num: NumberInt("40"), + value: "" + }, + { + num: NumberInt("41"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数28_文本", + desc: "", + relativeXpath: "/div[2]/div[1]/div[1]/a[1]/h3[1]/em[2]", + exampleValues: [ + { + num: NumberInt("14"), + value: "卢本伟" + }, + { + num: NumberInt("22"), + value: "卢本伟" + }, + { + num: NumberInt("32"), + value: "卢本伟" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.bilibili.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "要输入的文本,如京东搜索框输入:电脑", + type: "string", + exampleValue: "卢本伟", + value: "卢本伟" + } + ], + links: "https://www.bilibili.com", + name: "bilibili", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 正在缓冲...\n \n \n \n \n \n 获取视频参数...\n [成功]\n \n \n \n \n 播放器初始化...\n [成功]\n 3.16.0-9b97d64a\n \n \n \n 获取播放地址...\n [成功]\n \n \n \n \n 加载视频信息...\n [成功]\n \n \n \n \n 加载视频内容...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 604万4.5万18:23" + }, + { + id: NumberInt("1"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.bilibili.com/video/BV1fc41187xA" + }, + { + id: NumberInt("2"), + name: "参数3_图片地址", + desc: "", + type: "string", + exampleValue: "https://i2.hdslb.com/bfs/archive/b8d6c6e21212b54a92a36ea03f61b7e334cc24e7.jpg@672w_378h_1c" + }, + { + id: NumberInt("3"), + name: "参数4_文本", + desc: "", + type: "string", + exampleValue: "正在缓冲..." + }, + { + id: NumberInt("4"), + name: "参数5_文本", + desc: "", + type: "string", + exampleValue: "获取视频参数..." + }, + { + id: NumberInt("5"), + name: "参数6_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("6"), + name: "参数7_文本", + desc: "", + type: "string", + exampleValue: "播放器初始化..." + }, + { + id: NumberInt("7"), + name: "参数8_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("8"), + name: "参数9_文本", + desc: "", + type: "string", + exampleValue: "3.16.0-9b97d64a" + }, + { + id: NumberInt("9"), + name: "参数10_文本", + desc: "", + type: "string", + exampleValue: "获取播放地址..." + }, + { + id: NumberInt("10"), + name: "参数11_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("11"), + name: "参数12_文本", + desc: "", + type: "string", + exampleValue: "加载视频信息..." + }, + { + id: NumberInt("12"), + name: "参数13_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("13"), + name: "参数14_文本", + desc: "", + type: "string", + exampleValue: "加载视频内容..." + }, + { + id: NumberInt("14"), + name: "参数15_文本", + desc: "", + type: "string", + exampleValue: "604万" + }, + { + id: NumberInt("15"), + name: "参数16_文本", + desc: "", + type: "string", + exampleValue: "4.5万" + }, + { + id: NumberInt("16"), + name: "参数17_文本", + desc: "", + type: "string", + exampleValue: "18:23" + }, + { + id: NumberInt("17"), + name: "参数18_链接文本", + desc: "", + type: "string", + exampleValue: "卢本伟名场面合集(更新至盖亚)" + }, + { + id: NumberInt("18"), + name: "参数19_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.bilibili.com/video/BV1fc41187xA?spm_id_from=333.337.search-card.all.click" + }, + { + id: NumberInt("19"), + name: "参数20_文本", + desc: "", + type: "string", + exampleValue: "名场面合集(更新至盖亚)" + }, + { + id: NumberInt("20"), + name: "参数21_文本", + desc: "", + type: "string", + exampleValue: "卢本伟" + }, + { + id: NumberInt("21"), + name: "参数22_链接文本", + desc: "", + type: "string", + exampleValue: "柠柚Sama · 2020-4-2" + }, + { + id: NumberInt("22"), + name: "参数23_链接地址", + desc: "", + type: "string", + exampleValue: "https://space.bilibili.com/152292466" + }, + { + id: NumberInt("23"), + name: "参数24_文本", + desc: "", + type: "string", + exampleValue: "全体起立!!!" + }, + { + id: NumberInt("24"), + name: "参数25_文本", + desc: "", + type: "string", + exampleValue: "四个字:不要开挂。" + }, + { + id: NumberInt("25"), + name: "参数26_文本", + desc: "", + type: "string", + exampleValue: "up主牛,给他订的五年" + }, + { + id: NumberInt("26"), + name: "参数27_文本", + desc: "", + type: "string", + exampleValue: "稍后再看" + }, + { + id: NumberInt("27"), + name: "参数28_文本", + desc: "", + type: "string", + exampleValue: "卢本伟" + } + ], + url: "https://www.bilibili.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("6321def45fe056c0e300cd0f"), + containJudge: false, + desc: "https://www.jd.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jd.com", + links: "https://www.jd.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[1]/div[6]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数1_文本", + desc: "", + relativeXpath: "/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "/" + }, + { + num: NumberInt("1"), + value: "/" + }, + { + num: NumberInt("2"), + value: "/" + }, + { + num: NumberInt("3"), + value: "/" + }, + { + num: NumberInt("4"), + value: "/" + }, + { + num: NumberInt("5"), + value: "/" + }, + { + num: NumberInt("6"), + value: "/" + }, + { + num: NumberInt("7"), + value: "/" + }, + { + num: NumberInt("8"), + value: "/" + }, + { + num: NumberInt("9"), + value: "/" + }, + { + num: NumberInt("10"), + value: "/" + }, + { + num: NumberInt("11"), + value: "/" + }, + { + num: NumberInt("12"), + value: "/" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接文本", + desc: "", + relativeXpath: "/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "手机" + }, + { + num: NumberInt("1"), + value: "家用电器" + }, + { + num: NumberInt("2"), + value: "电脑" + }, + { + num: NumberInt("3"), + value: "家纺" + }, + { + num: NumberInt("4"), + value: "家具" + }, + { + num: NumberInt("5"), + value: "内衣" + }, + { + num: NumberInt("6"), + value: "箱包" + }, + { + num: NumberInt("7"), + value: "运动" + }, + { + num: NumberInt("8"), + value: "汽车用品" + }, + { + num: NumberInt("9"), + value: "母婴" + }, + { + num: NumberInt("10"), + value: "玩具乐器" + }, + { + num: NumberInt("11"), + value: "家庭清洁" + }, + { + num: NumberInt("12"), + value: "图书" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数3_链接地址", + desc: "", + relativeXpath: "/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://shouji.jd.com/" + }, + { + num: NumberInt("1"), + value: "https://search.jd.com/Search?keyword=%E5%B0%8F%E5%AE%B6%E7%94%B5&enc=utf-8&wq=%E5%B0%8F%E5%AE%B6%E7%94%B5&pvid=261a350161304c979fa0e7ce95c05671" + }, + { + num: NumberInt("2"), + value: "https://diannao.jd.com/" + }, + { + num: NumberInt("3"), + value: "https://channel.jd.com/jf.html" + }, + { + num: NumberInt("4"), + value: "https://channel.jd.com/furniture.html" + }, + { + num: NumberInt("5"), + value: "https://channel.jd.com/underwear.html" + }, + { + num: NumberInt("6"), + value: "https://channel.jd.com/bag.html" + }, + { + num: NumberInt("7"), + value: "https://phat.jd.com/10-109.html" + }, + { + num: NumberInt("8"), + value: "https://che.jd.com/" + }, + { + num: NumberInt("9"), + value: "https://search.jd.com/Search?keyword=%E6%AF%8D%E5%A9%B4&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%AF%8D%E5%A9%B4&stock=1&gp=2&click=1" + }, + { + num: NumberInt("10"), + value: "https://toy.jd.com/" + }, + { + num: NumberInt("11"), + value: "https://channel.jd.com/beauty.html" + }, + { + num: NumberInt("12"), + value: "https://book.jd.com/" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数4_文本", + desc: "", + relativeXpath: "/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "/" + }, + { + num: NumberInt("2"), + value: "/" + }, + { + num: NumberInt("3"), + value: "/" + }, + { + num: NumberInt("4"), + value: "/" + }, + { + num: NumberInt("5"), + value: "/" + }, + { + num: NumberInt("6"), + value: "/" + }, + { + num: NumberInt("7"), + value: "/" + }, + { + num: NumberInt("8"), + value: "/" + }, + { + num: NumberInt("9"), + value: "/" + }, + { + num: NumberInt("10"), + value: "/" + }, + { + num: NumberInt("11"), + value: "/" + }, + { + num: NumberInt("12"), + value: "/" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数5_链接文本", + desc: "", + relativeXpath: "/a[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "数码" + }, + { + num: NumberInt("2"), + value: "办公" + }, + { + num: NumberInt("3"), + value: "家居" + }, + { + num: NumberInt("4"), + value: "家装" + }, + { + num: NumberInt("5"), + value: "男装" + }, + { + num: NumberInt("6"), + value: "钟表" + }, + { + num: NumberInt("7"), + value: "户外" + }, + { + num: NumberInt("8"), + value: "车载电器" + }, + { + num: NumberInt("9"), + value: "洗护喂养" + }, + { + num: NumberInt("10"), + value: "宠物生活" + }, + { + num: NumberInt("11"), + value: "个人护理" + }, + { + num: NumberInt("12"), + value: "童书" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数6_链接地址", + desc: "", + relativeXpath: "/a[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://shuma.jd.com/" + }, + { + num: NumberInt("2"), + value: "https://bg.jd.com/" + }, + { + num: NumberInt("3"), + value: "https://channel.jd.com/home.html" + }, + { + num: NumberInt("4"), + value: "https://jzjc.jd.com/" + }, + { + num: NumberInt("5"), + value: "https://channel.jd.com/1315-1342.html" + }, + { + num: NumberInt("6"), + value: "https://channel.jd.com/watch.html" + }, + { + num: NumberInt("7"), + value: "https://channel.jd.com/outdoor.html" + }, + { + num: NumberInt("8"), + value: "https://list.jd.com/list.html?cat=6728,6740&page=1&delivery_glb=1&stock=1&sort=sort_totalsales15_desc&trans=1&JL=4_7_0#J_main" + }, + { + num: NumberInt("9"), + value: "https://channel.jd.com/feed.html" + }, + { + num: NumberInt("10"), + value: "https://channel.jd.com/pet.html" + }, + { + num: NumberInt("11"), + value: "https://lady.jd.com/" + }, + { + num: NumberInt("12"), + value: "https://book.jd.com/children.html" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数7_文本", + desc: "", + relativeXpath: "/span[3]", + exampleValues: [ + { + num: NumberInt("3"), + value: "/" + }, + { + num: NumberInt("4"), + value: "/" + }, + { + num: NumberInt("5"), + value: "/" + }, + { + num: NumberInt("6"), + value: "/" + }, + { + num: NumberInt("7"), + value: "/" + }, + { + num: NumberInt("11"), + value: "/" + }, + { + num: NumberInt("12"), + value: "/" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数8_链接文本", + desc: "", + relativeXpath: "/a[3]", + exampleValues: [ + { + num: NumberInt("3"), + value: "厨具" + }, + { + num: NumberInt("4"), + value: "灯具" + }, + { + num: NumberInt("5"), + value: "女装" + }, + { + num: NumberInt("6"), + value: "珠宝" + }, + { + num: NumberInt("7"), + value: "男鞋" + }, + { + num: NumberInt("11"), + value: "计生情趣" + }, + { + num: NumberInt("12"), + value: "文学" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数9_链接地址", + desc: "", + relativeXpath: "/a[3]", + exampleValues: [ + { + num: NumberInt("3"), + value: "https://channel.jd.com/kitchenware.html" + }, + { + num: NumberInt("4"), + value: "https://channel.jd.com/9855-9856.html" + }, + { + num: NumberInt("5"), + value: "https://channel.jd.com/women.html" + }, + { + num: NumberInt("6"), + value: "https://channel.jd.com/jewellery.html" + }, + { + num: NumberInt("7"), + value: "https://channel.jd.com/mensshoes.html" + }, + { + num: NumberInt("11"), + value: "https://channel.jd.com/9192-9196.html" + }, + { + num: NumberInt("12"), + value: "https://channel.jd.com/p_wenxuezongheguan.html" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数10_文本", + desc: "", + relativeXpath: "/span[4]", + exampleValues: [ + { + num: NumberInt("4"), + value: "/" + }, + { + num: NumberInt("5"), + value: "/" + }, + { + num: NumberInt("6"), + value: "/" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数11_链接文本", + desc: "", + relativeXpath: "/a[4]", + exampleValues: [ + { + num: NumberInt("4"), + value: "工业品" + }, + { + num: NumberInt("5"), + value: "童装" + }, + { + num: NumberInt("6"), + value: "女鞋" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数12_链接地址", + desc: "", + relativeXpath: "/a[4]", + exampleValues: [ + { + num: NumberInt("4"), + value: "https://pro.jd.com/mall/active/2u2DR1dUiK34csAE3DqmcG8aXvUK/index.html" + }, + { + num: NumberInt("5"), + value: "https://list.jd.com/list.html?cat=1319,11842" + }, + { + num: NumberInt("6"), + value: "https://channel.jd.com/womensshoes.html" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.jd.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + } + ], + links: "https://www.jd.com", + name: "新web服务", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "/" + }, + { + id: NumberInt("1"), + name: "参数2_链接文本", + desc: "", + type: "string", + exampleValue: "手机" + }, + { + id: NumberInt("2"), + name: "参数3_链接地址", + desc: "", + type: "string", + exampleValue: "https://shouji.jd.com/" + }, + { + id: NumberInt("3"), + name: "参数4_文本", + desc: "", + type: "string", + exampleValue: "/" + }, + { + id: NumberInt("4"), + name: "参数5_链接文本", + desc: "", + type: "string", + exampleValue: "数码" + }, + { + id: NumberInt("5"), + name: "参数6_链接地址", + desc: "", + type: "string", + exampleValue: "https://shuma.jd.com/" + }, + { + id: NumberInt("6"), + name: "参数7_文本", + desc: "", + type: "string", + exampleValue: "/" + }, + { + id: NumberInt("7"), + name: "参数8_链接文本", + desc: "", + type: "string", + exampleValue: "厨具" + }, + { + id: NumberInt("8"), + name: "参数9_链接地址", + desc: "", + type: "string", + exampleValue: "https://channel.jd.com/kitchenware.html" + }, + { + id: NumberInt("9"), + name: "参数10_文本", + desc: "", + type: "string", + exampleValue: "/" + }, + { + id: NumberInt("10"), + name: "参数11_链接文本", + desc: "", + type: "string", + exampleValue: "工业品" + }, + { + id: NumberInt("11"), + name: "参数12_链接地址", + desc: "", + type: "string", + exampleValue: "https://pro.jd.com/mall/active/2u2DR1dUiK34csAE3DqmcG8aXvUK/index.html" + } + ], + url: "https://www.jd.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("634c5bbeac994513c1407811"), + containJudge: false, + desc: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2"), + NumberInt("5") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jd.com", + links: "https://www.jd.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("5"), + url: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0", + links: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[contains(@class, \"cs-source\")]//span[contains(@class, 'text-ellipsis')][1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("4"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "经常戴耳机危害 - 语音科普 - 博禾医生" + }, + { + num: NumberInt("1"), + value: "经常戴耳机有什么危害 - 博禾微视 - 博禾医生" + }, + { + num: NumberInt("2"), + value: "经常戴耳机耳朵会不会聋 - 专家文章 - 博禾医生" + }, + { + num: NumberInt("3"), + value: "长时间戴耳机听歌或致耳聋-名医在线网" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("2"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop_Click", + sequence: [ + NumberInt("3"), + NumberInt("6") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//span[contains(text(), \"下一页\")]/../..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("5"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("6"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"s-dom-f0607f20\"]/div[1]/div[1]/a[7]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + } + ], + id: NumberInt("6"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_Click_1", + nodeId: NumberInt("5"), + nodeName: "Loop_Click", + desc: "循环Loop_Click执行的次数(0代表无限循环)", + type: "int", + exampleValue: NumberInt("5"), + value: NumberInt("5") + } + ], + links: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0", + name: "toutiao_authors", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "经常戴耳机危害 - 语音科普 - 博禾医生" + } + ], + url: "https://so.toutiao.com/search?dvpf=pc&source=pagination&keyword=长期戴耳机听音乐会怎样?或许会造成耳聋,且很难恢复&pd=synthesis&action_type=pagination&page_num=0" +} ); +db.getCollection("services").insert( { + _id: ObjectId("634e68049dc2355e111bdd09"), + containJudge: false, + desc: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8", + links: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_链接文本", + desc: "", + relativeXpath: "(//a[1][contains(@class, 'index_alink')])[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "明阳智慧能源集团股份公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: false, + name: "参数2_链接地址", + desc: "", + relativeXpath: "(//a[1][contains(@class, 'index_alink')])[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.tianyancha.com/company/3030870614" + } + ] + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8" + } + ], + links: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8", + name: "tianyancha_company_name", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "明阳智慧能源集团股份公司" + }, + { + id: NumberInt("1"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3030870614" + } + ], + url: "https://www.tianyancha.com/search?key=%E6%98%8E%E9%98%B3%E6%99%BA%E6%85%A7%E8%83%BD%E6%BA%90%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E5%85%AC%E5%8F%B8" +} ); +db.getCollection("services").insert( { + _id: ObjectId("634f2de57e45788f5558dd34"), + containJudge: false, + desc: "https://www.tianyancha.com/company/3011939024/jingzhuang", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("9"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[21]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop_URLLIST", + sequence: [ + NumberInt("5"), + NumberInt("17"), + NumberInt("7") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("10"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[23]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[12]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("9"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//tbody//tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("11"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "供应商名称", + desc: "", + relativeXpath: "//div[contains(@class,\"right-name\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "北京前沿信安科技股份有限公司" + }, + { + num: NumberInt("2"), + value: "江苏中信博新能源科技股份有限公司" + }, + { + num: NumberInt("3"), + value: "大连连城数控机器股份有限公司" + }, + { + num: NumberInt("4"), + value: "索拉特特种玻璃(江苏)股份有限公司" + }, + { + num: NumberInt("5"), + value: "正泰集团股份有限公司" + }, + { + num: NumberInt("6"), + value: "江苏科强新材料股份有限公司" + }, + { + num: NumberInt("7"), + value: "湖南华菱线缆股份有限公司" + }, + { + num: NumberInt("8"), + value: "明冠新材料股份有限公司" + }, + { + num: NumberInt("9"), + value: "浙江中晶科技股份有限公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "供应商日期", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022-04-28" + }, + { + num: NumberInt("1"), + value: "2022-04-28" + }, + { + num: NumberInt("2"), + value: "2022-04-28" + }, + { + num: NumberInt("3"), + value: "2022-04-27" + }, + { + num: NumberInt("4"), + value: "2022-04-08" + }, + { + num: NumberInt("5"), + value: "2022-03-08" + }, + { + num: NumberInt("6"), + value: "2022-01-18" + }, + { + num: NumberInt("7"), + value: "2021-02-02" + }, + { + num: NumberInt("8"), + value: "2020-12-04" + }, + { + num: NumberInt("9"), + value: "2020-12-01" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "供应商条数", + desc: "", + relativeXpath: "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("3"), + value: "查看全部5条采购数据" + }, + { + num: NumberInt("8"), + value: "查看全部5条采购数据" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("14"), + NumberInt("13") + ], + isInLoop: true, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[22]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("14"), + parentId: NumberInt("6"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("15"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "客户名称", + desc: "", + relativeXpath: "//div[contains(@class,\"right-name\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "华电新能源集团股份有限公司" + }, + { + num: NumberInt("2"), + value: "中国华电集团物资有限公司" + }, + { + num: NumberInt("3"), + value: "中广核楚雄大姚风力发电有限公司" + }, + { + num: NumberInt("4"), + value: "悦达资本股份有限公司" + }, + { + num: NumberInt("5"), + value: "阳光中科(福建)能源股份有限公司" + }, + { + num: NumberInt("6"), + value: "河北华电混合蓄能水电有限公司" + }, + { + num: NumberInt("7"), + value: "中广核(北京)新能源科技有限公司" + }, + { + num: NumberInt("8"), + value: "天合光能股份有限公司" + }, + { + num: NumberInt("9"), + value: "中广核乌海新能源有限公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "客户日期", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022-07-01" + }, + { + num: NumberInt("1"), + value: "2022-04-28" + }, + { + num: NumberInt("2"), + value: "2022-03-16" + }, + { + num: NumberInt("3"), + value: "2021-10-15" + }, + { + num: NumberInt("4"), + value: "2021-04-30" + }, + { + num: NumberInt("5"), + value: "2021-04-29" + }, + { + num: NumberInt("6"), + value: "2021-03-26" + }, + { + num: NumberInt("7"), + value: "2020-07-09" + }, + { + num: NumberInt("8"), + value: "2020-05-21" + }, + { + num: NumberInt("9"), + value: "2017-11-01" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "客户条数", + desc: "", + relativeXpath: "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("2"), + value: "https://www.tianyancha.com/bid/e2754d21e3f8474b80bea3e02fa1fea4" + }, + { + num: NumberInt("3"), + value: "https://www.tianyancha.com/bid/28f255e62df04a8688fb79553e7dc2f7" + }, + { + num: NumberInt("6"), + value: "https://www.tianyancha.com/bid/206ba6728ded11ebb7630c42a1b79396" + }, + { + num: NumberInt("7"), + value: "https://www.tianyancha.com/bid/f406750dc5f311ea85737cd30aeb144c" + }, + { + num: NumberInt("9"), + value: "https://www.tianyancha.com/bid/ec067ad3cb9a11e985737cd30aeb144c" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("16"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("17"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "//h1[contains(@class,\"company\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "隆基绿能科技股份有限公司" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "loopText_0", + nodeId: NumberInt("6"), + nodeName: "Loop_URLLIST", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n", + value: "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("7"), + nodeName: "Loop", + desc: "循环Loop执行的次数(0代表无限循环)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + }, + { + id: NumberInt("2"), + name: "urlList_2", + nodeId: NumberInt("9"), + nodeName: "Open Page", + value: "https://www.tianyancha.com/company/3011939024/jingzhuang", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3011939024/jingzhuang" + } + ], + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + name: "tianyancha_detail_2", + outputParameters: [ + { + id: NumberInt("0"), + name: "供应商名称", + desc: "", + type: "string", + exampleValue: "北京前沿信安科技股份有限公司" + }, + { + id: NumberInt("1"), + name: "供应商日期", + desc: "", + type: "string", + exampleValue: "2022-04-28" + }, + { + id: NumberInt("2"), + name: "供应商条数", + desc: "", + type: "string", + exampleValue: "查看全部5条采购数据" + }, + { + id: NumberInt("3"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "隆基绿能科技股份有限公司" + } + ], + url: "https://www.tianyancha.com/company/3011939024/jingzhuang" +} ); +db.getCollection("services").insert( { + _id: ObjectId("634f2fa09dc2355e111bdd1c"), + containJudge: false, + desc: "https://www.tianyancha.com/company/3011939024/jingzhuang", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("9"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[21]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5"), + NumberInt("17"), + NumberInt("12") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://www.tianyancha.com/company/3011939024/jingzhuang", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("10"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[23]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[12]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("9"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "供应商名称", + desc: "", + relativeXpath: "//div[contains(@class,\"right-name\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "北京前沿信安科技股份有限公司" + }, + { + num: NumberInt("2"), + value: "江苏中信博新能源科技股份有限公司" + }, + { + num: NumberInt("3"), + value: "大连连城数控机器股份有限公司" + }, + { + num: NumberInt("4"), + value: "索拉特特种玻璃(江苏)股份有限公司" + }, + { + num: NumberInt("5"), + value: "正泰集团股份有限公司" + }, + { + num: NumberInt("6"), + value: "江苏科强新材料股份有限公司" + }, + { + num: NumberInt("7"), + value: "湖南华菱线缆股份有限公司" + }, + { + num: NumberInt("8"), + value: "明冠新材料股份有限公司" + }, + { + num: NumberInt("9"), + value: "浙江中晶科技股份有限公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "供应商日期", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022-04-28" + }, + { + num: NumberInt("1"), + value: "2022-04-28" + }, + { + num: NumberInt("2"), + value: "2022-04-28" + }, + { + num: NumberInt("3"), + value: "2022-04-27" + }, + { + num: NumberInt("4"), + value: "2022-04-08" + }, + { + num: NumberInt("5"), + value: "2022-03-08" + }, + { + num: NumberInt("6"), + value: "2022-01-18" + }, + { + num: NumberInt("7"), + value: "2021-02-02" + }, + { + num: NumberInt("8"), + value: "2020-12-04" + }, + { + num: NumberInt("9"), + value: "2020-12-01" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "供应商条数", + desc: "", + relativeXpath: "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("3"), + value: "查看全部5条采购数据" + }, + { + num: NumberInt("8"), + value: "查看全部5条采购数据" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("5"), + index: NumberInt("12"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("14"), + NumberInt("13") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("13"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[22]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("14"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("15"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "客户名称", + desc: "", + relativeXpath: "//div[contains(@class,\"right-name\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "华电新能源集团股份有限公司" + }, + { + num: NumberInt("2"), + value: "中国华电集团物资有限公司" + }, + { + num: NumberInt("3"), + value: "中广核楚雄大姚风力发电有限公司" + }, + { + num: NumberInt("4"), + value: "悦达资本股份有限公司" + }, + { + num: NumberInt("5"), + value: "阳光中科(福建)能源股份有限公司" + }, + { + num: NumberInt("6"), + value: "河北华电混合蓄能水电有限公司" + }, + { + num: NumberInt("7"), + value: "中广核(北京)新能源科技有限公司" + }, + { + num: NumberInt("8"), + value: "天合光能股份有限公司" + }, + { + num: NumberInt("9"), + value: "中广核乌海新能源有限公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "客户日期", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022-07-01" + }, + { + num: NumberInt("1"), + value: "2022-04-28" + }, + { + num: NumberInt("2"), + value: "2022-03-16" + }, + { + num: NumberInt("3"), + value: "2021-10-15" + }, + { + num: NumberInt("4"), + value: "2021-04-30" + }, + { + num: NumberInt("5"), + value: "2021-04-29" + }, + { + num: NumberInt("6"), + value: "2021-03-26" + }, + { + num: NumberInt("7"), + value: "2020-07-09" + }, + { + num: NumberInt("8"), + value: "2020-05-21" + }, + { + num: NumberInt("9"), + value: "2017-11-01" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "客户条数", + desc: "", + relativeXpath: "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("2"), + value: "https://www.tianyancha.com/bid/e2754d21e3f8474b80bea3e02fa1fea4" + }, + { + num: NumberInt("3"), + value: "https://www.tianyancha.com/bid/28f255e62df04a8688fb79553e7dc2f7" + }, + { + num: NumberInt("6"), + value: "https://www.tianyancha.com/bid/206ba6728ded11ebb7630c42a1b79396" + }, + { + num: NumberInt("7"), + value: "https://www.tianyancha.com/bid/f406750dc5f311ea85737cd30aeb144c" + }, + { + num: NumberInt("9"), + value: "https://www.tianyancha.com/bid/ec067ad3cb9a11e985737cd30aeb144c" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("16"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("17"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "//h1[contains(@class,\"company\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "隆基绿能科技股份有限公司" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "loopText_0", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3011939024/jingzhuang", + value: "https://www.tianyancha.com/company/3011939024/jingzhuang" + }, + { + id: NumberInt("1"), + name: "urlList_1", + nodeId: NumberInt("9"), + nodeName: "Open Page", + value: "https://www.tianyancha.com/company/3011939024/jingzhuang", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3011939024/jingzhuang" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("12"), + nodeName: "Loop", + desc: "循环Loop执行的次数(0代表无限循环)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + name: "tianyancha_detail_2", + outputParameters: [ + { + id: NumberInt("0"), + name: "客户名称", + desc: "", + type: "string", + exampleValue: "华电新能源集团股份有限公司" + }, + { + id: NumberInt("1"), + name: "客户日期", + desc: "", + type: "string", + exampleValue: "2022-07-01" + }, + { + id: NumberInt("2"), + name: "客户条数", + desc: "", + type: "string", + exampleValue: "https://www.tianyancha.com/bid/e2754d21e3f8474b80bea3e02fa1fea4" + }, + { + id: NumberInt("3"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "隆基绿能科技股份有限公司" + } + ], + url: "https://www.tianyancha.com/company/3011939024/jingzhuang" +} ); +db.getCollection("services").insert( { + _id: ObjectId("634fb5ef7e45788f5558dd3b"), + containJudge: false, + desc: "https://www.tianyancha.com/company/3011939024/jingzhuang", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("9"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[21]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop_URLLIST", + sequence: [ + NumberInt("5"), + NumberInt("17"), + NumberInt("7") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("10"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[23]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[12]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("9"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tianyancha.com/company/3011939024/jingzhuang", + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"suppliesV2\"]//tbody//tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("11"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "供应商名称", + desc: "", + relativeXpath: "//div[contains(@class,\"right-name\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "北京前沿信安科技股份有限公司" + }, + { + num: NumberInt("2"), + value: "江苏中信博新能源科技股份有限公司" + }, + { + num: NumberInt("3"), + value: "大连连城数控机器股份有限公司" + }, + { + num: NumberInt("4"), + value: "索拉特特种玻璃(江苏)股份有限公司" + }, + { + num: NumberInt("5"), + value: "正泰集团股份有限公司" + }, + { + num: NumberInt("6"), + value: "江苏科强新材料股份有限公司" + }, + { + num: NumberInt("7"), + value: "湖南华菱线缆股份有限公司" + }, + { + num: NumberInt("8"), + value: "明冠新材料股份有限公司" + }, + { + num: NumberInt("9"), + value: "浙江中晶科技股份有限公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "供应商日期", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022-04-28" + }, + { + num: NumberInt("1"), + value: "2022-04-28" + }, + { + num: NumberInt("2"), + value: "2022-04-28" + }, + { + num: NumberInt("3"), + value: "2022-04-27" + }, + { + num: NumberInt("4"), + value: "2022-04-08" + }, + { + num: NumberInt("5"), + value: "2022-03-08" + }, + { + num: NumberInt("6"), + value: "2022-01-18" + }, + { + num: NumberInt("7"), + value: "2021-02-02" + }, + { + num: NumberInt("8"), + value: "2020-12-04" + }, + { + num: NumberInt("9"), + value: "2020-12-01" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "供应商条数", + desc: "", + relativeXpath: "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("3"), + value: "查看全部5条采购数据" + }, + { + num: NumberInt("8"), + value: "查看全部5条采购数据" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("14"), + NumberInt("13") + ], + isInLoop: true, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//div[@class=\"num\"]//i[contains(@class,'next')]/..", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-root\"]/div[3]/div[1]/div[3]/div[1]/div[2]/div[2]/div[1]/div[22]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("14"), + parentId: NumberInt("6"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//div[@data-dim=\"clientsV2\"]//tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("15"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "客户名称", + desc: "", + relativeXpath: "//div[contains(@class,\"right-name\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "华电新能源集团股份有限公司" + }, + { + num: NumberInt("2"), + value: "中国华电集团物资有限公司" + }, + { + num: NumberInt("3"), + value: "中广核楚雄大姚风力发电有限公司" + }, + { + num: NumberInt("4"), + value: "悦达资本股份有限公司" + }, + { + num: NumberInt("5"), + value: "阳光中科(福建)能源股份有限公司" + }, + { + num: NumberInt("6"), + value: "河北华电混合蓄能水电有限公司" + }, + { + num: NumberInt("7"), + value: "中广核(北京)新能源科技有限公司" + }, + { + num: NumberInt("8"), + value: "天合光能股份有限公司" + }, + { + num: NumberInt("9"), + value: "中广核乌海新能源有限公司" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "客户日期", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022-07-01" + }, + { + num: NumberInt("1"), + value: "2022-04-28" + }, + { + num: NumberInt("2"), + value: "2022-03-16" + }, + { + num: NumberInt("3"), + value: "2021-10-15" + }, + { + num: NumberInt("4"), + value: "2021-04-30" + }, + { + num: NumberInt("5"), + value: "2021-04-29" + }, + { + num: NumberInt("6"), + value: "2021-03-26" + }, + { + num: NumberInt("7"), + value: "2020-07-09" + }, + { + num: NumberInt("8"), + value: "2020-05-21" + }, + { + num: NumberInt("9"), + value: "2017-11-01" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "客户条数", + desc: "", + relativeXpath: "/td[2]/div[1]/div[2]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("2"), + value: "https://www.tianyancha.com/bid/e2754d21e3f8474b80bea3e02fa1fea4" + }, + { + num: NumberInt("3"), + value: "https://www.tianyancha.com/bid/28f255e62df04a8688fb79553e7dc2f7" + }, + { + num: NumberInt("6"), + value: "https://www.tianyancha.com/bid/206ba6728ded11ebb7630c42a1b79396" + }, + { + num: NumberInt("7"), + value: "https://www.tianyancha.com/bid/f406750dc5f311ea85737cd30aeb144c" + }, + { + num: NumberInt("9"), + value: "https://www.tianyancha.com/bid/ec067ad3cb9a11e985737cd30aeb144c" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("16"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("17"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "//h1[contains(@class,\"company\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "隆基绿能科技股份有限公司" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("11"), + inputParameters: [ + { + id: NumberInt("0"), + name: "loopText_0", + nodeId: NumberInt("6"), + nodeName: "Loop_URLLIST", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n", + value: "https://www.tianyancha.com/company/3011939024/jingzhuang\nhttps://www.tianyancha.com/company/3028691107/jingzhuang\nhttps://www.tianyancha.com/company/3329251696/jingzhuang\n" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("7"), + nodeName: "Loop", + desc: "循环Loop执行的次数(0代表无限循环)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + }, + { + id: NumberInt("2"), + name: "urlList_2", + nodeId: NumberInt("9"), + nodeName: "Open Page", + value: "https://www.tianyancha.com/company/3011939024/jingzhuang", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tianyancha.com/company/3011939024/jingzhuang" + } + ], + links: "https://www.tianyancha.com/company/3011939024/jingzhuang", + name: "tianyancha_detail_1", + outputParameters: [ + { + id: NumberInt("0"), + name: "供应商名称", + desc: "", + type: "string", + exampleValue: "北京前沿信安科技股份有限公司" + }, + { + id: NumberInt("1"), + name: "供应商日期", + desc: "", + type: "string", + exampleValue: "2022-04-28" + }, + { + id: NumberInt("2"), + name: "供应商条数", + desc: "", + type: "string", + exampleValue: "查看全部5条采购数据" + }, + { + id: NumberInt("3"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "隆基绿能科技股份有限公司" + } + ], + url: "https://www.tianyancha.com/company/3011939024/jingzhuang" +} ); +db.getCollection("services").insert( { + _id: ObjectId("6350e4b89dc2355e111bdd1e"), + containJudge: false, + desc: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("5") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("3"), + url: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", + links: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//a[contains(@class, 'flex-row')][1]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/button", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "63.3万获赞" + }, + { + num: NumberInt("1"), + value: "10.3万粉丝" + }, + { + num: NumberInt("2"), + value: "5关注" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("3"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数2_文本", + desc: "", + relativeXpath: "//p[contains(@class, 'user-desc')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "简介:关注小荷医典,获取“权威、科学、实用、易懂”的医学信息" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数3_文本", + desc: "", + relativeXpath: "//div[contains(@class, 'relation-stat')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "63.3万获赞" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "//div[contains(@class, 'detail')]//span[contains(@class, 'name')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "小荷医典" + } + ] + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_链接地址", + desc: "", + relativeXpath: "//a[@class=\"avatar\"]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: false, + name: "参数6_链接地址", + desc: "", + relativeXpath: "//a[contains(@class, 'flex-row')][1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://so.toutiao.com/search/jump?url=https%3A%2F%2Fwww.toutiao.com%2Fc%2Fuser%2F95347840570%2F&aid=4916&jtoken=804fb410ca0c16fb0980b0a082d0c707d7ae7fb539575218f9e98534f7a9a598c00b8d749a4eb8859d5df7b1b0a122356b0b56810577c9f74a5faf9d6c18f340" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("7"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media" + } + ], + links: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=国家反诈中心&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media\r\nhttps://so.toutiao.com/search?dvpf=pc&source=input&keyword=光明网&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media", + name: "toutiao_author_desc", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数2_文本", + desc: "", + type: "string", + exampleValue: "简介:关注小荷医典,获取“权威、科学、实用、易懂”的医学信息" + }, + { + id: NumberInt("1"), + name: "参数3_文本", + desc: "", + type: "string", + exampleValue: "63.3万获赞" + }, + { + id: NumberInt("2"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "小荷医典" + }, + { + id: NumberInt("3"), + name: "参数1_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.toutiao.com/c/user/token/MS4wLjABAAAAMpLV_1BmiyKp0yLcLZb1xJjVxmOnwObqydIzTC2ngoQ/?source=profile" + } + ], + url: "https://so.toutiao.com/search?dvpf=pc&source=input&keyword=小荷医典&pd=user&action_type=search_subtab_switch&page_num=0&from=media&cur_tab_title=media" +} ); +db.getCollection("services").insert( { + _id: ObjectId("6350e9217e45788f5558dd3f"), + containJudge: false, + desc: "https://suzhoutaohuawu.com/", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("3"), + url: "https://suzhoutaohuawu.com/", + links: "https://suzhoutaohuawu.com/", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[1]/input[1]", + wait: NumberInt("0"), + value: "ii" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[2]/svg[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数1_文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "DJSODA性感土嗨😍😘💕❤️🧡💛💚💙💜💗" + }, + { + num: NumberInt("1"), + value: "关于现视研正确打开姿势的另一可能性" + }, + { + num: NumberInt("2"), + value: "DEMO-周杰伦" + }, + { + num: NumberInt("3"), + value: "【4K】手机和相机如何高音质直播RØDECasterPro直播案例【赵君日记Vlog154】" + }, + { + num: NumberInt("4"), + value: "用古董Apple上网、刷贴吧!" + }, + { + num: NumberInt("5"), + value: "隔屏疼!2岁娃被1碗泡面致深度烫伤,家人处理方式令医生叹息" + }, + { + num: NumberInt("6"), + value: "【4K治愈】真实存在的动漫场景,在新疆!《伊犁的童话:鹰的国》" + }, + { + num: NumberInt("7"), + value: "【高中物理】(老教材)电学篇(50小时学完高中物理系列)" + }, + { + num: NumberInt("8"), + value: "你一定听过的《Jade》主打歌丨你有心" + }, + { + num: NumberInt("9"), + value: "他的每个眼神都写满了爱你,你又怎么舍得让他难过!!!穆川眼神合集" + }, + { + num: NumberInt("10"), + value: "防暴利器—世界警用防暴装甲车大盘点#防暴车#SWAT#剑齿虎" + }, + { + num: NumberInt("11"), + value: "地表最强“物理黑客”在线超度!!!【WATCHDOGS-最骚黑客】" + }, + { + num: NumberInt("12"), + value: "【熟肉】6分钟听完31位音乐家的52首古典音乐_第二季古典音乐混搭_ClassicalMusicMashup" + }, + { + num: NumberInt("13"), + value: "⚡️坤坤奥特曼⚡️" + }, + { + num: NumberInt("14"), + value: "◈黑执事▪︎𝕮𝖍𝖎𝖑𝖉𝖗𝖊𝖓𝕺𝖋𝕿𝖍𝖊𝕮𝖔𝖗𝖓◈" + }, + { + num: NumberInt("15"), + value: "当一名金属鼓手迫于生计不得不给儿歌伴奏时" + }, + { + num: NumberInt("16"), + value: "街头霸王~跳绳" + }, + { + num: NumberInt("17"), + value: "嘎狼" + }, + { + num: NumberInt("18"), + value: "【试试就逝世】极度舒适老鼠去世合集()" + }, + { + num: NumberInt("19"), + value: "【影视解说】大幻术师:2022年钱小豪新作,幻术升级谜案重重,神秘凶手竟用法术杀人" + }, + { + num: NumberInt("20"), + value: "【要不要来条尾巴?】-Furtail电动体感尾巴" + }, + { + num: NumberInt("21"), + value: "徐乐同《回家之路(《独行月球》电影插曲)》" + }, + { + num: NumberInt("22"), + value: "[实教]喜欢一个人的眼神是藏不住的!轻井泽的眼神变化合集" + }, + { + num: NumberInt("23"), + value: "【请回答1988】一笑懸命每天一遍防止抑郁" + }, + { + num: NumberInt("24"), + value: "纽约|因为梦想和自由" + }, + { + num: NumberInt("25"), + value: "【在下萝莉控】labo拆箱&试玩" + }, + { + num: NumberInt("26"), + value: "第94集TED原声跟读笔记人的一生,其实只有9年(视频笔记版)" + }, + { + num: NumberInt("27"), + value: "【国产】在勾引中学会爱2017【第一至四集】" + }, + { + num: NumberInt("28"), + value: "《DEEMO》概念前导片" + }, + { + num: NumberInt("29"), + value: "军迷圈那些趣图-汉斯篇" + }, + { + num: NumberInt("30"), + value: "张叔平:不让梳平,就梳炸。丑不到你算我输!黄奕/何润东/秦岚/陈冠霖/杨蕊/郑国霖/陈怡蓉/冯绍峰《风云2》" + }, + { + num: NumberInt("31"), + value: "新人快速进阶!素组高达玩旧化!迪叔成型色马克笔拟真旧化大挑战之SDBBZAKU夏亚红扎古大神小课堂" + }, + { + num: NumberInt("32"), + value: "【意境向】Dreamspt." + }, + { + num: NumberInt("33"), + value: "小学生:??" + }, + { + num: NumberInt("34"), + value: "十年前那些不用氪金的手游,到底有多么上头?【找游工具人01】" + }, + { + num: NumberInt("35"), + value: "【霆峰·友谊向】不怕胖里就戳进来不甜不要钱" + }, + { + num: NumberInt("36"), + value: "1991年伊丽莎白二世在美国会演讲QueenElizabethAddresstoCongress(1991)" + }, + { + num: NumberInt("37"), + value: "【4K60帧】森高千里-見て(LOOK)[見てスペシャル~ライヴin汐留PIT4.15.’89]AI修复" + }, + { + num: NumberInt("38"), + value: "古川雄辉丨他说英文时真的好迷人听古川男神的流利英文" + }, + { + num: NumberInt("39"), + value: "第87集油管3000万播放量演讲做人一定要坚持!(视频笔记版)" + }, + { + num: NumberInt("40"), + value: "居然真有人把虚假宣传广告做成游戏了???【找游工具人16】" + }, + { + num: NumberInt("41"), + value: "【一镜到底】赶上兔兔首发车!全网最快最美TWICE-TalkthatTalk全曲翻跳|Kpop翻跳|byChannel" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数2_文本", + desc: "", + relativeXpath: "/em[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "II" + }, + { + num: NumberInt("1"), + value: "II" + }, + { + num: NumberInt("2"), + value: "II" + }, + { + num: NumberInt("3"), + value: "II" + }, + { + num: NumberInt("4"), + value: "II" + }, + { + num: NumberInt("5"), + value: "II" + }, + { + num: NumberInt("6"), + value: "II" + }, + { + num: NumberInt("7"), + value: "II" + }, + { + num: NumberInt("8"), + value: "II" + }, + { + num: NumberInt("9"), + value: "II" + }, + { + num: NumberInt("10"), + value: "II" + }, + { + num: NumberInt("11"), + value: "II" + }, + { + num: NumberInt("12"), + value: "II" + }, + { + num: NumberInt("13"), + value: "II" + }, + { + num: NumberInt("14"), + value: "II" + }, + { + num: NumberInt("15"), + value: "II" + }, + { + num: NumberInt("16"), + value: "II" + }, + { + num: NumberInt("17"), + value: "II" + }, + { + num: NumberInt("18"), + value: "II" + }, + { + num: NumberInt("19"), + value: "II" + }, + { + num: NumberInt("20"), + value: "II" + }, + { + num: NumberInt("21"), + value: "II" + }, + { + num: NumberInt("22"), + value: "II" + }, + { + num: NumberInt("23"), + value: "II" + }, + { + num: NumberInt("24"), + value: "II" + }, + { + num: NumberInt("25"), + value: "ii" + }, + { + num: NumberInt("26"), + value: "II" + }, + { + num: NumberInt("27"), + value: "II" + }, + { + num: NumberInt("28"), + value: "II" + }, + { + num: NumberInt("29"), + value: "II" + }, + { + num: NumberInt("30"), + value: "II" + }, + { + num: NumberInt("31"), + value: "II" + }, + { + num: NumberInt("32"), + value: "II" + }, + { + num: NumberInt("33"), + value: "ii" + }, + { + num: NumberInt("34"), + value: "II" + }, + { + num: NumberInt("35"), + value: "II" + }, + { + num: NumberInt("36"), + value: "II" + }, + { + num: NumberInt("37"), + value: "II" + }, + { + num: NumberInt("38"), + value: "II" + }, + { + num: NumberInt("39"), + value: "II" + }, + { + num: NumberInt("40"), + value: "II" + }, + { + num: NumberInt("41"), + value: "II" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("4"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://suzhoutaohuawu.com/", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://suzhoutaohuawu.com/" + } + ], + links: "https://suzhoutaohuawu.com/", + name: "刷点击量", + outputParameters: [ ], + url: "https://www.bilibili.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("635194957e45788f5558dd46"), + containJudge: false, + desc: "https://suzhoutaohuawu.com/", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("2"), + index: NumberInt("1"), + parentId: NumberInt("1"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://suzhoutaohuawu.com/", + links: "https://suzhoutaohuawu.com/", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("1"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "3", + pathList: "", + textList: "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664\n665\n666\n667\n668\n669\n670\n671\n672\n673\n674\n675\n676\n677\n678\n679\n680\n681\n682\n683\n684\n685\n686\n687\n688\n689\n690\n691\n692\n693\n694\n695\n696\n697\n698\n699\n700\n701\n702\n703\n704\n705\n706\n707\n708\n709\n710\n711\n712\n713\n714\n715\n716\n717\n718\n719\n720\n721\n722\n723\n724\n725\n726\n727\n728\n729\n730\n731\n732\n733\n734\n735\n736\n737\n738\n739\n740\n741\n742\n743\n744\n745\n746\n747\n748\n749\n750\n751\n752\n753\n754\n755\n756\n757\n758\n759\n760\n761\n762\n763\n764\n765\n766\n767\n768\n769\n770\n771\n772\n773\n774\n775\n776\n777\n778\n779\n780\n781\n782\n783\n784\n785\n786\n787\n788\n789\n790\n791\n792\n793\n794\n795\n796\n797\n798\n799\n800\n801\n802\n803\n804\n805\n806\n807\n808\n809\n810\n811\n812\n813\n814\n815\n816\n817\n818\n819\n820\n821\n822\n823\n824\n825\n826\n827\n828\n829\n830\n831\n832\n833\n834\n835\n836\n837\n838\n839\n840\n841\n842\n843\n844\n845\n846\n847\n848\n849\n850\n851\n852\n853\n854\n855\n856\n857\n858\n859\n860\n861\n862\n863\n864\n865\n866\n867\n868\n869\n870\n871\n872\n873\n874\n875\n876\n877\n878\n879\n880\n881\n882\n883\n884\n885\n886\n887\n888\n889\n890\n891\n892\n893\n894\n895\n896\n897\n898\n899\n900\n901\n902\n903\n904\n905\n906\n907\n908\n909\n910\n911\n912\n913\n914\n915\n916\n917\n918\n919\n920\n921\n922\n923\n924\n925\n926\n927\n928\n929\n930\n931\n932\n933\n934\n935\n936\n937\n938\n939\n940\n941\n942\n943\n944\n945\n946\n947\n948\n949\n950\n951\n952\n953\n954\n955\n956\n957\n958\n959\n960\n961\n962\n963\n964\n965\n966\n967\n968\n969\n970\n971\n972\n973\n974\n975\n976\n977\n978\n979\n980\n981\n982\n983\n984\n985\n986\n987\n988\n989\n990\n991\n992\n993\n994\n995\n996\n997\n998\n999\n1000\n1001\n1002\n1003\n1004\n1005\n1006\n1007\n1008\n1009\n1010\n1011\n1012\n1013\n1014\n1015\n1016\n1017\n1018\n1019\n1020\n1021\n1022\n1023\n1024\n1025\n1026\n1027\n1028\n1029\n1030\n1031\n1032\n1033\n1034\n1035\n1036\n1037\n1038\n1039\n1040\n1041\n1042\n1043\n1044\n1045\n1046\n1047\n1048\n1049\n1050\n1051\n1052\n1053\n1054\n1055\n1056\n1057\n1058\n1059\n1060\n1061\n1062\n1063\n1064\n1065\n1066\n1067\n1068\n1069\n1070\n1071\n1072\n1073\n1074\n1075\n1076\n1077\n1078\n1079\n1080\n1081\n1082\n1083\n1084\n1085\n1086\n1087\n1088\n1089\n1090\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("1"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("2"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "/html/body/div[1]/main[1]/div[1]/div[1]/div[1]/div[1]/h2[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: " Suzhou Taohuawu Woodcut New Year Pictures 苏州桃花坞木刻年画" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://suzhoutaohuawu.com/", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://suzhoutaohuawu.com/" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("2"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664\n665\n666\n667\n668\n669\n670\n671\n672\n673\n674\n675\n676\n677\n678\n679\n680\n681\n682\n683\n684\n685\n686\n687\n688\n689\n690\n691\n692\n693\n694\n695\n696\n697\n698\n699\n700\n701\n702\n703\n704\n705\n706\n707\n708\n709\n710\n711\n712\n713\n714\n715\n716\n717\n718\n719\n720\n721\n722\n723\n724\n725\n726\n727\n728\n729\n730\n731\n732\n733\n734\n735\n736\n737\n738\n739\n740\n741\n742\n743\n744\n745\n746\n747\n748\n749\n750\n751\n752\n753\n754\n755\n756\n757\n758\n759\n760\n761\n762\n763\n764\n765\n766\n767\n768\n769\n770\n771\n772\n773\n774\n775\n776\n777\n778\n779\n780\n781\n782\n783\n784\n785\n786\n787\n788\n789\n790\n791\n792\n793\n794\n795\n796\n797\n798\n799\n800\n801\n802\n803\n804\n805\n806\n807\n808\n809\n810\n811\n812\n813\n814\n815\n816\n817\n818\n819\n820\n821\n822\n823\n824\n825\n826\n827\n828\n829\n830\n831\n832\n833\n834\n835\n836\n837\n838\n839\n840\n841\n842\n843\n844\n845\n846\n847\n848\n849\n850\n851\n852\n853\n854\n855\n856\n857\n858\n859\n860\n861\n862\n863\n864\n865\n866\n867\n868\n869\n870\n871\n872\n873\n874\n875\n876\n877\n878\n879\n880\n881\n882\n883\n884\n885\n886\n887\n888\n889\n890\n891\n892\n893\n894\n895\n896\n897\n898\n899\n900\n901\n902\n903\n904\n905\n906\n907\n908\n909\n910\n911\n912\n913\n914\n915\n916\n917\n918\n919\n920\n921\n922\n923\n924\n925\n926\n927\n928\n929\n930\n931\n932\n933\n934\n935\n936\n937\n938\n939\n940\n941\n942\n943\n944\n945\n946\n947\n948\n949\n950\n951\n952\n953\n954\n955\n956\n957\n958\n959\n960\n961\n962\n963\n964\n965\n966\n967\n968\n969\n970\n971\n972\n973\n974\n975\n976\n977\n978\n979\n980\n981\n982\n983\n984\n985\n986\n987\n988\n989\n990\n991\n992\n993\n994\n995\n996\n997\n998\n999\n1000\n1001\n1002\n1003\n1004\n1005\n1006\n1007\n1008\n1009\n1010\n1011\n1012\n1013\n1014\n1015\n1016\n1017\n1018\n1019\n1020\n1021\n1022\n1023\n1024\n1025\n1026\n1027\n1028\n1029\n1030\n1031\n1032\n1033\n1034\n1035\n1036\n1037\n1038\n1039\n1040\n1041\n1042\n1043\n1044\n1045\n1046\n1047\n1048\n1049\n1050\n1051\n1052\n1053\n1054\n1055\n1056\n1057\n1058\n1059\n1060\n1061\n1062\n1063\n1064\n1065\n1066\n1067\n1068\n1069\n1070\n1071\n1072\n1073\n1074\n1075\n1076\n1077\n1078\n1079\n1080\n1081\n1082\n1083\n1084\n1085\n1086\n1087\n1088\n1089\n1090\n", + value: "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664\n665\n666\n667\n668\n669\n670\n671\n672\n673\n674\n675\n676\n677\n678\n679\n680\n681\n682\n683\n684\n685\n686\n687\n688\n689\n690\n691\n692\n693\n694\n695\n696\n697\n698\n699\n700\n701\n702\n703\n704\n705\n706\n707\n708\n709\n710\n711\n712\n713\n714\n715\n716\n717\n718\n719\n720\n721\n722\n723\n724\n725\n726\n727\n728\n729\n730\n731\n732\n733\n734\n735\n736\n737\n738\n739\n740\n741\n742\n743\n744\n745\n746\n747\n748\n749\n750\n751\n752\n753\n754\n755\n756\n757\n758\n759\n760\n761\n762\n763\n764\n765\n766\n767\n768\n769\n770\n771\n772\n773\n774\n775\n776\n777\n778\n779\n780\n781\n782\n783\n784\n785\n786\n787\n788\n789\n790\n791\n792\n793\n794\n795\n796\n797\n798\n799\n800\n801\n802\n803\n804\n805\n806\n807\n808\n809\n810\n811\n812\n813\n814\n815\n816\n817\n818\n819\n820\n821\n822\n823\n824\n825\n826\n827\n828\n829\n830\n831\n832\n833\n834\n835\n836\n837\n838\n839\n840\n841\n842\n843\n844\n845\n846\n847\n848\n849\n850\n851\n852\n853\n854\n855\n856\n857\n858\n859\n860\n861\n862\n863\n864\n865\n866\n867\n868\n869\n870\n871\n872\n873\n874\n875\n876\n877\n878\n879\n880\n881\n882\n883\n884\n885\n886\n887\n888\n889\n890\n891\n892\n893\n894\n895\n896\n897\n898\n899\n900\n901\n902\n903\n904\n905\n906\n907\n908\n909\n910\n911\n912\n913\n914\n915\n916\n917\n918\n919\n920\n921\n922\n923\n924\n925\n926\n927\n928\n929\n930\n931\n932\n933\n934\n935\n936\n937\n938\n939\n940\n941\n942\n943\n944\n945\n946\n947\n948\n949\n950\n951\n952\n953\n954\n955\n956\n957\n958\n959\n960\n961\n962\n963\n964\n965\n966\n967\n968\n969\n970\n971\n972\n973\n974\n975\n976\n977\n978\n979\n980\n981\n982\n983\n984\n985\n986\n987\n988\n989\n990\n991\n992\n993\n994\n995\n996\n997\n998\n999\n1000\n1001\n1002\n1003\n1004\n1005\n1006\n1007\n1008\n1009\n1010\n1011\n1012\n1013\n1014\n1015\n1016\n1017\n1018\n1019\n1020\n1021\n1022\n1023\n1024\n1025\n1026\n1027\n1028\n1029\n1030\n1031\n1032\n1033\n1034\n1035\n1036\n1037\n1038\n1039\n1040\n1041\n1042\n1043\n1044\n1045\n1046\n1047\n1048\n1049\n1050\n1051\n1052\n1053\n1054\n1055\n1056\n1057\n1058\n1059\n1060\n1061\n1062\n1063\n1064\n1065\n1066\n1067\n1068\n1069\n1070\n1071\n1072\n1073\n1074\n1075\n1076\n1077\n1078\n1079\n1080\n1081\n1082\n1083\n1084\n1085\n1086\n1087\n1088\n1089\n1090\n" + } + ], + links: "https://suzhoutaohuawu.com/", + name: "clickrate", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: " Suzhou Taohuawu Woodcut New Year Pictures 苏州桃花坞木刻年画" + } + ], + url: "https://suzhoutaohuawu.com/" +} ); +db.getCollection("services").insert( { + _id: ObjectId("635949de7e45788f5558dd52"), + containJudge: true, + desc: "http://www.cdfgsanya.com/product-list.html?sw=%E5%B1%B1%E5%B4%8E12%E5%B9%B4%E5%A8%81%E5%A3%AB%E5%BF%8C%20700ml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("7") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("5"), + url: "http://www.cdfgsanya.com/product-list.html?sw=%E5%B1%B1%E5%B4%8E12%E5%B9%B4%E5%A8%81%E5%A3%AB%E5%BF%8C%20700ml", + links: "http://www.cdfgsanya.com/product-list.html?sw=山崎12年威士忌 700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑VSOP\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑名仕 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=卡慕干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=百龄坛17年威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪23年单一麦芽威士忌700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪珍藏桶单一纯麦威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=帝王苏格兰调和威士忌15年\nhttp://www.cdfgsanya.com/product-list.html?sw=艾柏迪12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑特醇1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=大摩12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=高原骑士雄鹰之翼16年\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰花格10年单一麦芽苏格兰威士忌\n", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("2"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4"), + NumberInt("3"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[4]/div[1]/div[1]/div/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("3"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[4]/div[1]/div[1]/div/a[1]", + wait: NumberInt("3"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("7"), + index: NumberInt("4"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_链接文本", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[4]/div[1]/div[1]/div[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "MARTELL 马爹利马爹利蓝带干邑公升装 1000ml" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: false, + name: "参数2_链接地址", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[4]/div[1]/div[1]/div[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ] + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/span[2]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "马爹利干邑VSOP" + } + ] + } + ] + } + }, + { + id: NumberInt("9"), + index: NumberInt("5"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数3_文本", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "¥1710.00" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数4_文本", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[5]/ul[1]/li[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "促销此商品专享9折" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("2"), + index: NumberInt("7"), + parentId: NumberInt("0"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("8"), + NumberInt("9") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("3"), + parentId: NumberInt("2"), + index: NumberInt("8"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition——无商品", + sequence: [ + NumberInt("10") + ], + isInLoop: false, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "没有符合条件的商品" + }, + position: NumberInt("0") + }, + { + id: NumberInt("4"), + parentId: NumberInt("2"), + index: NumberInt("9"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("2") + ], + isInLoop: false, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + }, + { + id: NumberInt("5"), + index: NumberInt("10"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_文本", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/span[2]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰花格10年单一麦芽苏格兰威士忌" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "http://www.cdfgsanya.com/product-list.html?sw=山崎12年威士忌 700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑VSOP\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑名仕 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=卡慕干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=百龄坛17年威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪23年单一麦芽威士忌700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪珍藏桶单一纯麦威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=帝王苏格兰调和威士忌15年\nhttp://www.cdfgsanya.com/product-list.html?sw=艾柏迪12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑特醇1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=大摩12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=高原骑士雄鹰之翼16年\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰花格10年单一麦芽苏格兰威士忌\n", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "http://www.cdfgsanya.com/product-list.html?sw=山崎12年威士忌 700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑VSOP\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑名仕 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=卡慕干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=百龄坛17年威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪23年单一麦芽威士忌700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪珍藏桶单一纯麦威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=帝王苏格兰调和威士忌15年\nhttp://www.cdfgsanya.com/product-list.html?sw=艾柏迪12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑特醇1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=大摩12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=高原骑士雄鹰之翼16年\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰花格10年单一麦芽苏格兰威士忌\n" + } + ], + links: "http://www.cdfgsanya.com/product-list.html?sw=山崎12年威士忌 700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑VSOP\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利干邑名仕 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=卡慕干邑XO 1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=百龄坛17年威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪23年单一麦芽威士忌700ml\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰菲迪珍藏桶单一纯麦威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=帝王苏格兰调和威士忌15年\nhttp://www.cdfgsanya.com/product-list.html?sw=艾柏迪12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=马爹利蓝带干邑特醇1000ml\nhttp://www.cdfgsanya.com/product-list.html?sw=大摩12年单一麦芽威士忌\nhttp://www.cdfgsanya.com/product-list.html?sw=高原骑士雄鹰之翼16年\nhttp://www.cdfgsanya.com/product-list.html?sw=格兰花格10年单一麦芽苏格兰威士忌\n", + name: "cdf商品数据", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "MARTELL 马爹利马爹利蓝带干邑公升装 1000ml" + }, + { + id: NumberInt("1"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "" + }, + { + id: NumberInt("2"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "马爹利干邑VSOP" + }, + { + id: NumberInt("3"), + name: "参数3_文本", + desc: "", + type: "string", + exampleValue: "¥1710.00" + }, + { + id: NumberInt("4"), + name: "参数4_文本", + desc: "", + type: "string", + exampleValue: "促销此商品专享9折" + } + ], + url: "http://www.cdfgsanya.com/product-list.html?sw=%E5%B1%B1%E5%B4%8E12%E5%B9%B4%E5%A8%81%E5%A3%AB%E5%BF%8C%20700ml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63595d8b7e45788f5558dd5c"), + containJudge: true, + desc: "https://search.jd.hk/search?keyword=%E5%B1%B1%E5%B4%8E12%E5%B9%B4%E5%A8%81%E5%A3%AB%E5%BF%8C%20700ml&enc=utf-8&stock=1&sort=sort_totalsales15_desc", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("3"), + index: NumberInt("1"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("5"), + url: "https://search.jd.hk/search?keyword=%E5%B1%B1%E5%B4%8E12%E5%B9%B4%E5%A8%81%E5%A3%AB%E5%BF%8C%20700ml&enc=utf-8&stock=1&sort=sort_totalsales15_desc", + links: "https://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=山崎12年威士忌 700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑VSOP\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑名仕 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=卡慕干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=百龄坛17年威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪23年单一麦芽威士忌700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=帝王苏格兰调和威士忌15年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=艾柏迪12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑特醇1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=大摩12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=高原骑士雄鹰之翼16年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰花格10年单一麦芽苏格兰威士忌\n", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("8"), + index: NumberInt("2"), + parentId: NumberInt("6"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4"), + NumberInt("3"), + NumberInt("6") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "(//*[@id=\"plist\"]/ul/li/div[2]/div/div[3]/a)[position()<11]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("10"), + index: NumberInt("3"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[5]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/ul[1]/li/div[2]/div[1]/div[3]/a[1]/em[1]", + wait: NumberInt("3"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("9"), + index: NumberInt("4"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "京东商品名", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "京东国际山崎(Yamazaki)12年(有盒)日本单一麦芽威士忌 700ml 三得利 进口洋酒 【跨境洋酒】纵享极致优惠,直击底价。\n【酒是宠你】瓶瓶醇香酒不同,杯杯佳酿品质高。\n【0元入会】花漾省“薪”,享更多福利权益。戳" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "京东商品链接地址", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://npcitem.jd.hk/100021316412.html" + } + ] + } + ] + } + }, + { + id: NumberInt("15"), + index: NumberInt("5"), + parentId: NumberInt("13"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "京东价格", + desc: "", + relativeXpath: "//span[contains(@class,\"p-price\")]//span[contains(@class,\"price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "1851.00" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "活动内容", + desc: "", + relativeXpath: "//*[@id=\"summary-promotion\"]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n \n \n \n 跨自营/店铺满减 每满1000元,可减60元现金,最多可减300元   详情>> 满减满额返券 满减 满700元减170元 满额返券 购医药母婴保健清洁个护酒水国际等部分自营商品满1元即返券包   详情>> \n \n \n \n \n \n \n 展开促销\n \n \n \"跨自营/店铺满减\"\"满减\"仅可任选其一,可在购物车更改" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "优惠券信息", + desc: "", + relativeXpath: "//*[@id=\"summary-quan\"]/div[2]/dl/dd", + exampleValues: [ + { + num: NumberInt("0"), + value: " 满399减50 满399减50 " + } + ] + } + ] + } + }, + { + id: NumberInt("11"), + index: NumberInt("6"), + parentId: NumberInt("8"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("12"), + parentId: NumberInt("11"), + index: NumberInt("7"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("9") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "定  金" + }, + position: NumberInt("0") + }, + { + id: NumberInt("13"), + parentId: NumberInt("11"), + index: NumberInt("8"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("5") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + }, + { + id: NumberInt("14"), + index: NumberInt("9"), + parentId: NumberInt("12"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "京东价格", + desc: "", + relativeXpath: "(//span[contains(@class,\"p-price\")]//span[contains(@class,\"price\")])[last()]", + exampleValues: [ + { + num: NumberInt("0"), + value: "1851.00" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "活动内容", + desc: "", + relativeXpath: "//*[@id=\"summary-promotion\"]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n \n \n \n 跨自营/店铺满减 每满1000元,可减60元现金,最多可减300元   详情>> 满减满额返券 满减 满700元减170元 满额返券 购医药母婴保健清洁个护酒水国际等部分自营商品满1元即返券包   详情>> \n \n \n \n \n \n \n 展开促销\n \n \n \"跨自营/店铺满减\"\"满减\"仅可任选其一,可在购物车更改" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "优惠券信息", + desc: "", + relativeXpath: "//*[@id=\"summary-quan\"]/div[2]/dl/dd", + exampleValues: [ + { + num: NumberInt("0"), + value: " 满399减50 满399减50 " + } + ] + } + ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("10"), + parentId: NumberInt("2"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("11"), + NumberInt("12") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("5"), + parentId: NumberInt("4"), + index: NumberInt("11"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("13") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "抱歉" + }, + position: NumberInt("0") + }, + { + id: NumberInt("6"), + parentId: NumberInt("4"), + index: NumberInt("12"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("2") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + }, + { + id: NumberInt("7"), + index: NumberInt("13"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "京东商品名", + desc: "", + relativeXpath: "/html/body/div[4]/div[1]/div[1]/div[2]/b[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\"山崎12年威士忌 700ml\"" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("1"), + index: NumberInt("14"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("30"), + url: "https://passport.jd.com/new/login.aspx?sso=1&ReturnUrl=https://sso.jd.hk/sso/redirect", + links: "https://passport.jd.com/new/login.aspx?sso=1&ReturnUrl=https://sso.jd.hk/sso/redirect", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("15"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("1"), + NumberInt("10") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=山崎12年威士忌 700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑VSOP\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑名仕 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=卡慕干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=百龄坛17年威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪23年单一麦芽威士忌700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=帝王苏格兰调和威士忌15年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=艾柏迪12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑特醇1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=大摩12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=高原骑士雄鹰之翼16年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰花格10年单一麦芽苏格兰威士忌\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("14"), + nodeName: "Open Page", + value: "https://passport.jd.com/new/login.aspx?sso=1&ReturnUrl=https://sso.jd.hk/sso/redirect", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://passport.jd.com/new/login.aspx?sso=1&ReturnUrl=https://sso.jd.hk/sso/redirect" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("15"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=山崎12年威士忌 700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑VSOP\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑名仕 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=卡慕干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=百龄坛17年威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪23年单一麦芽威士忌700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=帝王苏格兰调和威士忌15年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=艾柏迪12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑特醇1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=大摩12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=高原骑士雄鹰之翼16年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰花格10年单一麦芽苏格兰威士忌\n", + value: "https://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=山崎12年威士忌 700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑VSOP\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利干邑名仕 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=卡慕干邑XO 1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=百龄坛17年威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪23年单一麦芽威士忌700ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=帝王苏格兰调和威士忌15年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=艾柏迪12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=马爹利蓝带干邑特醇1000ml\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=大摩12年单一麦芽威士忌\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=高原骑士雄鹰之翼16年\nhttps://search.jd.hk/search?stock=1&sort=sort_totalsales15_desc&enc=utf-8&stock=0&keyword=格兰花格10年单一麦芽苏格兰威士忌\n" + } + ], + links: "https://passport.jd.com/new/login.aspx?sso=1&ReturnUrl=https://sso.jd.hk/sso/redirect", + name: "JD国际", + outputParameters: [ + { + id: NumberInt("0"), + name: "京东商品名", + desc: "", + type: "string", + exampleValue: "京东国际山崎(Yamazaki)12年(有盒)日本单一麦芽威士忌 700ml 三得利 进口洋酒 【跨境洋酒】纵享极致优惠,直击底价。\n【酒是宠你】瓶瓶醇香酒不同,杯杯佳酿品质高。\n【0元入会】花漾省“薪”,享更多福利权益。戳" + }, + { + id: NumberInt("1"), + name: "京东商品链接地址", + desc: "", + type: "string", + exampleValue: "https://npcitem.jd.hk/100021316412.html" + }, + { + id: NumberInt("2"), + name: "京东价格", + desc: "", + type: "string", + exampleValue: "1851.00" + }, + { + id: NumberInt("3"), + name: "活动内容", + desc: "", + type: "string", + exampleValue: "\n \n \n \n \n 跨自营/店铺满减 每满1000元,可减60元现金,最多可减300元   详情>> 满减满额返券 满减 满700元减170元 满额返券 购医药母婴保健清洁个护酒水国际等部分自营商品满1元即返券包   详情>> \n \n \n \n \n \n \n 展开促销\n \n \n \"跨自营/店铺满减\"\"满减\"仅可任选其一,可在购物车更改" + }, + { + id: NumberInt("4"), + name: "优惠券信息", + desc: "", + type: "string", + exampleValue: " 满399减50 满399减50 " + } + ], + url: "https://search.jd.hk/search?keyword=%E5%B1%B1%E5%B4%8E12%E5%B9%B4%E5%A8%81%E5%A3%AB%E5%BF%8C%20700ml&enc=utf-8&stock=1&sort=sort_totalsales15_desc" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63597be09dc2355e111bdd33"), + containJudge: true, + desc: "TMALL", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tmall.hk/wow/member-club/act/login", + links: "https://www.tmall.hk/wow/member-club/act/login", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"first\"]/div[2]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"fm-login-id\"]", + wait: NumberInt("60"), + value: "15300412144" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"captcha-btn\"]", + wait: NumberInt("60"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("8"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11"), + NumberInt("9"), + NumberInt("13") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("9"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("30"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("10"), + index: NumberInt("10"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//ul[contains(@class,'bd')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("11"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("13"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接地址", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ] + } + ] + } + }, + { + id: NumberInt("11"), + index: NumberInt("12"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//ul[contains(@class,'bd')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("7"), + index: NumberInt("13"), + parentId: NumberInt("4"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("8"), + parentId: NumberInt("7"), + index: NumberInt("14"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("10") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "促销价" + }, + position: NumberInt("0") + }, + { + id: NumberInt("9"), + parentId: NumberInt("7"), + index: NumberInt("15"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("12") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + } + ], + id: NumberInt("16"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://www.tmall.hk/wow/member-club/act/login", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tmall.hk/wow/member-club/act/login" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n", + value: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n" + } + ], + links: "https://www.tmall.hk/wow/member-club/act/login", + name: "天猫国际", + outputParameters: [ + { + id: NumberInt("0"), + name: "Tmall商品名称", + desc: "", + type: "string", + exampleValue: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + }, + { + id: NumberInt("1"), + name: "Tmall销量", + desc: "", + type: "string", + exampleValue: "已拼1108件" + }, + { + id: NumberInt("2"), + name: "Tmall价格", + desc: "", + type: "string", + exampleValue: "200" + }, + { + id: NumberInt("3"), + name: "Tmall活动", + desc: "", + type: "string", + exampleValue: "满20减12件9.9折" + }, + { + id: NumberInt("4"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + }, + { + id: NumberInt("5"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ], + url: "https://mobile.yangkeduo.com/login.html" +} ); +db.getCollection("services").insert( { + _id: ObjectId("6359a66d9dc2355e111bdd35"), + containJudge: false, + desc: "TMALL", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("30"), + url: "https://www.tmall.hk/wow/member-club/act/login", + links: "https://www.tmall.hk/wow/member-club/act/login", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"first\"]/div[2]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"fm-login-id\"]", + wait: NumberInt("60"), + value: "15300412144" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"captcha-btn\"]", + wait: NumberInt("60"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("8"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("30"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//ul[contains(@class,'bd')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("11"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("13"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接地址", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//ul[contains(@class,'bd')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("4"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + parentId: NumberInt("7"), + index: NumberInt("14"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("10") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "促销价" + }, + position: NumberInt("0") + }, + { + id: NumberInt("-1"), + parentId: NumberInt("7"), + index: NumberInt("15"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("12") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + } + ], + id: NumberInt("17"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://www.tmall.hk/wow/member-club/act/login", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tmall.hk/wow/member-club/act/login" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n", + value: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n" + } + ], + links: "https://www.tmall.hk/wow/member-club/act/login", + name: "天猫国际标题及链接", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + }, + { + id: NumberInt("1"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ], + url: "https://mobile.yangkeduo.com/login.html" +} ); +db.getCollection("services").insert( { + _id: ObjectId("6359a7ff9dc2355e111bdd37"), + containJudge: false, + desc: "TMALL", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("30"), + url: "https://www.tmall.hk/wow/member-club/act/login", + links: "https://www.tmall.hk/wow/member-club/act/login", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"first\"]/div[2]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"fm-login-id\"]", + wait: NumberInt("60"), + value: "15300412144" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"captcha-btn\"]", + wait: NumberInt("60"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("8"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("30"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//ul[contains(@class,'bd')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("11"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("13"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接地址", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//ul[contains(@class,'bd')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("4"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + parentId: NumberInt("7"), + index: NumberInt("14"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("10") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "促销价" + }, + position: NumberInt("0") + }, + { + id: NumberInt("-1"), + parentId: NumberInt("7"), + index: NumberInt("15"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("12") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://www.tmall.hk/wow/member-club/act/login", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tmall.hk/wow/member-club/act/login" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n", + value: "https://list.tmall.hk/search_product.htm?sort=d&q=山崎12年威士忌 700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑VSOP\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利干邑名仕 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=卡慕干邑XO 1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=百龄坛17年威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪23年单一麦芽威士忌700ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=帝王苏格兰调和威士忌15年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=艾柏迪12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=马爹利蓝带干邑特醇1000ml\nhttps://list.tmall.hk/search_product.htm?sort=d&q=大摩12年单一麦芽威士忌\nhttps://list.tmall.hk/search_product.htm?sort=d&q=高原骑士雄鹰之翼16年\nhttps://list.tmall.hk/search_product.htm?sort=d&q=格兰花格10年单一麦芽苏格兰威士忌\n" + } + ], + links: "https://www.tmall.hk/wow/member-club/act/login", + name: "天猫国际细节", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + }, + { + id: NumberInt("1"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ], + url: "https://mobile.yangkeduo.com/login.html" +} ); +db.getCollection("services").insert( { + _id: ObjectId("635a5e037e45788f5558dd77"), + containJudge: true, + desc: "TMALL", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("60"), + url: "https://www.tmall.hk/wow/member-club/act/login", + links: "https://www.tmall.hk/wow/member-club/act/login", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"first\"]/div[2]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"fm-login-id\"]", + wait: NumberInt("60"), + value: "15300412144" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"captcha-btn\"]", + wait: NumberInt("60"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("2"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("13") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://detail.tmall.hk/item.htm?id=658641278118&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=661890189422&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=655093526731&skuId=4722646792697&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=627569178411&skuId=4862853365173&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=636055777039&skuId=4645617529132&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688858127211&skuId=4902371768889&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688217639958&skuId=5072411486570&user_id=2211620739106&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=673752006327&skuId=4850085397621&user_id=2201196294013&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=644176111194&skuId=4803927442138&user_id=4066234693&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=666388233142&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676864927096&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=679778539067&skuId=4869780972851&user_id=2208001160576&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676216525152&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=679186327100&skuId=5040379050593&user_id=2208001160576&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=625756943270&skuId=4599437546828&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=665799173163&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=665799009405&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674085737113&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674364570689&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=632368285229&skuId=4747111192712&user_id=2208809643523&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=642010267399&skuId=4608264276629&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=669653355013&skuId=4990436987771&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=640840112439&skuId=4780229330767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=671922578171&skuId=4836777085975&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=692b142c738cf29311d58032028b5ee5\nhttps://detail.tmall.hk/item.htm?id=662246212268&skuId=4781521713999&user_id=2208001160576&cat_id=52792006&is_b=1&rn=280c6ed560288255613d7fd884ca672f\nhttps://detail.tmall.hk/item.htm?id=660952952930&skuId=4945939147795&user_id=2208809643523&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=653126328863&skuId=4888055566418&user_id=2208001160576&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=670816473575&skuId=4830266013281&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=654434969099&skuId=4858416885345&user_id=2201196294013&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=669417310088&skuId=4986645854954&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680953941680&skuId=5054883923880&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680604268050&skuId=5050667130353&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=674365879369&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026710487&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=679313732616&skuId=5049630735381&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673634362925&skuId=5023210607767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=639014326267&skuId=4757438187841&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673321104180&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=675361115314&skuId=4851676748871&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=643031144961&skuId=4803543378059&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026766248&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=684308217535&skuId=5066788751831&user_id=2201196294013&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=670428964115&skuId=4825379424909&user_id=2208809643523&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=684182456625&skuId=5067650531005&user_id=2213203431581&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679691842863&skuId=5044128386586&user_id=4066234693&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679686430991&skuId=4870952348853&user_id=2201168176213&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("40"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "(//*[@id=\"J_ItemList\"]/div/div/p[2]/a)[position()<11]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("30"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("7"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1[not(@id=\"mallLogo\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//div[contains(@class,\"tm-promo-price\")]//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//dl[contains(@class,\"tm-shopPromo-panel\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("13"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n【自营】Yamazaki山崎日本 山崎12年单一麦芽威士忌700ml无盒*2\n" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接地址", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3486055966f7d03fae5b51df9e812215" + } + ] + } + ] + } + }, + { + id: NumberInt("8"), + index: NumberInt("12"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall商品名称", + desc: "", + relativeXpath: "//h1[not(@id=\"mallLogo\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall销量", + desc: "", + relativeXpath: "//span[contains(text(),\"销量\")]/..", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall价格", + desc: "", + relativeXpath: "//span[contains(@class,\"tm-price\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "Tmall活动", + desc: "", + relativeXpath: "//dl[contains(@class,\"tm-shopPromo-panel\")]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("13"), + parentId: NumberInt("2"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("5"), + parentId: NumberInt("4"), + index: NumberInt("14"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("10") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "1", + value: "促销价" + }, + position: NumberInt("0") + }, + { + id: NumberInt("6"), + parentId: NumberInt("4"), + index: NumberInt("15"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("12") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + }, + { + index: NumberInt("16"), + id: NumberInt("-1"), + parentId: NumberInt("4"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("0") + } + ], + id: NumberInt("19"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://www.tmall.hk/wow/member-club/act/login", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.tmall.hk/wow/member-club/act/login" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "要输入的文本/网址,多行以\\n分开", + type: "string", + exampleValue: "https://detail.tmall.hk/item.htm?id=658641278118&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=661890189422&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=655093526731&skuId=4722646792697&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=627569178411&skuId=4862853365173&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=636055777039&skuId=4645617529132&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688858127211&skuId=4902371768889&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688217639958&skuId=5072411486570&user_id=2211620739106&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=673752006327&skuId=4850085397621&user_id=2201196294013&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=644176111194&skuId=4803927442138&user_id=4066234693&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=666388233142&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676864927096&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=679778539067&skuId=4869780972851&user_id=2208001160576&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676216525152&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=679186327100&skuId=5040379050593&user_id=2208001160576&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=625756943270&skuId=4599437546828&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=665799173163&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=665799009405&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674085737113&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674364570689&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=632368285229&skuId=4747111192712&user_id=2208809643523&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=642010267399&skuId=4608264276629&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=669653355013&skuId=4990436987771&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=640840112439&skuId=4780229330767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=671922578171&skuId=4836777085975&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=692b142c738cf29311d58032028b5ee5\nhttps://detail.tmall.hk/item.htm?id=662246212268&skuId=4781521713999&user_id=2208001160576&cat_id=52792006&is_b=1&rn=280c6ed560288255613d7fd884ca672f\nhttps://detail.tmall.hk/item.htm?id=660952952930&skuId=4945939147795&user_id=2208809643523&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=653126328863&skuId=4888055566418&user_id=2208001160576&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=670816473575&skuId=4830266013281&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=654434969099&skuId=4858416885345&user_id=2201196294013&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=669417310088&skuId=4986645854954&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680953941680&skuId=5054883923880&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680604268050&skuId=5050667130353&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=674365879369&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026710487&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=679313732616&skuId=5049630735381&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673634362925&skuId=5023210607767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=639014326267&skuId=4757438187841&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673321104180&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=675361115314&skuId=4851676748871&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=643031144961&skuId=4803543378059&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026766248&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=684308217535&skuId=5066788751831&user_id=2201196294013&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=670428964115&skuId=4825379424909&user_id=2208809643523&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=684182456625&skuId=5067650531005&user_id=2213203431581&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679691842863&skuId=5044128386586&user_id=4066234693&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679686430991&skuId=4870952348853&user_id=2201168176213&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\n", + value: "https://detail.tmall.hk/item.htm?id=658641278118&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=675381315087&skuId=5025037362931&user_id=2549841410&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=661890189422&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=655093526731&skuId=4722646792697&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=627569178411&skuId=4862853365173&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=636055777039&skuId=4645617529132&user_id=2201168176213&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688858127211&skuId=4902371768889&user_id=2200657974488&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=688217639958&skuId=5072411486570&user_id=2211620739106&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=673752006327&skuId=4850085397621&user_id=2201196294013&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=644176111194&skuId=4803927442138&user_id=4066234693&cat_id=52792006&is_b=1&rn=3e61f2a1adb140059d3a445385b0340e\nhttps://detail.tmall.hk/item.htm?id=666388233142&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676864927096&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=679778539067&skuId=4869780972851&user_id=2208001160576&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=676216525152&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=6cac3335e21ad6d58c6eb65acba0457b\nhttps://detail.tmall.hk/item.htm?id=665782599546&skuId=4964481990530&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=679186327100&skuId=5040379050593&user_id=2208001160576&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=625756943270&skuId=4599437546828&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=628465335701&skuId=4631419227811&user_id=2208809643523&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=687644929281&skuId=4899422700228&user_id=2213203431581&cat_id=52792006&is_b=1&rn=823958e185c89f6746f2b972c590b841\nhttps://detail.tmall.hk/item.htm?id=665799173163&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=665799009405&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674085737113&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=674364570689&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=632368285229&skuId=4747111192712&user_id=2208809643523&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=642010267399&skuId=4608264276629&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=669653355013&skuId=4990436987771&user_id=2549841410&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=640840112439&skuId=4780229330767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=671922578171&skuId=4836777085975&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=4517aa8d03ee4babd04e2ebce23e2d3f\nhttps://detail.tmall.hk/item.htm?id=688213231080&skuId=5072374346970&user_id=2213203431581&cat_id=52792006&is_b=1&rn=692b142c738cf29311d58032028b5ee5\nhttps://detail.tmall.hk/item.htm?id=662246212268&skuId=4781521713999&user_id=2208001160576&cat_id=52792006&is_b=1&rn=280c6ed560288255613d7fd884ca672f\nhttps://detail.tmall.hk/item.htm?id=660952952930&skuId=4945939147795&user_id=2208809643523&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=653126328863&skuId=4888055566418&user_id=2208001160576&cat_id=52792006&is_b=1&rn=3fb4b682f2c17ce9a67a1c8c04d64bf7\nhttps://detail.tmall.hk/item.htm?id=670816473575&skuId=4830266013281&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=654434969099&skuId=4858416885345&user_id=2201196294013&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=669417310088&skuId=4986645854954&user_id=2208809643523&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680953941680&skuId=5054883923880&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=680604268050&skuId=5050667130353&user_id=2214429028194&cat_id=52792006&is_b=1&rn=deb04cd6da99fb00e75abc18579d4ec2\nhttps://detail.tmall.hk/item.htm?id=674365879369&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026710487&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=679313732616&skuId=5049630735381&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673634362925&skuId=5023210607767&user_id=2208001160576&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=639014326267&skuId=4757438187841&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=673321104180&skuId=null&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=675361115314&skuId=4851676748871&user_id=2549841410&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=643031144961&skuId=4803543378059&user_id=2208809643523&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=674026766248&skuId=null&user_id=2200657974488&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=684308217535&skuId=5066788751831&user_id=2201196294013&cat_id=52792006&is_b=1&rn=353182a7e4a52ec421d2af79c02547f3\nhttps://detail.tmall.hk/item.htm?id=670428964115&skuId=4825379424909&user_id=2208809643523&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=684182456625&skuId=5067650531005&user_id=2213203431581&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679691842863&skuId=5044128386586&user_id=4066234693&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\nhttps://detail.tmall.hk/item.htm?id=679686430991&skuId=4870952348853&user_id=2201168176213&cat_id=52792006&is_b=1&rn=1c2c99c3c0f9d1054f41f905c0d4762d\n" + } + ], + links: "https://www.tmall.hk/wow/member-club/act/login", + name: "天猫国际细节", + outputParameters: [ + { + id: NumberInt("0"), + name: "Tmall商品名称", + desc: "", + type: "string", + exampleValue: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + }, + { + id: NumberInt("1"), + name: "Tmall销量", + desc: "", + type: "string", + exampleValue: "已拼1108件" + }, + { + id: NumberInt("2"), + name: "Tmall价格", + desc: "", + type: "string", + exampleValue: "200" + }, + { + id: NumberInt("3"), + name: "Tmall活动", + desc: "", + type: "string", + exampleValue: "满20减12件9.9折" + } + ], + url: "https://mobile.yangkeduo.com/login.html" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63c41dd8869cb52a8a8f6e8c"), + containJudge: false, + desc: "https://www.jd.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jd.com", + links: "https://www.jd.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[4]/div[1]/div[4]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[1]/div[4]/div[1]/div[4]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.jd.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + } + ], + links: "https://www.jd.com", + name: "JD_TEST", + outputParameters: [ ], + url: "https://www.jd.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63c7736edcb6508b71d51af2"), + containJudge: false, + desc: "https://www.jd.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jd.com", + links: "https://www.jd.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jd.com", + links: "https://www.jd.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jd.com", + links: "https://www.jd.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: false, + name: "参数1_链接文本", + desc: "", + relativeXpath: "/html/body/div[1]/div[4]/div[1]/div[4]/ul[3]/li[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "京东五金城 " + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.jd.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + }, + { + id: NumberInt("1"), + name: "urlList_1", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://www.jd.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + }, + { + id: NumberInt("2"), + name: "urlList_2", + nodeId: NumberInt("3"), + nodeName: "Open Page", + value: "https://www.jd.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + } + ], + links: "https://www.jd.com", + name: "TEST Service", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "京东五金城 " + } + ], + url: "https://www.jd.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63cd3b94869cb52a8a8f6e90"), + containJudge: false, + desc: "https://www.jjwxc.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.jjwxc.com", + links: "https://www.jjwxc.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[4]/div[2]/div[1]/div[3]/div[1]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("2"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[4]/div[2]/div[1]/div[3]/div[1]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接文本", + desc: "", + relativeXpath: "/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "《乱尘之风》 " + }, + { + num: NumberInt("1"), + value: "《好山好水好花儿(新篇》 " + }, + { + num: NumberInt("2"), + value: "《烈火如歌I》 " + }, + { + num: NumberInt("3"), + value: "《大唐晋阳公主》 " + }, + { + num: NumberInt("4"), + value: "《魔鬼的体温》 " + }, + { + num: NumberInt("5"), + value: "《不断作死后我成了白月》 " + }, + { + num: NumberInt("6"), + value: "《何处暖阳不倾城》 " + }, + { + num: NumberInt("7"), + value: "《有匪》 " + }, + { + num: NumberInt("8"), + value: "《猎人同人-无处不在》 " + }, + { + num: NumberInt("9"), + value: "《人不可貌相》 " + }, + { + num: NumberInt("10"), + value: "《每日一表白》 " + }, + { + num: NumberInt("11"), + value: "《[综英美]App不能》 " + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数3_链接地址", + desc: "", + relativeXpath: "/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.jjwxc.net/onebook.php?novelid=90001" + }, + { + num: NumberInt("1"), + value: "https://www.jjwxc.net/onebook.php?novelid=42195" + }, + { + num: NumberInt("2"), + value: "https://www.jjwxc.net/onebook.php?novelid=487" + }, + { + num: NumberInt("3"), + value: "https://www.jjwxc.net/onebook.php?novelid=2419670" + }, + { + num: NumberInt("4"), + value: "https://www.jjwxc.net/onebook.php?novelid=3945423" + }, + { + num: NumberInt("5"), + value: "https://www.jjwxc.net/onebook.php?novelid=4682400" + }, + { + num: NumberInt("6"), + value: "https://www.jjwxc.net/onebook.php?novelid=2089609" + }, + { + num: NumberInt("7"), + value: "https://www.jjwxc.net/onebook.php?novelid=2595385" + }, + { + num: NumberInt("8"), + value: "https://www.jjwxc.net/onebook.php?novelid=439197" + }, + { + num: NumberInt("9"), + value: "https://www.jjwxc.net/onebook.php?novelid=3109031" + }, + { + num: NumberInt("10"), + value: "https://www.jjwxc.net/onebook.php?novelid=1639058" + }, + { + num: NumberInt("11"), + value: "https://www.jjwxc.net/onebook.php?novelid=2820411" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数4_链接文本", + desc: "", + relativeXpath: "/a[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "悦乙" + }, + { + num: NumberInt("1"), + value: "ane" + }, + { + num: NumberInt("2"), + value: "明晓溪" + }, + { + num: NumberInt("3"), + value: "鱼七彩" + }, + { + num: NumberInt("4"), + value: "藤萝为枝" + }, + { + num: NumberInt("5"), + value: "纪婴" + }, + { + num: NumberInt("6"), + value: "北倾" + }, + { + num: NumberInt("7"), + value: "priest" + }, + { + num: NumberInt("8"), + value: "花命罗" + }, + { + num: NumberInt("9"), + value: "月下蝶影" + }, + { + num: NumberInt("10"), + value: "栖见" + }, + { + num: NumberInt("11"), + value: "Ventisca" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数5_链接地址", + desc: "", + relativeXpath: "/a[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=46931" + }, + { + num: NumberInt("1"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=10396" + }, + { + num: NumberInt("2"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=32" + }, + { + num: NumberInt("3"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=711837" + }, + { + num: NumberInt("4"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=2071925" + }, + { + num: NumberInt("5"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=2222864" + }, + { + num: NumberInt("6"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=719966" + }, + { + num: NumberInt("7"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=145956" + }, + { + num: NumberInt("8"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=319139" + }, + { + num: NumberInt("9"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=321503" + }, + { + num: NumberInt("10"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=585107" + }, + { + num: NumberInt("11"), + value: "https://www.jjwxc.net/oneauthor.php?authorid=898115" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("5"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.jjwxc.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jjwxc.com" + } + ], + links: "https://www.jjwxc.com", + name: "jjwxc", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数2_链接文本", + desc: "", + type: "string", + exampleValue: "《乱尘之风》 " + }, + { + id: NumberInt("1"), + name: "参数3_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.jjwxc.net/onebook.php?novelid=90001" + }, + { + id: NumberInt("2"), + name: "参数4_链接文本", + desc: "", + type: "string", + exampleValue: "悦乙" + }, + { + id: NumberInt("3"), + name: "参数5_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.jjwxc.net/oneauthor.php?authorid=46931" + } + ], + url: "https://www.jjwxc.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63da7677c85da553b7a9d4b2"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "1" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "1", + value: "1" + } + ], + links: "https://www.ebay.com", + name: "New Crawler Task", + outputParameters: [ ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dbdbc7c85da553b7a9d4bc"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("5") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPhone" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Search", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"s0-52-12-5-4[0]-42\"]/form[1]/fieldset[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Click Next Page", + sequence: [ + NumberInt("7"), + NumberInt("6") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//a[contains(@class,'pagination__next')] ", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("10"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Next", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"srp-river-results\"]/ul[1]/li[61]/div[2]/span[1]/span[1]/nav[1]/a[1]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("7"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Collection", + sequence: [ + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "Title", + desc: "", + relativeXpath: "//div[contains(@class,'s-item__title')] ", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPhone 11 - 64GB - Black - Carrier Unlocked - NO FACE ID" + }, + { + num: NumberInt("1"), + value: "Apple iPhone 12 Pro Max - Factory Unlocked - 128GB - Very Good" + }, + { + num: NumberInt("2"), + value: "Apple iPhone SE 2nd Gen 64GB Unlocked AT&T T-Mobile Verizon Good Condition" + }, + { + num: NumberInt("3"), + value: "Apple iPhone 6 16GB 64GB 128GB Factory Unlocked SmartPhone AT&T T-mobile Verizon" + }, + { + num: NumberInt("4"), + value: "Apple iPhone 12 A2172 64/128/256GB AT&T T-Mobile Verizon Unlocked GREAT" + }, + { + num: NumberInt("5"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("6"), + value: "Apple iPhone 13 PRO MAX 128GB 256GB 512GB 1TB (UNLOCKED) ✅APPLE WARNTY⚫🔴🔵✤O/B✤" + }, + { + num: NumberInt("7"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("8"), + value: "Apple iPhone XR - 64GB - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("9"), + value: "APPLE IPHONE 7 *ALL COLORS* FACTORY UNLOCKED 32GB (VERY GOOD CONDITION)" + }, + { + num: NumberInt("10"), + value: "Apple iPhone 11 64GB Unlocked Smartphone - Very Good" + }, + { + num: NumberInt("11"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("12"), + value: "Apple iPhone 12 Mini 64GB Unlocked Smartphone - Very Good" + }, + { + num: NumberInt("13"), + value: "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("14"), + value: "Apple iPhone SE 2nd Gen. 2020 64GB Unlocked A2275 GSM + CDMA -BEST BUDGET DEAL-" + }, + { + num: NumberInt("15"), + value: "Apple iPhone 7 Plus - 128GB - Factory Unlocked - Very Good Condition " + }, + { + num: NumberInt("16"), + value: "Apple iPhone 12 - 64GB - All Colors - Unlocked Smartphone - Good Condition " + }, + { + num: NumberInt("17"), + value: "Apple iPhone 13 A2482 128GB Midnight Unlocked Excellent Condition" + }, + { + num: NumberInt("18"), + value: "Apple iPhone 11 64GB/128GB/256GB - ALL COLOURS - UNLOCKED - VERY GOOD CONDITION" + }, + { + num: NumberInt("19"), + value: "Apple iPhone 12 Pro Max A2342 256GB Unlocked Good Condition" + }, + { + num: NumberInt("20"), + value: "Apple iPhone 12 Pro Max 5G 128GB Factory Unlocked CDMA + GSM EXCELLENT" + }, + { + num: NumberInt("21"), + value: "Apple iPhone 12 Pro A2341 128GB Unlocked Very Good Condition (Free Shipping)" + }, + { + num: NumberInt("22"), + value: "Apple iPhone 11 A2111 64/128/256 - All Colors - (Factory Unlocked) - Excellent -" + }, + { + num: NumberInt("23"), + value: "Apple iPhone 11 Pro Max - 256GB - All Colors (Unlocked) - Very Good Condition " + }, + { + num: NumberInt("24"), + value: "Apple iPhone 12 Pro Max (A2342) - All Colors - (Unlocked) - 10/10 Open Box -" + }, + { + num: NumberInt("25"), + value: "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("26"), + value: "Apple iPhone 13 (Unlocked) Pre-Order-New Open Box, Free Shipping!" + }, + { + num: NumberInt("27"), + value: "Apple iPhone 12 - 5G - 128GB Factory Unlocked GSM + CDMA - OPEN BOX" + }, + { + num: NumberInt("28"), + value: "Apple iPhone 8 64GB Factory Unlocked Verizon AT&T T-Mobile Sprint Good" + }, + { + num: NumberInt("29"), + value: "Apple iPhone 12 (A2172) 64GB Blue Unlocked GSM/CDMA -Fair Condition" + }, + { + num: NumberInt("30"), + value: "Apple iPhone 11 64GB/128GB/256GB - ALL COLOURS - UNLOCKED - GOOD CONDITION" + }, + { + num: NumberInt("31"), + value: "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T Ultra" + }, + { + num: NumberInt("32"), + value: "Apple iPhone 11 64GB Factory Unlocked 4G LTE Smartphone - Good" + }, + { + num: NumberInt("33"), + value: "Apple iPhone XR 64GB 128GB Fully Unlocked Smartphone A1984 - Good" + }, + { + num: NumberInt("34"), + value: "Apple iPhone XR 64GB Factory Unlocked Smartphone - Very Good" + }, + { + num: NumberInt("35"), + value: "Apple iPhone 11 - 128GB - All Colors - Fully Unlocked (CDMA+GSM)- Good Condition" + }, + { + num: NumberInt("36"), + value: "NEW Apple iPhone 11 A2111 (FACTORY UNLOCKED) - ALL COLORS & CAPACITY" + }, + { + num: NumberInt("37"), + value: "Apple iPhone 12 64GB/128GB/256GB - ALL COLOURS - UNLOCKED- VERY GOOD CONDITION" + }, + { + num: NumberInt("38"), + value: "Open Box Apple iPhone 8 Plus 64GB Factory Unlocked Verizon T-Mobile- Gray/Silver" + }, + { + num: NumberInt("39"), + value: "Apple iPhone 6s 16/32/64 GB - All Colors - Fully Unlocked - Very Good Condition" + }, + { + num: NumberInt("40"), + value: "Apple iPhone 8 64GB GSM Factory Unlocked Smartphone- Excellent condition" + }, + { + num: NumberInt("41"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket" + }, + { + num: NumberInt("42"), + value: "Apple iPhone 8 64GB Verizon T-Mobile AT&T Unlocked Smartphone PRISTINE Condition" + }, + { + num: NumberInt("43"), + value: "Apple iPhone 12 128GB Unlocked Smartphone - Very Good" + }, + { + num: NumberInt("44"), + value: "Apple iPhone 12 Mini 64GB 128GB 256GB Unlocked AT&T T-Mobile Verizon Very Good" + }, + { + num: NumberInt("45"), + value: "Apple iPhone 14 Pro Max Unlocked eSim, Pre-Order.. FREE UPGRADE TO 1TB MODEL!" + }, + { + num: NumberInt("46"), + value: "Apple iPhone SE 2nd Gen 2020 Fully Unlocked GSM/CDMA 64GB 128GB 256GB" + }, + { + num: NumberInt("47"), + value: "Apple iPhone 6 16GB Space Gray A1549 Unlocked GSM 4G LTE New In Box SEALED" + }, + { + num: NumberInt("48"), + value: "Apple iPhone 14 128GB ( Unlocked) Excellent" + }, + { + num: NumberInt("49"), + value: "Apple iPhone 12 Mini 5.4\" 64GB 128GB Factory Unlocked (Any Carrier) Very Good" + }, + { + num: NumberInt("50"), + value: "Apple iPhone 13 Pro 128/256/512GB A2483 Unlocked Open Box" + }, + { + num: NumberInt("51"), + value: "Apple iPhone 8 64GB 256GB Unlocked Open Box New Other" + }, + { + num: NumberInt("52"), + value: "Apple iPhone 12 mini (5G) Factory Unlocked GSM+CDMA 256GB 128GB |64GB Excellent" + }, + { + num: NumberInt("53"), + value: "Apple iPhone 12 64GB 128GB 256GB Unlocked AT&T T-Mobile Verizon Sprint Very Good" + }, + { + num: NumberInt("54"), + value: "Apple iPhone XR 64GB Black Unlocked Fair Condition" + }, + { + num: NumberInt("55"), + value: "Apple iPhone 11 Pro -64GB-Space Gray Unlocked A2160 CDMA + GSM Smartphone GOOD " + }, + { + num: NumberInt("56"), + value: "Apple iPhone 12 Mini (5G) GSM/CDMA Factory Unlocked 256GB |128GB | 64GB" + }, + { + num: NumberInt("57"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - All Colors - Excellent Condition" + }, + { + num: NumberInt("58"), + value: "Apple iPhone 11 - 64GB / 128GB / 256GB - Factory Unlocked - Smartphone" + }, + { + num: NumberInt("59"), + value: "Apple iPhone 6 A1549 32GB Space Gray Unlocked GSM/CDMA Fair " + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("23"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPhone", + value: "iPhone" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop Click Next Page_2", + nodeId: NumberInt("5"), + nodeName: "Loop Click Next Page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("10"), + value: NumberInt("10") + } + ], + links: "https://www.ebay.com", + name: "eBay Titles - Simple Demo", + outputParameters: [ + { + id: NumberInt("0"), + name: "Title", + desc: "", + type: "string", + exampleValue: "Apple iPhone 11 - 64GB - Black - Carrier Unlocked - NO FACE ID" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dbdd8ec85da553b7a9d4bd"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("8") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPhone" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5"), + NumberInt("6") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' " + }, + { + num: NumberInt("1"), + value: "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro Cricket" + }, + { + num: NumberInt("2"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition Warranty" + }, + { + num: NumberInt("3"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket" + }, + { + num: NumberInt("4"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("5"), + value: "Apple iPhone XS Max - 64GB Used T-Mobile" + }, + { + num: NumberInt("6"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UK" + }, + { + num: NumberInt("7"), + value: "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint Condition" + }, + { + num: NumberInt("8"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("9"), + value: "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone Used" + }, + { + num: NumberInt("10"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("11"), + value: "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone Used" + }, + { + num: NumberInt("12"), + value: "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!" + }, + { + num: NumberInt("13"), + value: "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("14"), + value: "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All Colours" + }, + { + num: NumberInt("15"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK Stock" + }, + { + num: NumberInt("16"), + value: "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade A" + }, + { + num: NumberInt("17"), + value: "Apple iPhone SE 2nd Gen. - 256GB - Midnight (Unlocked)" + }, + { + num: NumberInt("18"), + value: "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UK" + }, + { + num: NumberInt("19"), + value: "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good Condition" + }, + { + num: NumberInt("20"), + value: "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("21"), + value: "Apple iPhone XS Max 64GB Black AT&T" + }, + { + num: NumberInt("22"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket" + }, + { + num: NumberInt("23"), + value: "Apple iPhone 11 - 128GB - Factory Unlocked - Good Condition" + }, + { + num: NumberInt("24"), + value: "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good Condition" + }, + { + num: NumberInt("25"), + value: "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)" + }, + { + num: NumberInt("26"), + value: "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("27"), + value: "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work good" + }, + { + num: NumberInt("28"), + value: "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!" + }, + { + num: NumberInt("29"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK Stock" + }, + { + num: NumberInt("30"), + value: "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("31"), + value: "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UK" + }, + { + num: NumberInt("32"), + value: "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)" + }, + { + num: NumberInt("33"), + value: "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition " + }, + { + num: NumberInt("34"), + value: "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition" + }, + { + num: NumberInt("35"), + value: "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - Excellent" + }, + { + num: NumberInt("36"), + value: "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good Condition" + }, + { + num: NumberInt("37"), + value: "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) " + }, + { + num: NumberInt("38"), + value: "iPhone 12 Pro Max 128GB Graphite" + }, + { + num: NumberInt("39"), + value: "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 " + }, + { + num: NumberInt("40"), + value: "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone Used" + }, + { + num: NumberInt("41"), + value: "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)" + }, + { + num: NumberInt("42"), + value: "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon Good" + }, + { + num: NumberInt("43"), + value: "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone Used" + }, + { + num: NumberInt("44"), + value: "Apple iPhone 8 64GB Unlocked A1905 GSM - Space Gray" + }, + { + num: NumberInt("45"), + value: "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone Used" + }, + { + num: NumberInt("46"), + value: "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)" + }, + { + num: NumberInt("47"), + value: "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+" + }, + { + num: NumberInt("48"), + value: "Apple iPhone 12 - 256GB - Blue (Unlocked)" + }, + { + num: NumberInt("49"), + value: "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone Used" + }, + { + num: NumberInt("50"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("51"), + value: "iphone 11" + }, + { + num: NumberInt("52"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("53"), + value: "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon" + }, + { + num: NumberInt("54"), + value: "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("55"), + value: "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good Refurbished" + }, + { + num: NumberInt("56"), + value: "Apple iPhone 13 Pro Max A2484 256GB Graphite LOCKED (READ)" + }, + { + num: NumberInt("57"), + value: "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked Excellent" + }, + { + num: NumberInt("58"), + value: "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T Ultra" + }, + { + num: NumberInt("59"), + value: "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/div/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para2_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "HKD 1,756.28 to HKD 2,987.25" + }, + { + num: NumberInt("1"), + value: "HKD 1,646.12 to HKD 2,038.15" + }, + { + num: NumberInt("2"), + value: "HKD 2,289.86 to HKD 3,256.24" + }, + { + num: NumberInt("3"), + value: "HKD 862.07 to HKD 1,881.34" + }, + { + num: NumberInt("4"), + value: "HKD 2,046.31 to HKD 2,258.00" + }, + { + num: NumberInt("5"), + value: "HKD 1,352.50" + }, + { + num: NumberInt("6"), + value: "HKD 2,802.43 to HKD 3,188.98" + }, + { + num: NumberInt("7"), + value: "HKD 1,764.12 to HKD 3,002.93" + }, + { + num: NumberInt("8"), + value: "HKD 1,622.92" + }, + { + num: NumberInt("9"), + value: "HKD 3,410.56 to HKD 5,605.92" + }, + { + num: NumberInt("10"), + value: "HKD 4,252.01 to HKD 4,541.92" + }, + { + num: NumberInt("11"), + value: "HKD 1,764.05 to HKD 2,352.09" + }, + { + num: NumberInt("12"), + value: "HKD 1,058.08" + }, + { + num: NumberInt("13"), + value: "HKD 783.98 to HKD 1,568.03" + }, + { + num: NumberInt("14"), + value: "HKD 1,836.04" + }, + { + num: NumberInt("15"), + value: "HKD 2,512.51 to HKD 3,285.62" + }, + { + num: NumberInt("16"), + value: "HKD 1,212.91 to HKD 1,492.68" + }, + { + num: NumberInt("17"), + value: "HKD 492.86" + }, + { + num: NumberInt("18"), + value: "HKD 3,382.26 to HKD 3,865.45" + }, + { + num: NumberInt("19"), + value: "HKD 1,701.40 to HKD 2,916.69" + }, + { + num: NumberInt("20"), + value: "HKD 2,899.07 to HKD 3,478.90" + }, + { + num: NumberInt("21"), + value: "HKD 1,136.88" + }, + { + num: NumberInt("22"), + value: "HKD 862.07 to HKD 1,881.34" + }, + { + num: NumberInt("23"), + value: "HKD 1,732.76 to HKD 2,979.41" + }, + { + num: NumberInt("24"), + value: "HKD 3,285.23 to HKD 4,251.62" + }, + { + num: NumberInt("25"), + value: "HKD 2,213.03" + }, + { + num: NumberInt("26"), + value: "HKD 5,121.76" + }, + { + num: NumberInt("27"), + value: "HKD 689.97" + }, + { + num: NumberInt("28"), + value: "HKD 783.66" + }, + { + num: NumberInt("29"), + value: "HKD 2,222.59" + }, + { + num: NumberInt("30"), + value: "HKD 2,512.51 to HKD 3,092.34" + }, + { + num: NumberInt("31"), + value: "HKD 1,739.40 to HKD 2,029.32" + }, + { + num: NumberInt("32"), + value: "HKD 1,191.76" + }, + { + num: NumberInt("33"), + value: "HKD 670.29" + }, + { + num: NumberInt("34"), + value: "HKD 3,672.18 to HKD 4,058.73" + }, + { + num: NumberInt("35"), + value: "HKD 1,160.40 to HKD 1,497.55" + }, + { + num: NumberInt("36"), + value: "HKD 2,415.49 to HKD 2,831.03" + }, + { + num: NumberInt("37"), + value: "HKD 1,403.46 to HKD 2,258.08" + }, + { + num: NumberInt("38"), + value: "HKD 5,063.87" + }, + { + num: NumberInt("39"), + value: "HKD 470.35 to HKD 940.79" + }, + { + num: NumberInt("40"), + value: "HKD 1,842.45 to HKD 3,528.17" + }, + { + num: NumberInt("41"), + value: "HKD 1,981.09" + }, + { + num: NumberInt("42"), + value: "HKD 1,685.72 to HKD 2,893.16" + }, + { + num: NumberInt("43"), + value: "HKD 2,704.91 to HKD 3,488.97" + }, + { + num: NumberInt("44"), + value: "HKD 1,215.29" + }, + { + num: NumberInt("45"), + value: "HKD 1,724.84 to HKD 1,960.06" + }, + { + num: NumberInt("46"), + value: "HKD 1,403.46" + }, + { + num: NumberInt("47"), + value: "HKD 3,377.43" + }, + { + num: NumberInt("48"), + value: "HKD 3,097.02" + }, + { + num: NumberInt("49"), + value: "HKD 862.38 to HKD 1,176.00" + }, + { + num: NumberInt("50"), + value: "HKD 2,258.00 to HKD 2,469.70" + }, + { + num: NumberInt("51"), + value: "HKD 1,414.63" + }, + { + num: NumberInt("52"), + value: "HKD 1,764.05 to HKD 1,905.18" + }, + { + num: NumberInt("53"), + value: "HKD 1,803.33 to HKD 2,273.76" + }, + { + num: NumberInt("54"), + value: "HKD 1,658.20" + }, + { + num: NumberInt("55"), + value: "HKD 2,270.53 to HKD 2,753.72" + }, + { + num: NumberInt("56"), + value: "HKD 2,352.17" + }, + { + num: NumberInt("57"), + value: "HKD 4,831.94" + }, + { + num: NumberInt("58"), + value: "HKD 1,411.22 to HKD 1,881.65" + }, + { + num: NumberInt("59"), + value: "HKD 1,419.14 to HKD 2,297.28" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("8"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("9"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "Title", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' " + }, + { + num: NumberInt("1"), + value: "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro Cricket" + }, + { + num: NumberInt("2"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition Warranty" + }, + { + num: NumberInt("3"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket" + }, + { + num: NumberInt("4"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("5"), + value: "Apple iPhone XS Max - 64GB Used T-Mobile" + }, + { + num: NumberInt("6"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UK" + }, + { + num: NumberInt("7"), + value: "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint Condition" + }, + { + num: NumberInt("8"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good Condition" + }, + { + num: NumberInt("9"), + value: "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone Used" + }, + { + num: NumberInt("10"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("11"), + value: "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone Used" + }, + { + num: NumberInt("12"), + value: "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!" + }, + { + num: NumberInt("13"), + value: "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("14"), + value: "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All Colours" + }, + { + num: NumberInt("15"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK Stock" + }, + { + num: NumberInt("16"), + value: "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade A" + }, + { + num: NumberInt("17"), + value: "Apple iPhone SE 2nd Gen. - 256GB - Midnight (Unlocked)" + }, + { + num: NumberInt("18"), + value: "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UK" + }, + { + num: NumberInt("19"), + value: "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good Condition" + }, + { + num: NumberInt("20"), + value: "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("21"), + value: "Apple iPhone XS Max 64GB Black AT&T" + }, + { + num: NumberInt("22"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro Cricket" + }, + { + num: NumberInt("23"), + value: "Apple iPhone 11 - 128GB - Factory Unlocked - Good Condition" + }, + { + num: NumberInt("24"), + value: "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good Condition" + }, + { + num: NumberInt("25"), + value: "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)" + }, + { + num: NumberInt("26"), + value: "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("27"), + value: "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work good" + }, + { + num: NumberInt("28"), + value: "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!" + }, + { + num: NumberInt("29"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK Stock" + }, + { + num: NumberInt("30"), + value: "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("31"), + value: "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UK" + }, + { + num: NumberInt("32"), + value: "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)" + }, + { + num: NumberInt("33"), + value: "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition " + }, + { + num: NumberInt("34"), + value: "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition" + }, + { + num: NumberInt("35"), + value: "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - Excellent" + }, + { + num: NumberInt("36"), + value: "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good Condition" + }, + { + num: NumberInt("37"), + value: "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) " + }, + { + num: NumberInt("38"), + value: "iPhone 12 Pro Max 128GB Graphite" + }, + { + num: NumberInt("39"), + value: "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 " + }, + { + num: NumberInt("40"), + value: "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone Used" + }, + { + num: NumberInt("41"), + value: "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)" + }, + { + num: NumberInt("42"), + value: "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon Good" + }, + { + num: NumberInt("43"), + value: "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone Used" + }, + { + num: NumberInt("44"), + value: "Apple iPhone 8 64GB Unlocked A1905 GSM - Space Gray" + }, + { + num: NumberInt("45"), + value: "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone Used" + }, + { + num: NumberInt("46"), + value: "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)" + }, + { + num: NumberInt("47"), + value: "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+" + }, + { + num: NumberInt("48"), + value: "Apple iPhone 12 - 256GB - Blue (Unlocked)" + }, + { + num: NumberInt("49"), + value: "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone Used" + }, + { + num: NumberInt("50"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("51"), + value: "iphone 11" + }, + { + num: NumberInt("52"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("53"), + value: "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon" + }, + { + num: NumberInt("54"), + value: "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("55"), + value: "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good Refurbished" + }, + { + num: NumberInt("56"), + value: "Apple iPhone 13 Pro Max A2484 256GB Graphite LOCKED (READ)" + }, + { + num: NumberInt("57"), + value: "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked Excellent" + }, + { + num: NumberInt("58"), + value: "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T Ultra" + }, + { + num: NumberInt("59"), + value: "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("25"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPhone", + value: "iPhone" + } + ], + links: "https://www.ebay.com", + name: "eBay Titles", + outputParameters: [ + { + id: NumberInt("0"), + name: "Title", + desc: "", + type: "string", + exampleValue: "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' " + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dbe8fec85da553b7a9d4bf"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPhone" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "Name", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "New ListingRead* Apple iPhone 12 mini - 256GB - Blue (Unlocked) A2176 ~52851" + }, + { + num: NumberInt("1"), + value: "Apple iPhone 7 32GB 64GB 128GB 256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("2"), + value: "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)" + }, + { + num: NumberInt("3"), + value: "Apple iPhone 11 64GB 128GB 256GB Unlocked - Good Condition - TWO YEAR WARRANTY" + }, + { + num: NumberInt("4"), + value: "Apple iPhone 13 Pro Max A2484 256GB Graphite LOCKED (READ)" + }, + { + num: NumberInt("5"), + value: "Apple iPhone 11 64GB 128GB 256GB - Unlocked Smartphone - Excellent - Grade A" + }, + { + num: NumberInt("6"), + value: "Apple iPhone 5S 16GB 32GB 64GB Unlocked Smartphone - Very Good Condition + CHRGR" + }, + { + num: NumberInt("7"), + value: "Apple iPhone X 64GB 256GB - Grey Silver - UNLOCKED - Excellent Grade A Condition" + }, + { + num: NumberInt("8"), + value: "Apple iPhone 11 Pro 64GB 256GB 512GB - Unlocked - Excellent Condition - Grade A+" + }, + { + num: NumberInt("9"), + value: "Apple iPhone 13 - 128GB - Midnight (Unlocked) **NEW SEALED**" + }, + { + num: NumberInt("10"), + value: "Apple iPhone 11 Pro 64GB 256GB - Unlocked - 12 Months Warranty - Very Good" + }, + { + num: NumberInt("11"), + value: "Apple iPhone 12 Pro Max 256GB Unlocked Gold" + }, + { + num: NumberInt("12"), + value: "Apple iPhone XR - 128GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("13"), + value: "Apple iPhone 6s Plus 64GB GSM Unlocked AT&T T-Mobile Very Good Condition " + }, + { + num: NumberInt("14"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours - Excellent" + }, + { + num: NumberInt("15"), + value: "Apple iPhone XS - 256GB Space Gray (Factory Unlocked) CDMA+GSM" + }, + { + num: NumberInt("16"), + value: "Apple iPhone 7 - 32GB - All Colors - Unlocked - Very Good Condition " + }, + { + num: NumberInt("17"), + value: "Apple iPhone 11 - 64GB - Purple" + }, + { + num: NumberInt("18"), + value: "Apple iPhone 11 Pro - 64GB - Space Grey (Unlocked) A2215 (GSM)" + }, + { + num: NumberInt("19"), + value: "Apple iPhone 13 Pro - 256GB - Graphite (Unlocked)" + }, + { + num: NumberInt("20"), + value: "Apple iPhone 11 64GB 128GB 256GB - Smartphone All Colours - VERY Good Condition" + }, + { + num: NumberInt("21"), + value: "Apple iPhone 14 Pro - 256GB - Space Black (Unlocked)" + }, + { + num: NumberInt("22"), + value: "Apple iPhone XS 256GB - Excellent Condition - Gold - Unlocked + Box!" + }, + { + num: NumberInt("23"), + value: "🔥Apple iPhone X - 64/256GB - Space Grey/ Silver - UNLOCKED - GOOD CONDITION 🔥" + }, + { + num: NumberInt("24"), + value: "Apple iPhone 14 Pro Unlocked eSim 256GB" + }, + { + num: NumberInt("25"), + value: "UNLOCKED Red Iphone XR 64GB - CDMA + GSM - Works Great!" + }, + { + num: NumberInt("26"), + value: "Apple iPhone X (iPhone 10) 64GB 256GB All Colours Unlocked- Excellent Grade A" + }, + { + num: NumberInt("27"), + value: "Apple iPhone SE 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon" + }, + { + num: NumberInt("28"), + value: "Refurbished Apple iPhone 8 - 64GB 128GB 256GB - Unlocked - Good Condition - UK" + }, + { + num: NumberInt("29"), + value: "New ListingRead* Apple iPhone 12 mini - 64GB - Black (TracFone) A2176 ~52845" + }, + { + num: NumberInt("30"), + value: "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Very Good Condition" + }, + { + num: NumberInt("31"), + value: "Apple iPhone XS 64GB 256GB 512GB Unlocked Space Grey,Silver,Gold Good Condition" + }, + { + num: NumberInt("32"), + value: "Apple iPhone XS Max 64GB 256GB 512GB Unlocked All Colours -Excellent Condition" + }, + { + num: NumberInt("33"), + value: "Apple iPhone 13 Pro Max 128/256/512/1TB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("34"), + value: "New ListingApple iPhone 12 PRO MAX 256gb silver factory unlocked MGCL3LL/A model A2342" + }, + { + num: NumberInt("35"), + value: "New ListingApple iPhone X - 64GB - White (Unlocked) A1901 (GSM) (CA)" + }, + { + num: NumberInt("36"), + value: "Apple iPhone 7 Plus Unlocked Various Colors 32GB 128GB 256GB Smartphone Used" + }, + { + num: NumberInt("37"), + value: "Apple iPhone XS 64GB - Good Condition - BH 82% - Silver - Unlocked!" + }, + { + num: NumberInt("38"), + value: "New ListingRead* Apple iPhone 12 mini - 64GB - Black (T-Mobile Unlocked) A2176 ~52844" + }, + { + num: NumberInt("39"), + value: "Apple iPhone X (iPhone 10) 64GB 256GB Unlocked Grey/Silver Very Good Condition" + }, + { + num: NumberInt("40"), + value: "Apple iPhone 11 - 64gb/128gb/256gb - Unlocked - Next Day Delivery - Grade A+" + }, + { + num: NumberInt("41"), + value: "Apple iPhone 11- 64GB - Midnight Green (Unlocked) A2215 (CDMA + GSM)" + }, + { + num: NumberInt("42"), + value: "Apple iPhone 11 - 256GB - Black (Unlocked) A2111 (CDMA + GSM)" + }, + { + num: NumberInt("43"), + value: "Apple iPhone XR - 64GB - Black (Unlocked) A1984 (CDMA + GSM)" + }, + { + num: NumberInt("44"), + value: "iphone xr 128gb unlocked black model MRY92 B/A" + }, + { + num: NumberInt("45"), + value: "Apple iPhone 11 Pro - 256GB - Space Grey (Unlocked) A2215 (GSM)" + }, + { + num: NumberInt("46"), + value: "New ListingApple iPhone 14 Pro - 256GB - Space black (Unlocked) Brand New ,sealed," + }, + { + num: NumberInt("47"), + value: "iPhone XR Black 64gb Unlocked" + }, + { + num: NumberInt("48"), + value: "Apple iPhone 8 - 64GB - All Colors - Unlocked - Very Good Condition " + }, + { + num: NumberInt("49"), + value: "Apple iPhone 11 Pro Max - 64GB - Space Grey (Unlocked) *FAULTY*" + }, + { + num: NumberInt("50"), + value: "🔥Apple iPhone XR - 64GB - Black (Verizon) A1984 (CDMA + GSM)🔥" + }, + { + num: NumberInt("51"), + value: "Apple iPhone 8 - 256GB - A1863 - Rose Gold (Unlocked) Excellent Condition" + }, + { + num: NumberInt("52"), + value: "Apple iPhone X - 64GB - Space Gray (AT&T)" + }, + { + num: NumberInt("53"), + value: "Apple iPhone XS - 64GB - All Colors - Unlocked (CDMA+GSM) - Very Good Condition " + }, + { + num: NumberInt("54"), + value: "Apple iPhone 7 Unlocked Various Colors 32GB 128GB 256GB Smartphone Used " + }, + { + num: NumberInt("55"), + value: "Apple iPhone XR - 64GB - All Colors - (AT&T) - Smartphone - Good Condition " + }, + { + num: NumberInt("56"), + value: "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Very Good" + }, + { + num: NumberInt("57"), + value: "Apple iPhone 8+ Plus 64GB/128GB/256GB Smartphone Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("58"), + value: "New ListingRead* Apple iPhone 12 mini - 64GB - Blue (Unlocked) A2176 ~52843" + }, + { + num: NumberInt("59"), + value: "Apple iPhone 12 Pro Max 128GB 256GB 512GB Unlocked All Colours - Excellent" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPhone", + value: "iPhone" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("4"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "Ebay product names", + outputParameters: [ + { + id: NumberInt("0"), + name: "Name", + desc: "", + type: "string", + exampleValue: "New ListingRead* Apple iPhone 12 mini - 256GB - Blue (Unlocked) A2176 ~52851" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dbe9abc85da553b7a9d4c0"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPhone" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "names", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "New ListingRead* Apple iPhone 12 mini - 256GB - Blue (Unlocked) A2176 ~52851" + }, + { + num: NumberInt("1"), + value: "Apple iPhone 7 32GB 64GB 128GB 256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("2"), + value: "Apple iPhone XS - 256GB - Space Gray (Unlocked) (CDMA + GSM)" + }, + { + num: NumberInt("3"), + value: "Apple iPhone 11 64GB 128GB 256GB Unlocked - Good Condition - TWO YEAR WARRANTY" + }, + { + num: NumberInt("4"), + value: "Apple iPhone 5S 16GB 32GB 64GB Unlocked Smartphone - Very Good Condition + CHRGR" + }, + { + num: NumberInt("5"), + value: "Apple iPhone X 64GB 256GB - Grey Silver - UNLOCKED - Excellent Grade A Condition" + }, + { + num: NumberInt("6"), + value: "Apple iPhone 11 Pro 64GB 256GB 512GB - Unlocked - Excellent Condition - Grade A+" + }, + { + num: NumberInt("7"), + value: "Apple iPhone 13 - 128GB - Midnight (Unlocked) **NEW SEALED**" + }, + { + num: NumberInt("8"), + value: "Apple iPhone 6 - 16/32/64GB Unlocked All Colours Grade A Condition + CHARGR" + }, + { + num: NumberInt("9"), + value: "Apple iPhone 11 Pro 64GB 256GB - Unlocked - 12 Months Warranty - Very Good" + }, + { + num: NumberInt("10"), + value: "Apple iPhone 12 Pro Max 256GB Unlocked Gold" + }, + { + num: NumberInt("11"), + value: "Apple iPhone XR - 128GB - All Colors - Fully Unlocked - Very Good Condition " + }, + { + num: NumberInt("12"), + value: "Apple iPhone 7 - 32GB - All Colors - Unlocked - Very Good Condition " + }, + { + num: NumberInt("13"), + value: "Apple iPhone 6s Plus 64GB GSM Unlocked AT&T T-Mobile Very Good Condition " + }, + { + num: NumberInt("14"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours - Excellent" + }, + { + num: NumberInt("15"), + value: "Apple iPhone XS - 256GB Space Gray (Factory Unlocked) CDMA+GSM" + }, + { + num: NumberInt("16"), + value: "Apple iPhone 11 - 64GB - Purple" + }, + { + num: NumberInt("17"), + value: "Apple iPhone 11 Pro - 64GB - Space Grey (Unlocked) A2215 (GSM)" + }, + { + num: NumberInt("18"), + value: "Apple iPhone 13 Pro - 256GB - Graphite (Unlocked)" + }, + { + num: NumberInt("19"), + value: "Apple iPhone 11 64GB 128GB 256GB - Smartphone All Colours - VERY Good Condition" + }, + { + num: NumberInt("20"), + value: "Apple iPhone 14 Pro - 256GB - Space Black (Unlocked)" + }, + { + num: NumberInt("21"), + value: "Apple iPhone XS 256GB - Excellent Condition - Gold - Unlocked + Box!" + }, + { + num: NumberInt("22"), + value: "Iphone 11 64GB Unlocked Green Scratched Screen" + }, + { + num: NumberInt("23"), + value: "🔥Apple iPhone X - 64/256GB - Space Grey/ Silver - UNLOCKED - GOOD CONDITION 🔥" + }, + { + num: NumberInt("24"), + value: "Apple iPhone 14 Pro Unlocked eSim 256GB" + }, + { + num: NumberInt("25"), + value: "UNLOCKED Red Iphone XR 64GB - CDMA + GSM - Works Great!" + }, + { + num: NumberInt("26"), + value: "Apple iPhone X (iPhone 10) 64GB 256GB All Colours Unlocked- Excellent Grade A" + }, + { + num: NumberInt("27"), + value: "Apple iPhone SE 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile Verizon" + }, + { + num: NumberInt("28"), + value: "Refurbished Apple iPhone 8 - 64GB 128GB 256GB - Unlocked - Good Condition - UK" + }, + { + num: NumberInt("29"), + value: "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Very Good Condition" + }, + { + num: NumberInt("30"), + value: "Apple iPhone XS 64GB 256GB 512GB Unlocked Space Grey,Silver,Gold Good Condition" + }, + { + num: NumberInt("31"), + value: "Apple iPhone X (iPhone 10) 64GB 256GB Unlocked Grey/Silver Very Good Condition" + }, + { + num: NumberInt("32"), + value: "Apple iPhone XS Max 64GB 256GB 512GB Unlocked All Colours -Excellent Condition" + }, + { + num: NumberInt("33"), + value: "Apple iPhone 13 Pro Max 128/256/512/1TB Unlocked All Colours Good Condition" + }, + { + num: NumberInt("34"), + value: "New ListingApple iPhone 12 PRO MAX 256gb silver factory unlocked MGCL3LL/A model A2342" + }, + { + num: NumberInt("35"), + value: "New ListingApple iPhone X - 64GB - White (Unlocked) A1901 (GSM) (CA)" + }, + { + num: NumberInt("36"), + value: "Apple iPhone 7 Plus Unlocked Various Colors 32GB 128GB 256GB Smartphone Used" + }, + { + num: NumberInt("37"), + value: "Apple iPhone XS 64GB - Good Condition - BH 82% - Silver - Unlocked!" + }, + { + num: NumberInt("38"), + value: "New ListingRead* Apple iPhone 12 mini - 64GB - Blue (Unlocked) A2176 ~52843" + }, + { + num: NumberInt("39"), + value: "New ListingRead* Apple iPhone 12 mini - 64GB - Black (TracFone) A2176 ~52845" + }, + { + num: NumberInt("40"), + value: "Apple iPhone 11 - 64gb/128gb/256gb - Unlocked - Next Day Delivery - Grade A+" + }, + { + num: NumberInt("41"), + value: "iPhone XR Black 64gb Unlocked" + }, + { + num: NumberInt("42"), + value: "Apple iPhone 11- 64GB - Midnight Green (Unlocked) A2215 (CDMA + GSM)" + }, + { + num: NumberInt("43"), + value: "Apple iPhone 11 - 256GB - Black (Unlocked) A2111 (CDMA + GSM)" + }, + { + num: NumberInt("44"), + value: "Apple iPhone XR - 64GB - Black (Unlocked) A1984 (CDMA + GSM)" + }, + { + num: NumberInt("45"), + value: "iphone xr 128gb unlocked black model MRY92 B/A" + }, + { + num: NumberInt("46"), + value: "Apple iPhone 11 Pro - 256GB - Space Grey (Unlocked) A2215 (GSM)" + }, + { + num: NumberInt("47"), + value: "New ListingApple iPhone 14 Pro - 256GB - Space black (Unlocked) Brand New ,sealed," + }, + { + num: NumberInt("48"), + value: "Apple iPhone 8 - 64GB - All Colors - Unlocked - Very Good Condition " + }, + { + num: NumberInt("49"), + value: "Apple iPhone 11 Pro Max - 64GB - Space Grey (Unlocked) *FAULTY*" + }, + { + num: NumberInt("50"), + value: "🔥Apple iPhone XR - 64GB - Black (Verizon) A1984 (CDMA + GSM)🔥" + }, + { + num: NumberInt("51"), + value: "Apple iPhone 8 - 256GB - A1863 - Rose Gold (Unlocked) Excellent Condition" + }, + { + num: NumberInt("52"), + value: "Apple iPhone X - 64GB - Space Gray (AT&T)" + }, + { + num: NumberInt("53"), + value: "Apple iPhone XS - 64GB - All Colors - Unlocked (CDMA+GSM) - Very Good Condition " + }, + { + num: NumberInt("54"), + value: "Apple iPhone 7 Unlocked Various Colors 32GB 128GB 256GB Smartphone Used " + }, + { + num: NumberInt("55"), + value: "Apple iPhone XR - 64GB - All Colors - (AT&T) - Smartphone - Good Condition " + }, + { + num: NumberInt("56"), + value: "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Very Good" + }, + { + num: NumberInt("57"), + value: "Apple iPhone 8+ Plus 64GB/128GB/256GB Smartphone Verizon Unlocked T-Mobile AT&T" + }, + { + num: NumberInt("58"), + value: "Apple iPhone 12 Pro Max 128GB 256GB 512GB Unlocked All Colours - Excellent" + }, + { + num: NumberInt("59"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours - Very Good" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("27"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPhone", + value: "iPhone" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("4"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "eBay Names", + outputParameters: [ + { + id: NumberInt("0"), + name: "names", + desc: "", + type: "string", + exampleValue: "New ListingRead* Apple iPhone 12 mini - 256GB - Blue (Unlocked) A2176 ~52851" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dbf46a869cb52a8a8f6e9d"), + containJudge: false, + desc: "https://www.ebay.com\neBay Names and Link Addresses - demo", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPhone" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Click Next Page", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Next", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Collection", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "Name", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" + }, + { + num: NumberInt("1"), + value: "Apple iPhone X A1901 - 64GB | 256GB - GSM Unlocked AT&T T-Mobile Metro CricketOpens in a new window or tab" + }, + { + num: NumberInt("2"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked Smartphone Good Condition WarrantyOpens in a new window or tab" + }, + { + num: NumberInt("3"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" + }, + { + num: NumberInt("4"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("5"), + value: "Apple iPhone XS Max - 64GB Used T-MobileOpens in a new window or tab" + }, + { + num: NumberInt("6"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" + }, + { + num: NumberInt("7"), + value: "Apple iPhone 11 128GB Black Green Red Verizon Unlocked Mint ConditionOpens in a new window or tab" + }, + { + num: NumberInt("8"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked (CDMA+GSM) - Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("9"), + value: "Apple iPhone 11 Pro, Pro Max Unlocked 64GB 256GB 512GBSmartphone UsedOpens in a new window or tab" + }, + { + num: NumberInt("10"), + value: "Apple iPhone 12 Pro 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("11"), + value: "Apple iPhone SE (2020) A2275 - 128 GB - Space Gray Color - AT&T only- Beautiful!Opens in a new window or tab" + }, + { + num: NumberInt("12"), + value: "Apple iPhone XR Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" + }, + { + num: NumberInt("13"), + value: "Apple iPhone SE 2nd Gen 64|128|256GB 4G LTE 4.7 Verizon Unlocked T-Mobile AT&TOpens in a new window or tab" + }, + { + num: NumberInt("14"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Very Good Condition - UK StockOpens in a new window or tab" + }, + { + num: NumberInt("15"), + value: "Apple iPhone X - 64GB 256GB - Unlocked - Very Good Condition - All ColoursOpens in a new window or tab" + }, + { + num: NumberInt("16"), + value: "Apple iPhone 8 - 64GB/256GB - Gold/Grey/ Silver - UNLOCKED - Excellent Grade AOpens in a new window or tab" + }, + { + num: NumberInt("17"), + value: "iPhone 11 ProMax 256GB Unlocked Grey - Great Condition w/ ExtrasOpens in a new window or tab" + }, + { + num: NumberInt("18"), + value: "Apple iPhone 11 Pro - 64GB 256GB 512GB - Unlocked - Excellent A+ Condition - UKOpens in a new window or tab" + }, + { + num: NumberInt("19"), + value: "Apple iPhone 11 64GB 128GB Verizon T-Mobile AT&T Unlocked Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("20"), + value: "Apple iPhone 11 Pro 64GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("21"), + value: "New ListingApple iPhone 11 - 64GB - Purple (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" + }, + { + num: NumberInt("22"), + value: "Apple iPhone 8 | 8 Plus 64GB 128GB 256GB GSM Unlocked ATT T-Mobile Metro CricketOpens in a new window or tab" + }, + { + num: NumberInt("23"), + value: "Apple iPhone 11 Pro - 256GB - Gold (Unlocked)Opens in a new window or tab" + }, + { + num: NumberInt("24"), + value: "Apple iPhone 11 Pro Max 64GB 256GB 512GB Unlocked Smartphone Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("25"), + value: "Apple iPhone 11 - 128GB - Factory Unlocked - Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("26"), + value: "Apple iPhone 7 - 32GB - All Colors - Unlocked - Good Condition Opens in a new window or tab" + }, + { + num: NumberInt("27"), + value: "original Apple iPhone 1st Generation 8GB unlocked 2G GSM network work goodOpens in a new window or tab" + }, + { + num: NumberInt("28"), + value: "Apple iPhone 11 - 64GB 128GB 256GB - Unlocked - Good Condition UK StockOpens in a new window or tab" + }, + { + num: NumberInt("29"), + value: "Apple iPhone 7 - 32GB - Silver (Unlocked) A1660 (CDMA + GSM) Very Good!Opens in a new window or tab" + }, + { + num: NumberInt("30"), + value: "Apple iPhone 11 64GB 128GB 256GB Unlocked All Colours Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("31"), + value: "Apple iPhone XR 64GB 128GB 256GB - Unlocked Smartphone - Good Condition - UKOpens in a new window or tab" + }, + { + num: NumberInt("32"), + value: "Apple iPhone 11 Pro Max - 64GB - Midnight Green (Unlocked) A2218 (CDMA + GSM)Opens in a new window or tab" + }, + { + num: NumberInt("33"), + value: "Apple iPhone 11 Pro Max - 64GB 256GB 512GB - Unlocked - Excellent A+ ConditionOpens in a new window or tab" + }, + { + num: NumberInt("34"), + value: "Apple iPhone 11 - 64GB / 128GB - Unlocked Smartphone - Very Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("35"), + value: "Apple iPhone XS - 256GB - Silver (Unlocked) A1920 (CDMA + GSM) Opens in a new window or tab" + }, + { + num: NumberInt("36"), + value: "Apple iPhone 13 - 128GB 256GB 512GB Unlocked All Colours Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("37"), + value: "Apple iPhone 8 Plus 64GB Factory Unlocked Smartphone - ExcellentOpens in a new window or tab" + }, + { + num: NumberInt("38"), + value: "iPhone 12 Pro Max 128GB GraphiteOpens in a new window or tab" + }, + { + num: NumberInt("39"), + value: "Apple iPhone SE 1st Generation 16GB /32GB /64Gb /128GB Smartphone Unlocked #1B1 Opens in a new window or tab" + }, + { + num: NumberInt("40"), + value: "New ListingApple iPhone 8 Plus - 64GB - Silver (UNLOCKED) USEDOpens in a new window or tab" + }, + { + num: NumberInt("41"), + value: "Apple iPhone XS ,XS Max Unlocked Various Colors 64GB 256GB 512GB Smartphone UsedOpens in a new window or tab" + }, + { + num: NumberInt("42"), + value: "Apple iPhone 11 64GB 128GB AT&T Sprint T-Mobile Unlocked Verizon GoodOpens in a new window or tab" + }, + { + num: NumberInt("43"), + value: "Apple iPhone 11 Pro Max 256GB Midnight Green Unlocked ExcellentOpens in a new window or tab" + }, + { + num: NumberInt("44"), + value: "Apple iPhone 11 Unlocked Various Colors 64GB 128GB 256GB Smartphone UsedOpens in a new window or tab" + }, + { + num: NumberInt("45"), + value: "Apple iPhone XS - 256GB - All Colors - Unlocked (CDMA+GSM) - Very Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("46"), + value: "Apple iPhone 11 - 64GB - Black (Unlocked) A2111 (CDMA + GSM)Opens in a new window or tab" + }, + { + num: NumberInt("47"), + value: "Apple iPhone X Unlocked Various Colors 64GB 256GB Smartphone UsedOpens in a new window or tab" + }, + { + num: NumberInt("48"), + value: "Apple iPhone 12 - 256GB - Blue (Unlocked)Opens in a new window or tab" + }, + { + num: NumberInt("49"), + value: "Apple iPhone 12 - 64GB 128GB 256GB - Unlocked - 12 Months Warranty - Grade A+Opens in a new window or tab" + }, + { + num: NumberInt("50"), + value: "Apple iPhone 12 64GB Factory Unlocked AT&T T-Mobile Verizon Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("51"), + value: "Apple iPhone X - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" + }, + { + num: NumberInt("52"), + value: "Apple iPhone 6s Plus Unlocked Various Colors 16GB 64GB 128GB Smartphone UsedOpens in a new window or tab" + }, + { + num: NumberInt("53"), + value: "Apple iPhone 11 - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" + }, + { + num: NumberInt("54"), + value: "Apple iPhone XR 64/128/256GB Fully Unlocked (GSM+CDMA) AT&T T-Mobile VerizonOpens in a new window or tab" + }, + { + num: NumberInt("55"), + value: "Apple iPhone XR - 64GB - All Colors - Fully Unlocked - Very Good Condition Opens in a new window or tab" + }, + { + num: NumberInt("56"), + value: "Apple iPhone XS Max 64GB 256GB 512GB Unlocked Smartphone Good RefurbishedOpens in a new window or tab" + }, + { + num: NumberInt("57"), + value: "Apple iPhone 12 Pro Max 256GB Unlocked GoldOpens in a new window or tab" + }, + { + num: NumberInt("58"), + value: "Apple iPhone X 64GB 256GB 4G LTE 5.8 Verizon Unlocked T-Mobile AT&T UltraOpens in a new window or tab" + }, + { + num: NumberInt("59"), + value: "New ListingRead* Apple iPhone 12 mini - 128GB - Blue (Unlocked) A2176 ~52847Opens in a new window or tab" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "Link Address", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" + }, + { + num: NumberInt("1"), + value: "https://www.ebay.com/itm/275621347165?epid=4009565593&hash=item402c4fff5d:g:GksAAOSwon9jwKs4&amdata=enc%3AAQAHAAAA0LKRmqqWx5OPEZfa7A3aRP3L2DiuB9svO4VztlFXtjLC%2FP4%2BcWNWwEBZXnVqjo0shvJyPl%2FJU5%2B9QVJYor7ihcRRv22KXkWTYeocyxjU7G9txYQ3YcqpV7BlHspMpCuPCFkegCIs6dY3M4SAadrnjV2T7ucznx%2BG9VXBG1Qx6lb1x5eV1t8aITS%2FZazBVA%2BnyTH00%2BsKKPwXJucpAqS80gDlsCFzJCP7QvlAGXYdQBjx70MA2l3mFTH2T91oWWIpK%2BPp%2FckUDVlbJaGtWgfYmTU%3D%7Ctkp%3ABFBMuoeqssJh" + }, + { + num: NumberInt("2"), + value: "https://www.ebay.com/itm/284427971922?epid=17034215590&hash=item42393a6d52:g:5N8AAOSwxGthKe4R&amdata=enc%3AAQAHAAAA4M5eT2AiRrAwtbgqXGRm%2BXVy9n0qktk3rHUZXzG%2BsgpRmUzbUxNNGUCUGnjlmnMIqF9Gtfn4J4BrEt1ZYchG5eJ3%2BXWGMigw9DEj%2F%2B0x5chQL7jz08VUYtYdHyNZg507EFXYv0gttSfRfOKh5fwV%2BaxFJop0nZCz8pFlB%2FRjCg3nYkpV2u%2F0LCJHDFeGbj2KdJDH6nAp%2BPkhAz2DBUKkwc3KRl6KgJHK8Mqrqp%2BQdbgJo02%2F%2B8Ozv2QrIANfw9JTaFALDtmNoT0Gst5u2UKbfzgMjAwYzuHKXoAAwgiZlDn7%7Ctkp%3ABFBMuoeqssJh" + }, + { + num: NumberInt("3"), + value: "https://www.ebay.com/itm/185551229219?epid=239099177&hash=item2b33b71123:g:L~MAAOSwIc1jW-Oh&amdata=enc%3AAQAHAAAA0Ei%2FHaIfrdC9r1CGwS%2Fqaga1yJsD4RumFxrkhALy8UKnx6Wn%2FYmjNEsa1wy0CakU0g0XDQwOLFT85ni4Fx5MjwhmvBGhs0nVvKvpjYpFk4ab%2Bz1PirrDSr4xh88%2Bz5JpK07JF98td7vdVQug8%2B5eU6h8o%2FqNYeNPI%2FEF%2FJeqZGtApJzCapqd9xVOI%2FJMSRmt9MAP8NF0xAErePpmFmFmYhJFW4oq9WXwktqG%2B2pSttoihrFYkvfnK%2BNyUCJb0ew%2FGubnZUetPdHpdPz9NZipYqM%3D%7Ctkp%3ABFBMvIeqssJh" + }, + { + num: NumberInt("4"), + value: "https://www.ebay.com/itm/384354658993?epid=14034212858&hash=item597d52aab1:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4GfEUTxow6USl6bAFapoHtI5u26z2JPHH7%2F%2FBfoRYkNfHjJ4%2FU8mMv3gwzCE03%2FDTyA668sZ0kXIXh4lN7qaGNd3GDBFA6ZD%2ByLOyJ2QuiJByfX155qZpLLypkWeF1ObvUmpKwF%2FvBGDcpMhN8j%2Fodhx%2FiHRfTm2ry3gQzTp6vi2FcUBdAXCQWnh6A73D1wlMjJhBNvMxBVGIS8R%2B3m3%2BT2LNRdF%2F1eAr%2BwcH2T%2FJ84m91EIg95wDWdYtS59V0OLeM7FXBj55M%2FE4HuVlAE5iEjAOs8S9iC20wQr5ABcR%2Fx0%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("5"), + value: "https://www.ebay.com/itm/266104461656?hash=item3df50fd958:g:FVMAAOSwcHZjyK3N&amdata=enc%3AAQAHAAAAkMnZsbas35KCk%2FKW5FkWhd9YihRBIQZfKwBOUop1G7cd77yagTIsL9UtXOTcgsbNdygZ05GjK%2F8NRy74JnHF%2FkA7bblIQfCOV2TnKQeKdpiRPnB2qm7%2FzSKYAK9hAdCyaOV3tPLb9r2wG2kfo2CIZ1P4n5oUsHHw3MWK5eF%2FhtI9FWRnyMxbrLAE%2FNWxGM9SsA%3D%3D%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("6"), + value: "https://www.ebay.com/itm/284837173732?epid=27034209608&hash=item42519e59e4:g:oPQAAOSwpDpio8kq&amdata=enc%3AAQAHAAAA4LedSPm1pfKlFdImyMXI6LDoSNlT1syYE9y7VcRh083cVmqlijjzeITpNmgp9lL%2BUSm7OftDmaEqajMCy1hH1B7fKCmeoFclRZRUfFCxOKnlWIy4DLJBr8KqY5%2Bvfjfo2IesZ5ZWrphX2Wu%2F2j5IzSNwIwW4NhlDoQUZgRAAbO5rE1ZeEHaWqvZb54aELniR2P2e2OClozO4A9LbM6E33oyMSgXQX1aeZnjhJ4pA3z2YcDf992bsShgltr5x1IOAp2zuQRTl%2F1D%2FIuIe%2FJnJiwtkWhfJ7P6yNR3i0P3Comwl%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("7"), + value: "https://www.ebay.com/itm/115382465390?epid=17035818063&hash=item1add54b36e:g:dKoAAOSwRLRifmnG&amdata=enc%3AAQAHAAAA0Mr1qoKp%2BHTjRd0HFCKFhepWD3r7S6zyQM6qnMPPNSsq1muHd7bRA7gpvh9%2BR16xSBV5sFZyGIciRZuCRI9wQMQiTE0HhmZgGuaCFPhjiFpLStA7D7xWWSYYEMDXYPI1hvY2PdmeWcFdkBv8o7PKKBWGMsNfrrp4ybtcElhGONVBIZgIOsdWqyCr%2BDHvzg9s5TetZPXRi%2BQysbpb9CdVVlCHKXXAUBxQgIdXqsE2%2BlTxRvhziCSGWoDYfsFRMbZ0fbLLenzO5oXRtwRLdMf8W9w%3D%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("8"), + value: "https://www.ebay.com/itm/174911368932?epid=13023706562&hash=item28b987aee4:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4BYzR%2BW70yaCb7fiAGMUiwHpKVhjj9Yrs0mALp6Yj5K4ZV5lNkgjjSx3WwTfWXERRXZwY9qrhiIq%2BusfV2p8WFmH1wTX6%2FxZwX8MF9FW89zptnptJy4bZd8GEcZgJoGP6rwOs3cXlZvOaU8GPMhRwjvjvqfcrcZ71MZbzzw26dOFVUxWye495h8mq575ILei%2FGs9hGx%2FGtfTnbkMqt%2FJcoj1tHP7ASU4pqUYKf0GZl061iypnLgSm5x3HCnd3ZYtCPPl3P0gbqCTMFSk57lgkz4arVRPFgzInnCqTQcjHaBZ%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("9"), + value: "https://www.ebay.com/itm/134304284556?epid=11037566785&hash=item1f4528bf8c:g:BtMAAOSwY9ZjW8s9&amdata=enc%3AAQAHAAAA0A7ZwCdas9HwReYsPxksq35ZC3yg0bq9QrjBH5g55Rk%2F3mEFdM%2Bbni7bXBrEjf89aNEfpYUrwxjn6XTL%2BHebYVfdcXS2JEBvUFMhu7ybb4mxdkDpn4DwLjf44iJsx6GGNDOlJZtQkn%2Bb3M5OpdcyJ4cAVxYv84YzmREetNOF1dv2VawtWi4OgpWcCBrCMux51TMBqGDp%2FD4fJpcuuURNMhd%2FYeSQOaNg%2FwRoUolLR8L%2F6E9%2FzCmhObilajteLbuAPhpkpOLCNF5AxxT%2Fnx33Oh0%3D%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("10"), + value: "https://www.ebay.com/itm/265427542241?epid=25041703738&hash=item3dccb6e0e1:g:Bx0AAOSw2w1hpKF3&amdata=enc%3AAQAHAAAA4MvC6Na2jkJUpYaYWpqMcESD9zwQLxHpstfeDKh0fkBKan2fH4XzHGovpbaEyyAcN6HFaAjupDxp9LNNylRfcKWJ6QpnYobpMeBsOw0dShsTt2QKxnhNHYOdh4JBTO8OgpuXKvpjmSrvGyseLMjn2QudSCqOnBSgnm4d5Ci%2FpwE3eoKo27gXum%2FnPwV%2BVngyn6bhJHAf%2BX4jOop0kgsOWv9wwyN2DAgy4kcBxlk21aKvsSfdupdb6iogfnmBjlTMXFFpgv22LcSyl3pn8UZEUw%2FcPzThaLMR3%2FK1wjdwePTo%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("11"), + value: "https://www.ebay.com/itm/115691162547?epid=4051364949&hash=item1aefbb0bb3:g:II8AAOSwlO9jeBJ8&amdata=enc%3AAQAHAAAA4NZ%2FpQYQVCVzZPkiXgQt5%2Bsh8xpsB26BdrW8A9nj1Z2Bejf4mdE0nC3FLqpdlYyDDNYsUXrleFpH9xFutW0d7illZC5J4Qupf%2FKwSHpCrSitUJDnxycgqbdU9sMBG8IQiF%2BzGq9kJdt9%2BCuyNJKjjyEaBccfhl4WuKoqso5bwGbJxH2M38Z6K2BGRGgifKr5THOSczWAQPDpHxbgrY0Jf02%2FrIkn4CE4TBnaVl7WiDOPtuCUUPRx0JpgwvdfGjW8DbfemJzaoyylO6q8ojLjm%2BM0on0O3OPsmOEApTtSG7n0%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("12"), + value: "https://www.ebay.com/itm/134289912060?epid=22034747823&hash=item1f444d70fc:g:IzYAAOSw6tdjUN3W&amdata=enc%3AAQAHAAAA0NH4iRsvvaEBqYiBaAmyTvhN72tTqAPA2CfJ9VNAfqzEwplsjc2KYde8MV7UOX3ddyytJ2ye7nuF79idOJeosYY4T4NDkARHmfH3mUtjZ2%2BTTUrYvgmwKJlAYM%2BS%2BPt4ELAZl34mGmS5vh3QGKNJnaEYaoYiUQbU6ecHAcqJEk1Pk46%2FVZuAllsioeNabp4oMVVYSV%2BvjCqjlHR5nINdPJYZYa3zTrFZilValvznXR051Pn289ZJITrEOcKhgSYQgmM4B7UhE%2Fh146IoNoVK7wU%3D%7Ctkp%3ABk9SR7yHqrLCYQ" + }, + { + num: NumberInt("13"), + value: "https://www.ebay.com/itm/165337199649?epid=24037853119&hash=item267edd7421:g:WK0AAOSw5pxjgrpi&amdata=enc%3AAQAHAAAA4BcTaXjAPWkPQHEGLadS0WevO4pCHHbxB3E%2Bghp%2FwSrSgRIZxdhNUWRkvYtDmmA5NcjtfCfH%2F%2B7%2BLASFZVoedKqaqqwklr1puMWBnzC4EPuOTuoeOjqIo%2BNMC2%2BFjYrediSVBOZGwX5l%2F8ALbZqojBoYIdXxkSMNlT7alj64oe%2BLjmCC3UNI4QUMWm0LOll9EkCuWPKi%2FKpi2O7Jrd0W%2BEmLNmJ844%2FCQKj5DZ9OHZwL%2BrTXc4av804pAF%2Fj9%2BkoOd1Vab2Qsmhnms5DLhIfnmqBDuUvb28%2BdVGFOQXCIemW%7Ctkp%3ABFBMvIeqssJh" + }, + { + num: NumberInt("14"), + value: "https://www.ebay.com/itm/284837193309?epid=13057692504&hash=item42519ea65d:g:ITYAAOSwFaVin-Fd&amdata=enc%3AAQAHAAAA4LOHQXdx6PMPZ8BELQ8MPrLBBd%2F3p9CxwKR%2BN55WPrnf2LXiH8d2jSfgdBSja68RBxt93aSYJ2oX9m%2FYaF6LKIA728d0ZRNIiQnTjar5tWblRvWM9w02WWgJsuj7K6KXkIi%2FeQzuEeOp2d3lOt6l9hx1ajdq18HCCVEahnN%2BbCOlIoTKvdZfCeXGKblptxg2f68S1f8MMmAt8MSQ17cqz3DIpeyFIbjZhMcFEQRdYS5Z5IKqgDRpjtu0%2BRtFbfmNfV6GsOdUfaQ%2Bkeu2EE%2B53nJNulypa8szcne0ty2yGmKJ%7Ctkp%3ABFBMvIeqssJh" + }, + { + num: NumberInt("15"), + value: "https://www.ebay.com/itm/284842367385?epid=14037756699&hash=item4251ed9999:g:230AAOSwiAVio8mQ&amdata=enc%3AAQAHAAAA4CmsLG5XpeMzPM4bhZX8I%2FsN4u1Vfdw7Vl9uH0EsZHoS4msT8d2RBADlwH2Xztbdbvxqq0sAZyO9uYLx7FHuGNXqlpS8tSvE3VW4irrIr8Vh%2BN16AmhtUBX2WXsdVLxyqkc4c79o9o%2BClf3y5srPjPdk3mMFCY59aI9%2FIJRVWMl3Vr0d2hyBAt6V7HR24HxN5j7JYjYqmQfJkgm%2FmXvq53q3TVtV5HdmoSQDi3OjOsSqesl5JoFV2xCVx0bMgwaEkW6VtFVlUsrKvsraLX2mNK2xVDJ8BlmtgFQj3xoUupmE%7Ctkp%3ABFBMvoeqssJh" + }, + { + num: NumberInt("16"), + value: "https://www.ebay.com/itm/114975199041?epid=245228137&hash=item1ac50e4f41:g:nnsAAOSwecFhNwVE&amdata=enc%3AAQAHAAAA4DA0xaGh9QtOHo%2B0gmkmSwsL9vXdb7L%2BgYw%2BWhXynpRXCUKMBcxv9cpOdGNh0fW3YOUc9ypjATmcwpO0227HBT7QbNhOySgI6H1BJfgaC6s1DygmUB60DpVzUFmKAFQrIfyZ3SsrZCwYYljpHAZbnHapV7N4cKoz0AKX9gLlXFTNH5B5acSul7m5MMho9rrTA3zvPg0pQeTiDCng6W5FeuG3P9OwgP%2B46fXOGQSC4TFYOahzFFus0kKxH1ZhUpXI%2FzlXQw3HL6tijDlXWkFkiTLlQAzwMmfVLjzdFk91AniF%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("17"), + value: "https://www.ebay.com/itm/285126736012?hash=item4262e0b88c:g:QcIAAOSwDSRjxB15&amdata=enc%3AAQAHAAAAkGKiAlwtur%2FmPt%2B9vIUM6Cyu3DdqkEPdG9Sj0qXc1WMhLE0Bx4tBvgMdHhtXTMDmmSeFtpBU1UU06Fsgr5p3LsXLSs7sjQ31BCoYBid5iLj247vpFIhU2Ie62URrdVXMPSK3fvyHppzD8BaqyrF6nabK3PHExgZl3CQ%2FtS9Sav2OHr2fQmmeT9emuqqVXUW2Fw%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("18"), + value: "https://www.ebay.com/itm/284843502844?epid=11034210273&hash=item4251feecfc:g:q4kAAOSwr1Nio8pF&amdata=enc%3AAQAHAAAA4AqqXJw6a3IVMos1JmYlvdF%2BspvAt0nIKthfNtw8GBKxhA3MqQbi3rB5y4%2FVpXvKppuTlWMWUjsg1UwLXnAi6NhjnlrlGkAwaEawiC4PlmoZzTA819Wt%2FRM4b5GYG0o3MfMftflW6%2FK5Ib2E1crI%2FHStqMHLyRlBvb8wZAL3FE%2Fc5xQA5VDRzQ5wksk1rXtT6YQoiW6McBdIFFbrLFW3%2BIidgZHDUrPC26CE6U4jhW4DmVrl%2BZijyBTpRlSaRaaPcwUOEKyYSKr%2Fw2anP3UMGyNT71aTqzFauCpcKhcVW9hd%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("19"), + value: "https://www.ebay.com/itm/115382462850?hash=item1add54a982:g:Qm4AAOSw~9tifmko&amdata=enc%3AAQAHAAAA4CtHO%2F7BqM6oDOBsGwo1GLY6nqMr65odDv4SJ4zxNGxeoxl47AUl%2FArq56grc7G3IB6%2FX%2Fk0u0Nn8KtlhH7TKXCiYqlbZxPd9hMnTMzh%2B6Lmtu%2B%2B91bKluc0a%2BYi68OkaQoxUBW6JtUoXHylhN5mbiWxxy4%2B2xojZMpFj1GalpMfQYiNZQzt4pWOOD436%2FoerSU06aTif5Go6jRKd4K04PFvUsjOPrEtlDhhGke3o1eGLyo9QcCd5oSrSOJmAHijrWsx%2Fl99%2BkZF%2BJ1yN533rvLl7VCM1jcNHIXa9XA7gSMP%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("20"), + value: "https://www.ebay.com/itm/265495435187?epid=11043394863&hash=item3dd0c2d7b3:g:cDgAAOSwaI9h3XSA&amdata=enc%3AAQAHAAAA4KsoLUFY4EfgdFccXqshoZUkDxOQBoJqKdMuIGPFrvuZ%2FxqMW7hdxi9UQpgSGDUDuRJdXZsA4ReDCxcyNoAYbVPasi%2FygBXJlx8OusnlaNknU7gNzx1mLHtN6MfiwZJ1f5IyXrs77JpkqDN2qhl%2BZ9E%2Bx%2BSAAjBfDdcu5nYgrvCTXT5sit9Of4RuglxKgyJoUschpVFWh3UG2XPoOYQgdaprXOmVBwkucF9lFyTXtcfeMzupWVV2IPd%2B4tey8AMyTYbV%2F0SZKDCGfvNLwpTthlsE8YAjcbgwO%2F8dgo7%2F15Z1%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("21"), + value: "https://www.ebay.com/itm/195581816273?epid=26034221296&hash=item2d8995add1:g:9dkAAOSwcs9jzT27&amdata=enc%3AAQAHAAAAkDcQT879sZ2qF%2BLXWtrmZwB11w4IkwsU6HGUfXZTG2Zl0Gz6Jf87JadFAiT8Z%2FkWI3ekO5Xg2G0gi%2FcPMRefKWZtyePp2ne5qt0wpeECpmyJ09Xne1audacJP8nQ8nghONsUrodXv8TBT0VdWnhtgN1wbAK4VXKwBdrz9cWB0p%2B23yWW7y4fNRk2f7TBUO%2FUvg%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("22"), + value: "https://www.ebay.com/itm/275419609847?epid=18039187887&hash=item402049baf7:g:tlsAAOSwCoJi8vb1&amdata=enc%3AAQAHAAAA4NfdraIMVt8TBTcv%2BeSSJe9maUWtsEU9tzzvPtf2Ef5TCEUzabtE3gsrvNlTzo%2FdQ7%2BiZNJ6gNBhcsbtXBaD5yiWsd%2FbE6sfgyPw83X9neUWJvVC7CoFVOWRL0pRBRyQogzoOaiz8krHBiAShGn1fGSI64KrpQis9OYIruFuXoDCcoLM7gon8A6VN7Zo2qPpz7I%2FtSg%2BWwJS9IuqWkCAfWTua1cE2cztUZnHV5UPzYunkN%2B9Kp7qitMxAJPDJ49RHQHaIEcNtadQz5EJL6GmEx7Re87YjU1EJaNJU8nSbQuP%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("23"), + value: "https://www.ebay.com/itm/185755456278?epid=13057692509&hash=item2b3fe35316:g:d~oAAOSwB8djzAs-&amdata=enc%3AAQAHAAAAkE8PdZMZa8t8p9Xet8vqO%2BqTUK9h1ZvrkMHBVJ6FgBSCMAh6JWSjwvLwef6Uza3AP6C4mQLDluxmOwt7q%2BousyLSRJH7mCbIcq6u43vnJLZMtesKOGixWJae5SDIxBiiQClmTGaVveKHIijcarV%2FtBvFdxf56Uf3fUwPFFVRdPh2QYqdciIJ%2F2I3XkTPldxHSQ%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("24"), + value: "https://www.ebay.com/itm/275555429968?epid=23057357625&hash=item4028622e50:g:834AAOSwmCdhXunZ&amdata=enc%3AAQAHAAAA4M0tm3d2t02bud3a5WDVnXcbAPsDSJHdYlgDVdhCnD5EJUnttsbQQm%2F%2FMZ7Jkn1MO1PBc9af%2BxuEuNf6V0uCW%2BU2fkIITL%2FzaYhHWwSJBrGrLngK2K9Dy59GO8BT57A%2BHs2QbH%2BZ4nGao1S6farpQMPc%2B50r0OX7JS0pa13pa5KRUymrhch432nRuIAsYyjzcS43o2bKg1bRMmCch7ThcQ3lRM04EfY%2FH%2Bbp7YydhI1WruQLIKvMGqzzkmVbnt0fnzKQ%2FeSAlVVy8co1HsKbpWVuzhEeZTOsb%2FypOdbzWrps%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("25"), + value: "https://www.ebay.com/itm/115398775717?epid=9051376057&hash=item1ade4d93a5:g:vYAAAOSw3bRij4R6&amdata=enc%3AAQAHAAAA4H3K3cmdwPRC5wET7%2F2xkS4%2BY06wViXKPIzSPY9Imm1QX%2FPtjywhAvfLkokX%2F4wbgcFEm%2Fvx2pN6m8QRMmFkGXRN7xGvIWHm%2B%2BqGV7N0d0HhcRKSLgMTSM17K6McInGnumb5KJrx3%2F5DHtUW9FQ%2BtIfCed1k3ch2RF3bcNQH2GbYbxKNMTs7gmWDWQOFHMxn6dsghvY8FJ80YxoDy9Dxx6c7F3JPGgM3qIBtnpOe4fSeYfGykQYpmdJLF5AM%2FrQlLMBS%2FaT%2FzzCz%2FYEPjxlJKtkzq1mS17zqsJXEvR1V5Y8K%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("26"), + value: "https://www.ebay.com/itm/384342925442?epid=14035917224&hash=item597c9fa082:g:9qkAAOSwM5JhH1-5&amdata=enc%3AAQAHAAAA0FWLtXypj6qADoDeQuHqZ1dVP9hE9L9dXC%2FmA2tUkadtSewnzOsO%2BWAGeAH3bCaLOAR%2BW9ZNmeohMTi%2FxpG54pcp92uv7fNSpMbB2YwbYyHnelg%2B6b6e4mOdnoK3Mw5SD3yv44Ng%2Fxz2c153HjXzycivTSZWIQkcEVsemnq2ozQQs1sz9bt%2B3LhbH2WpfydsE1Z%2Bi4jpd980fRWe28YjX%2FJ8G1mCpPFXaVjIiWWE4%2B3YkN8aQXy6flTJRVvKiIMXXxErIq82zGwHWYX5WL6V96o%3D%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("27"), + value: "https://www.ebay.com/itm/394373978599?epid=240174780&hash=item5bd28559e7:g:nnQAAOSwiWJjlZr-&amdata=enc%3AAQAHAAAAkG1Du%2Bf4d07y8jBatVlqQ6SrCXgb9%2B%2BCy7VEWR0SRnNg1QdDdy3jrjKBMJgOwde%2FTHRxcUaeY%2Fqz7F157bywzqAZbbcnHPQiRcyQJlGAZclv1mtx2SthGWygOGKBRb33tCWUlLSWcQKTi20BHhx%2FuWx1hrxgxEd2kyKxtGwneEVWJYg3el0xtBqco9%2BllRgi9Q%3D%3D%7Ctkp%3ABk9SR76HqrLCYQ" + }, + { + num: NumberInt("28"), + value: "https://www.ebay.com/itm/284837223550?epid=26034221283&hash=item42519f1c7e:g:6XgAAOSwAUdio8q9&amdata=enc%3AAQAHAAAA4KRLndsNFZE%2FG2Gwi0RpkZ1XmZlZ3CfW5ZpPw1JxYfjlFNy5VmCoOOLdQrh5zZouvwojEdqvGlkW8zktR4vAw9t%2FVo0oYwwxjUR7ffJ%2BKbjEp0fZPj16NUZ2FKo7TUr32SY90uo08bk2rM18xuthWxq0ZyVkG7g3nSY1sLhJqIfK2c%2Ft%2FG4ey81K9ocEwFreqtTJd5UJA%2Bpi9YVcwQ%2FCPgryxqobstj6KBprZIyFXKoAfHq7%2BzrYN%2F1zLWMwJvrLd62XlZIZGWWdyLW72kT8q8Xw4ECDli1M1y4pevUXYghG%7Ctkp%3ABFBMvoeqssJh" + }, + { + num: NumberInt("29"), + value: "https://www.ebay.com/itm/275563969227?epid=14035917224&hash=item4028e47acb:g:OiMAAOSwAHRjilss&amdata=enc%3AAQAHAAAA0KUuubeWDARmNbgSomW054zgf1E1m4NRwGo43HJpc2oRWNl8HovOrzDkqokwP%2B3y0aSHXUb4wp7Elkoa5y%2FtxjApmorPmtGFL29rlXplwv3vQG30atZC3L8ryotC59ltwi46ig6bog1MT7qS1Rtt1YJfMWRE3LyBeTuH%2BmLE3ltGuBXdHDLXkkysBIbPjR9dXqWok3b1409MnqDYsflAbzh3t3fuYqPsw1h0aFPXgM%2FuCr0gAKva2I3hM50WHuuLiFO371sdQpVixA1QGo7M02c%3D%7Ctkp%3ABFBMvoeqssJh" + }, + { + num: NumberInt("30"), + value: "https://www.ebay.com/itm/384392379194?epid=15034218412&hash=item597f923b3a:g:TBUAAOSwcQxihfxQ&amdata=enc%3AAQAHAAAA4E6BFacxI6A2chqRI9xMeNs2EPZFwnEqDGG4mPgeJI7V%2BiO6PUPTKBhTHH7YUD035b2lzoV2%2FwrTC04URzlSOq5p2aoV06F3TV0v90UcPOsQrOudO5iox8g50pGtQDHLGPcQmuuLHfN2GtHmyidMAN83Lfso4D6fRbGcOCxcdzXRLJuM2G1E3bP3Cu%2FOg7KBtjOMTo11UYSmQmckpmyArSm13cUHKxnDugJGabNSyQ0Sfmwpqi5kKFaGkGBXChDUslPWbFAgYIBCl1fwwq82oTaZAxLmjrH2Hb3Xuv34GakG%7Ctkp%3ABFBMvoeqssJh" + }, + { + num: NumberInt("31"), + value: "https://www.ebay.com/itm/284834690629?epid=27023701740&hash=item4251787645:g:~H4AAOSwFwZio8lE&amdata=enc%3AAQAHAAAA4D64fGAPrSEv14V6Lx6XqlIoO3Is%2FNIRckGsWM6SR7oguEXGM3UC8qOBMT6pEr4Z9pkqCo1hjbkRt9s1kWRhHYOd65Nfgvc1yb%2FKIHJTpNhWU9Pq%2BSJuwk%2FZAbx6EBk1aANZbB5FHO6nGPooe6prFVuZhvh1lo6JBFgYezpWNbVC17eG13fBmNgXOJj%2FWxF8pTd3yECW97Al%2FjELMmPDK%2Ff7kxv1ebjIcN2nKfwmhCP0ywZIAP3HB9AcLmRQq0mSr4dmCawMWrE7n6Xd6HF3VJtKeDDMK2mzHg3WW1PLYTth%7Ctkp%3ABFBMvoeqssJh" + }, + { + num: NumberInt("32"), + value: "https://www.ebay.com/itm/385378711279?epid=5034224996&hash=item59ba5c76ef:g:8YIAAOSwRl9jwrl6&amdata=enc%3AAQAHAAAAoOdf4fJNQcoka6bs5ocCxWNHhIYx7oOCYUQau0j7T9XFKCvxCULgf7ciLtGIdNxbt6kej%2BKqG9xiilrw36nZR2khAh5EPHwUlydo5Fj6KZqmGIzzEPccTVoCKnGv8yaUGxno%2Fk2n%2BDu9r%2F9TansxafW6T1y4zxxnU7XBrjBXyo8%2FjjUmjbU7jxGXGQxLHNXZ7fg8P1vG0xgPrRCNqh5vaWI%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("33"), + value: "https://www.ebay.com/itm/284843533396?epid=5034224996&hash=item4251ff6454:g:k7AAAOSwxbtin92z&amdata=enc%3AAQAHAAAA4JB8zc5HRAIGjSABwz51ly%2B6gRJSYMP7ePCrq7egyB3ynDSzeYKcLSdyttBSoCpwzEnKYLTXKCQApCOMc%2FAgMQ5qNpQS63xpj1vpzUSA0ZAo%2BnOea0N4R59Cx1sXVnlndTjE%2Bm0DxhE%2FOWuUp4SlPy23pczbc%2F3Q6OROr02Q15vP1ue7AD7BLN%2FN%2BSH%2F1ho9eLriuT9%2F0CwQNtMdLaQSTf9F%2B2yK%2FDB2fQpp0ybIHaHkgjQe5HoHvJvVrwmhIfdhBifEFJThn1JwtZrqtgvbJ1XQ0HT50libXklr6%2FmOHsh9%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("34"), + value: "https://www.ebay.com/itm/354352448855?epid=16034579360&hash=item52810d4557:g:jCsAAOSwNAFjSYuD&amdata=enc%3AAQAHAAAAoBe6PPX4cziAMH0zqph5CVKzeNK5rRqYKfKAk4GHDulh6Z4prRNzhjzV0cUxdC8dGp5lcPZ3wE8wZyc4xJveWoV9zNH8mHAuJtYXqFVKnWYthyltxBZabn8Lu4Sw2ZGZRYGr0IEpveY8F6Y6hzjP6hbFEwdEebm8MK4GxWHcMMwX%2FaxLXCWSD97YuGfHksfIG%2BfRrny6RufWm8ljq8yVj30%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("35"), + value: "https://www.ebay.com/itm/115055691694?epid=6023706166&hash=item1ac9da87ae:g:Q4UAAOSwWmBhcE9E&amdata=enc%3AAQAHAAAA4EUJLPKV703Ekx2%2BCWqMXvBRR%2BZjdsXLMQbxQ5blWGGbGi4M%2B3UbfyONygmPuFLkxjI027y0Hd%2FolBzoWN8SknMWX3Q9N4ToLpqQPIeUbHpiLfJKgEs0RwFZDIifdlj6KDk7VPz6U4Il4zD2d0Icrt6px993s7S5OHzxdJYtHhOYq%2BgXe0ZfHuQS6T%2Fk5l2Srhrt%2FFY8us%2FugysDgYnTxDj1zqGZFlDTsKgbklE6rtVIx58poayLW7onOQrKtFRoaFV6sIb4fxYefABdBecdZZghT23FoKp7%2FaHHZWBkcyT4%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("36"), + value: "https://www.ebay.com/itm/204154889363?hash=item2f88946493:g:9DsAAOSw3R1jdMnI&amdata=enc%3AAQAHAAAA4P9DtAwd40J0WTSiekmkteRZoiZEd%2FkMehqqbdN8dSNEJZ%2BrZOaWWIShgeRfA7o7N639YViFxJkkg%2FmRhWAFir%2B24zPr3g9lb7Gl%2BRgIg5qT9nKCmQ5VtgnUVoMhiMlDfQ29YLJv9JZwo7b2iXWPo8uki3Un8qKk0PraRTp4RHXConRbIqopSwPdHznOLmop5iydoztVLSQhtW4GYHKCmSzcltPmvw6XQuPAIpBN2ebiPZrT85PpJ%2B%2FxYK8vJaHTE%2FU8mZyTUR6KAAlWpvKDIFVpZgh%2B2EQQ%2F6Wm2ogWDS3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("37"), + value: "https://www.ebay.com/itm/114982462737?hash=item1ac57d2511:g:uCoAAOSwmlRhO76O&amdata=enc%3AAQAHAAAA4DOHXyPMyoQsjN2ZT0NzeY623TkFdSLW0CMa4shD6K5TsBZvYnUSenuzZg%2BiinB3pVfLeqd42hewDNPiTSzYNegfaV40DU6zYxWLk6rB%2Bg6XZ3VLtP07jmmkBkI3C7mkfpBH7RMvgS%2B46uo%2FmvoMRhhk54nG68HYepoIx%2By1vRVDPxu6DqwooGcp%2BolBnp%2Bd1i4dc7RyyXXEuJ1%2Fp82gcOhI3N120812fZ8VATHfJqg3IdQ1a3IfM7nqdxnA0dPkPLf1TVIwtJeyE0c7uZHATsY08u84E43UR9eFO%2BeI3oyU%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("38"), + value: "https://www.ebay.com/itm/295366826662?epid=23041723818&hash=item44c53c1aa6:g:dl4AAOSwDC5jgSu-&amdata=enc%3AAQAHAAAA4PjXAsnjh5aI0vrEnGo7Z9OnBBoN%2B%2BVr9%2F5EFHOnPE6apceeU3bd6Ib2dVpm7vOuvi0mh3kWZz0JBpztsYclaqGUlCZa%2BqX8U83pme23zM0ADkiJxBMsToGYzEqjh6cvwKa%2BidzyeLqg389koSvYZg%2FXStbjMDreOFQr9n1cxhY67jNQvMIH469%2B72E%2FeBNb75x2uDj46xjF4A%2BenR2DDd7UEdBabTEDUWcCCNzYWwQkocmXQCXIthRuGr%2FNSVG77SrbVXr4kt1LUeaSYShs6vbYTBn55NUtIwUj69CuV%2B4W%7Ctkp%3ABFBMwIeqssJh" + }, + { + num: NumberInt("39"), + value: "https://www.ebay.com/itm/275037837307?epid=235205919&hash=item40098857fb:g:BmQAAOSwhdhicagi&amdata=enc%3AAQAHAAAA0NGR4CAfGY1g9aBugj0vl3zqXcLw6jndqmUruRknV%2F4ZLSZITGRlruzUB2rjL1FC%2FM628dnRo%2BeTxqKptbADDWcAyPWqvpRLJcfn8gM7f9Qy7akVCDa82kOrBViw%2F6URqeJcKRJ6eqAWt6XAbcxuRvt4VO9A0hpt66CzdCD12gtbjIq9sz7NVLRRZqPIKB9p3fMIlwnx%2BanNPx1Yx%2Fe9BIx%2FQys3yEDXl1RIg54rry%2F9apVWOEfEJm%2B8Km02ecwPbs%2F1qEEOjV21EGTSitMoAiU%3D%7Ctkp%3ABFBMwIeqssJh" + }, + { + num: NumberInt("40"), + value: "https://www.ebay.com/itm/165917646229?epid=15055100591&hash=item26a1765d95:g:GbUAAOSwon9jx2r2&amdata=enc%3AAQAHAAAAkJA8t8382O2wUFVyY44TF8%2F6RQu2rmQaB6CD%2FdknZw8966upTYJ5EqzW%2F4odXtRkA5gyOosdD%2FRINHtTQhZGBNUWG%2F%2BYIB0LUjg%2BTj9320EOmTpZPjC0TMKoYU5gzWGiA16QV%2BVlEu%2FoPWv4%2BT9Q2aJwl8OC%2F7N4%2F6kzbZ6VV24ewKag3fHyTHyZRGjWJowaIw%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("41"), + value: "https://www.ebay.com/itm/134289962940?epid=8023709558&hash=item1f444e37bc:g:kG8AAOSwemNjUOyA&amdata=enc%3AAQAHAAAA0NYhSjHQ%2B3r9Ohbbg0P5SeKql99jLpvtv1C0W2nKcjuB8OQnbe9dAhrhAviF9vEdMLFMjNhuInRrxnyqLToLPaMJVzKjfmGtSX81%2FjQEqKEI4YH1R7Tvbvhf%2FZEOkGpEtTRc82Xw9M5dSguaAcp2mYoarAQi7cpZfVu6jQLQDsyeiotBZfUwQUxxDL7FLr2Fs4H2rqAYwwwypTP69wVR2B24MrCJ6FGEBm2EfJK9JbZZz1MSV%2BpMJc8%2B5Z88bEYUfkGSYR4IGdbn5RupdD8qGns%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("42"), + value: "https://www.ebay.com/itm/115382465076?epid=15057003479&hash=item1add54b234:g:gIIAAOSwiJFifmmz&amdata=enc%3AAQAHAAAA4Pel7yRDK%2BnatS0iAXxk1WaGbuoYNoae0iyeFBxKZacYyQ%2Ftth%2FHvVPTU5BQ%2ByichClcVZZmyyVqKV6oRgXHKyXvu6ABRqPWRtFIfGDVEuFEMn6mRaAkHvKl99sNkZJ89bUq8M6GJrtoqk%2FypQBOBjQktHJeL87GbR6D4y4BkcKrwG475EcMmSxZ%2ByPiMFwCH%2FzmgHROa6NkgmL2HV%2BlOMCplMvfhP4AiS37ZEvpZ05N7%2BWb5ZI4By5lHGbt6N3AcobIZXk9IywIO2BY9fFVvZ6QACHF9kJ%2FQ9E1MIuZtap0%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("43"), + value: "https://www.ebay.com/itm/234870611190?epid=14034578851&hash=item36af611cf6:g:iR0AAOSwG31jvVQi&amdata=enc%3AAQAHAAAAkBSwZdfU7K35zNXT%2BnTVSkeTsWogSkmQeeb572EPUfRj3GQl%2BvzJBvHAMb6FpwoD2EMY7B9ddDzfoOVpPZmnb2bT6PZ%2BBTwFm5Er8AcYNmGsMgl1mGKxz1m5r8we%2FyV7s8Kw3zdHoVDtJT71H2arNwPULxbdqpF53hH8Ojx2tgE%2BqiCdn%2ByqVKvR61GzWbIsfg%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("44"), + value: "https://www.ebay.com/itm/134304224259?epid=26034221266&hash=item1f4527d403:g:59EAAOSweStjW8ZZ&amdata=enc%3AAQAHAAAA0BsJ1VkljwMFWwnM0jIkO%2Bd2rTgjF8Ps8zEjdH4gY14CcFRUF8MkF6DhHVfLaRQh0421VykhsrTC22jlcG%2FI2lP6B1j2c5ujIbmpdJOzBgcFbNrv%2FXqTELr7owA8r5zZ3EzyLgjx7LanzkNrk0XfxKobi6efxa83umH6%2FYX2Ze7NpYTVXbs37pAf54Ot5cXXYgu24rGHNjnRIn%2FtPDWUcqpvPL0WwcVfMnEGCpvPN4mKctUnqP7y%2FrUYKnSlDUG5PiW52qvXIRag8Cb3s0wI5Ik%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("45"), + value: "https://www.ebay.com/itm/194316866035?epid=8023709558&hash=item2d3e3011f3:g:DfAAAOSw1ephFOPR&amdata=enc%3AAQAHAAAA4NSJ9hyAPoE3EL%2F86975ibMzsHsGDDkDLzcC2IgZVrQRjEsUJscwCausqJFSYI6Ab%2Fn%2BD15qv5deHvCdQAEOmP2rarGk1tprdTveSw3vG8j%2FpmvpxtqSOz3aoWVVd8XV2veBRqAPEoxoRG3iiGK63jd%2BkH8pUgXXhd2sAYZhst5dgpRq7U4cm1aWfrZvsEBO1YyCrgnACH1nVJfjd5AExEIKP5MEQTkemstac5Q5%2BmryufAeepZW%2FPcBCHwt%2FpyICoUtP36X2cq7u7aE9wT35EXhwrcZhEBSFkrOTmEzLHNw%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("46"), + value: "https://www.ebay.com/itm/295495133461?epid=18045314698&hash=item44cce1e915:g:9bYAAOSwvLFjpGwJ&amdata=enc%3AAQAHAAAAkCODiRPuf6NrA%2Ff4O2ZViOXWjcBJqR1XjeCNbevxP5u9VI95JGIq5CUv%2BXWQIT733cKrc994Qf6a9%2FDWyfC0iOWtnODSOsonWQJz7ALDPWQwuux%2BLT63MMyw7pl0660OkuZ%2BrPCvbJEC9esxXjaLkTjqjymImvJgkiKpMLu%2FWoVwdv0mM%2FvfFUpRInGJ%2F%2BOj5A%3D%3D%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("47"), + value: "https://www.ebay.com/itm/134278052376?epid=2310781314&hash=item1f43987a18:g:SJcAAOSwRiRjR58C&amdata=enc%3AAQAHAAAA4MuzP1v8LO2bJU8o1OIyRKN0A8jHabFvrZ38t%2By45PTiGMWx%2FVzh%2B%2FZnNQCB9mCbhdk%2FvIW3yJvMqRW4AcCB9cHkuWe6Hu50%2BdeDZCIJItEtXzmRADELMetUO8%2FzUQDqzi3QYIBArqnghN8ASWpndv484vN1v9TLHAtprYCzFHYAv3RYLQpAHcSRuOwlZDhfSkhnxDyWQVx5VqWT%2F3LlEBmIQEFC1HEN59FKeToi5FJ13JUpKGiUmfuJnJZbex86XTHq9Yud1wzdmX14HIKOR%2BdHxpoEEQWGVWe%2FMEgMpyQh%7Ctkp%3ABk9SR8CHqrLCYQ" + }, + { + num: NumberInt("48"), + value: "https://www.ebay.com/itm/385385510766?epid=18041715094&hash=item59bac4376e:g:5osAAOSw0IJjzn8u&amdata=enc%3AAQAHAAAAkFRsqN5XTshfan%2FaQlBgyRmupACU6c%2F46htNVlozDZlSFvHuy1YoCt6S%2BHOXhD%2BwFnF3IHKh8NJNGeWTELxZkZhpD1wuCwap30JZi0Jx1KIEBXILCaJx9kHq62lMp18F9ctOY96N1Z0xksZPTh00HFh8KrPHpSOCE3rh64Iq5gVDjqeqfrxsVWXObzXhGSkmxg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("49"), + value: "https://www.ebay.com/itm/354375729960?epid=16041709998&hash=item5282708328:g:eaMAAOSw-BVjZaxt&amdata=enc%3AAQAHAAAAoIYZCVaVMJlE1xi2Dazjl%2FWEj4m0nd4gXhIxisineG5Y4fWnCwNLwbkOvlKFPIwGmoC8pk66RzEt5bG4e0rqBHOc%2BqLM9TtgN69RfJ0FbembPUBqkeJqWLAqLAtgo14vnb7oVcfbnyP6ZDuG5APDw0AnOGRr%2FFIGxwB4UJTY56dyJzEBt7euOFjbTozcBn3kUFU5MqBtnQ5P9kVragVSv7E%3D%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("50"), + value: "https://www.ebay.com/itm/304786301225?hash=item46f6ade129:g:qnsAAOSwc3Jj1yVo&amdata=enc%3AAQAHAAAAkJaQM9LbO8pQQpm5Eg9m8R0uPlugNpcXSXqllVSKN0EPpnJzrE25gwCd8hhNR%2BcSMP978sfs16e%2Bua%2FKy160SEvxijbjWmzbFYXNdUNneRFHL%2Bz9jpRy2gvHuiN%2FiXW%2BRYwwRogGDV8NzWBXuBqjN%2FGkpH8WyJL7z6eEROZmMDxVah3aeJxBd0HX0S43WgvbNw%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("51"), + value: "https://www.ebay.com/itm/174911437767?epid=238944741&hash=item28b988bbc7:g:LAwAAOSw3tFhEnDR&amdata=enc%3AAQAHAAAA4OUrIuiGa2TtmvD2S1fdS%2B%2BCMSN6PEv70vribX3V%2FhIHx25mQNXNae4tS0Ud6jpKa4ZFjZzjlt7bygqxmRtgD79yiaTg9xT3vMvIVD%2BcGxBa%2BzjYl2PINFu6owvlsD0riwdahZJy2bdkGZXvxNOEi3uhs%2BjMLoLQxMpplMwk72lnY3wGNt2DX6hqr%2B00jKQWIzcA6uv%2FKZYCxVkwdJkqEs9JIjZlRKmxZoe%2F%2BQbCfqLqPHAIfv2P2y3QTsUhuqNDjYXMlt3iJtxzPgrXlz0ZwrvB7979C4lzZAtAPNif44Uc%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("52"), + value: "https://www.ebay.com/itm/134327782473?epid=224886862&hash=item1f468f4c49:g:fwMAAOSwrphjcmQF&amdata=enc%3AAQAHAAAA0MoVc8HnavBYYAcZpkyN7pzyeOjKXb1XBsPWG70gxXvRSLgJ9o1SNHJUYo2OHEfm%2FNzrKZrUORxxFMJ%2BstvFP3l6iik5KSVtD70PMjxOBUPKnFozs%2F5LxxqZxt9NPoVH8EaHJh0Mf4OYa467PZVV59QxrHIrRmG9N3IQFwj9FXZKTbSoQIVq9WnGCq6LvPFok0jLKo5JNo5RotMvquAk5il5e0r04gvIF9guKgM7lrQZnGNjbibqyCZN2NKvVaMR57INPi%2ByEG86n6dlSDXYQzs%3D%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("53"), + value: "https://www.ebay.com/itm/384354718272?epid=19034211465&hash=item597d539240:g:dJEAAOSwJfthDS3V&amdata=enc%3AAQAHAAAA4Ca7XeeVvYUALBuDtcNoNuhvGfaXQ7MvLfUZoXd5PeLwW5sPmCtc7NXmC9n%2FSJkwxtzY7BhiZVX37ie2PL6B2ksBm7K5XdYbc4yv%2BjWBo4OA2tuXRhx%2BwT%2BgYFa1zprhQnu2pN8BpbHTkusr7ZakxTQ0lWsCpcKJuNBSmaAN9H0lw2T%2FgBGQPbYVNc4weXw4ZJuoScNO7WsO7IxJxYzZFqReE38HWEkiWiXzrSeqFquhQUAqh2gedIWCFMELPz48TmP6E1vpckvVKSlWRiDvSPcx34QXXW1TruQRoI3l7%2B9c%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("54"), + value: "https://www.ebay.com/itm/165514454435?epid=19048294271&hash=item26896e25a3:g:DSQAAOSwJxVimRrw&amdata=enc%3AAQAHAAAA0AEcfe918pjX0VJfW6zR3ekp05VFnLII061XlBdjPyEm4imOkoy5Yd0nh4az%2BGOk9N71Bt4KgFcZAT8SfJz25DnGn0qxzSD8RXr%2BPzq1ny1LUzUaPn1v5YpdMOWorGo7munUtAh%2FaVDOJV0d%2BwLu9AIoOmF7kXH1TwZrZm3q4ZTSBTTo8dDGri3IsMNV4FFrvuAg%2FLCfDLu929MV6d9OkVFtshsNOAHO4zXUijjYQKaWRUtBnGp2HXXsoOOdc6yo6CpSp4FMkmWTA%2BVpiqBnoic%3D%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("55"), + value: "https://www.ebay.com/itm/384354878808?epid=21023708552&hash=item597d560558:g:H2YAAOSw8KthE6N8&amdata=enc%3AAQAHAAAA4DXQxeojdyx5xV0e9%2FqBE5zZ%2F1WT03i1eIKbZn8SSNqTKpyw80PFEMZ03eGhZrJZ8JStS9FFW1mPT7UTRkSRPOED6cae6T4cY3XEqIoBIY1en6kAreY%2Fj7j%2BOV01rYmK0Tp3zztJBPITNq3xi3o6lJNMAi5%2BQwGTZLVXYXIiTGIuRExIneKhvzOfT3btIr1vY0D%2F9YANjYsRwP33VVRR6XnGlWG5aPh9rAoH5UZCYSPJTPFdHyApMuIbsqGNxJ4Nyi%2BXwOf6FUWP7750zC%2BtYWmTJf498O02QmwDY7k%2FksOE%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("56"), + value: "https://www.ebay.com/itm/275558102208?epid=28024399462&hash=item40288af4c0:g:zZ4AAOSwBHhhQKm9&amdata=enc%3AAQAHAAAA4DX9Vhc87B23tD5jfMVFJZHAOvzu0gh%2BnU4M1DxyKOIiAwh1b1cfjI0HVs9yoIFK06Ka9nIaMeB635PtpGbprnIkaxOV9av20tgXnOwPOuMa3AtNImBgJUtABBhHW7k5zLtmD7GTc%2FwcdDGKadDOSoz%2Fymaebjd0V7QmUKz%2F3xqzJytX19G7P1QU3p7QoI77YwZuGE1K866QvszYtvlmsZLvmu%2BXbQMuDOoRqBP3Kb9OsWYVu8zfMEM0oFFGgMOw3RpM00htTxM7tc5tU5kWLnDRNoQpuFjblsYvoARi9xST%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("57"), + value: "https://www.ebay.com/itm/234870614872?epid=6041725317&hash=item36af612b58:g:Nb8AAOSwx4BjvVmz&amdata=enc%3AAQAHAAAAkEDeT8TmUlQ8IjQL99g9oZL8YHYFlR0TRqo2bLHhbsKtfw0AldDbv9VWIxc%2BvMg%2FV%2BbCex%2FVSmsJoNdMTOMyvGOIxG2sf4%2BRXvfldKHih939mnFK59lUpZGdc4WSukzF%2F5a%2FY0GE%2BHdBTDrPIFVKrG7RNbWqtjArUbPbe5nUxnQ6GIadY7kkmdgYp5%2F3MEsj%2Fg%3D%3D%7Ctkp%3ABk9SR8KHqrLCYQ" + }, + { + num: NumberInt("58"), + value: "https://www.ebay.com/itm/275513445335?epid=242053148&hash=item4025e18bd7:g:lPkAAOSwa3NjVuDe&amdata=enc%3AAQAHAAAA4IR6AGPBlVGpOH7xh1nhu9MEJqdYk6VXoL8oRYBTP7ld8KoXBTQaIu6%2F6r7rlGWt4wcUHDG7WE8fQz4ZA0j07VGCVxpy%2FP9Eqff0%2B38UZ9%2F%2FlFrknO2rkHaX1DV13ztTCSNW2RRXVGIwan7%2B%2F167DOUDCVV32u7RRuq5hT23b%2BRA%2F30k3v4PbGABKCS5jTkveHIx9AeVbS23nMP8Cy3y7p9zpHisq5w3hVbWPzCoxOgc1vtgmZoRsZ23uaTwOMJPgWOxzxj1pB5JNh0iY97WEWg70Rut698YKTlG6kP%2FTD7V%7Ctkp%3ABFBMwoeqssJh" + }, + { + num: NumberInt("59"), + value: "https://www.ebay.com/itm/325520901816?epid=27041707918&hash=item4bca8ec6b8:g:uqYAAOSwXWZj29Bo&amdata=enc%3AAQAHAAAA4G6SJ3xy1glI4gOD5fDQkPnjzMfEYvVIfAzHMFZ1X1i%2BbSRbZ6s11S6805uASEQCGH2lhtdK0aJIM2s2eyzxSQz8tCDSWmmLxuvNb9SmNHw4eFM%2BKfk09W%2FNZ%2B5UnEv%2FOdf68sImPbp0vWR2a1Q8p4iYQR09VRVZrwI4FzxuggoPmQuIh8K5%2BqyopGx2EsWuDaMSbaGF%2FGVKFrrPoZGcZY8XzRX7jK9ghb30K36vP%2BTIuDdt1GHqIqVvexsNG7FAzBdNymFarmBrMvBdvGaahw9t0gAn6XFcuFAE3YYbA5Nk%7Ctkp%3ABFBMwoeqssJh" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("28"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPhone", + value: "iPhone" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop Click Next Page_2", + nodeId: NumberInt("4"), + nodeName: "Loop Click Next Page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "eBay Names and Link Addresses - demo", + outputParameters: [ + { + id: NumberInt("0"), + name: "Name", + desc: "", + type: "string", + exampleValue: "Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' Opens in a new window or tab" + }, + { + id: NumberInt("1"), + name: "Link Address", + desc: "", + type: "string", + exampleValue: "https://www.ebay.com/itm/115398776875?epid=18045314698&hash=item1ade4d982b:g:BI4AAOSwo5Rij4S0&amdata=enc%3AAQAHAAAA4ELrFOtK9Q4ol28SIBCj8AlEyuoOswMlad9UdATAXLLXzCrNiXBXqGjK834mUeluTYl2fG4nLibLzPUvOxpTWXkmIyoL%2B14iExY93etuVl%2FBk3C5nIg00wVu4dhYbRF07x6Bsjvf78UyZkC23ZQNHj%2BdfhMp16XqtHjP4m%2Fu2AYs%2F6lcEVMwWKCOW8mLSUEznmhE3xbgOTKZY7vTkB%2BNqszgjnI%2Bj9FduDUmPyH%2ByboyhCEDQHEOnS6boubjzpbJ4gvRsNrBGqR3qcdh%2F1qqEGxETnzj8k%2FFaggVj5uyGRqf%7Ctkp%3ABFBMuoeqssJh" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dbf989c85da553b7a9d4c2"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("7") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPhone" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("4"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5"), + NumberInt("6") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("5"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Page Link", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("8"), + index: NumberInt("6"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[1]/div[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: " Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/span[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "US $224.00" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[4]/ul[1]/li[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "1,605 sold" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[4]/ul[1]/li[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3,874 watchers" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[4]/ul[1]/li[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "Returns accepted" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "US $17.25 (approx HKD 135.25) eBay International ShippingShop worldwide with confidence including detailed tracking and hassle-free returns. Learn more | See detailsfor shipping" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[1]/div[1]/div[1]/div[2]/div[2]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "Phones are in Excellent cosmetic condition. Devices are ready to activate. Clean ESN. PhoneCheck " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[3]/div[1]/div[1]/div[2]/div[3]/div[2]/form[1]/div[1]/div[1]/div[1]/div[2]/div[2]/a[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "Read moreabout condition" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("7"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Click Next Page", + sequence: [ + NumberInt("4"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("8"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Next", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + } + ], + id: NumberInt("29"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPhone", + value: "iPhone" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop Click Next Page_2", + nodeId: NumberInt("7"), + nodeName: "Loop Click Next Page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "eBay Detail Page Info Collection", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: " Apple iPhone 11 - 128GB 64GB - GSM+CDMA Factory Unlocked \"Excellent' " + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "US $224.00" + }, + { + id: NumberInt("2"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "1,605 sold" + }, + { + id: NumberInt("3"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "3,874 watchers" + }, + { + id: NumberInt("4"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "Returns accepted" + }, + { + id: NumberInt("5"), + name: "para6_text", + desc: "", + type: "string", + exampleValue: "US $17.25 (approx HKD 135.25) eBay International ShippingShop worldwide with confidence including detailed tracking and hassle-free returns. Learn more | See detailsfor shipping" + }, + { + id: NumberInt("6"), + name: "para7_text", + desc: "", + type: "string", + exampleValue: "Phones are in Excellent cosmetic condition. Devices are ready to activate. Clean ESN. PhoneCheck " + }, + { + id: NumberInt("7"), + name: "para8_text", + desc: "", + type: "string", + exampleValue: "Read moreabout condition" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dcedcb869cb52a8a8f6ea1"), + containJudge: false, + desc: "https://en.wikipedia.org/wiki/World_Wide_Web", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://en.wikipedia.org/wiki/World_Wide_Web", + links: "https://en.wikipedia.org/wiki/World_Wide_Web", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[3]/main[1]/div[2]/div[3]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages—and to move from one web page to another through hyperlinks—came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org – The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better source needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious – discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万维网), which satisfies www and literally means \"myriad-dimensional net\",[45][better source needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories – a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5 billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information—such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations—groups of interested and often competing parties chartered with the task of standardization—not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3986 allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any character in the Universal Character Set—and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52–58. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN 978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p. 2. ISBN 9780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN 978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN 978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript – The definitive guide (6 ed.). p. 1. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification – W3C Recommendation – Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME – and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary – Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press – Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 978-0596001728. OCLC 49502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX 10.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265–269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11–14 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, Ł., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241–52.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? – an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 – New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1–2. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp. 68–69, 127. ISBN 978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp. 4–5. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p. 7. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards – Mastering HTML5, CSS3, and XML. Apress. ISBN 978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBrügger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol – HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erdős Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" · \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Puskás\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("30"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://en.wikipedia.org/wiki/World_Wide_Web", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://en.wikipedia.org/wiki/World_Wide_Web" + } + ], + links: "https://en.wikipedia.org/wiki/World_Wide_Web", + name: "WIKI", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages—and to move from one web page to another through hyperlinks—came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org – The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better source needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious – discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万维网), which satisfies www and literally means \"myriad-dimensional net\",[45][better source needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories – a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5 billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information—such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations—groups of interested and often competing parties chartered with the task of standardization—not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3986 allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any character in the Universal Character Set—and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52–58. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN 978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p. 2. ISBN 9780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN 978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN 978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript – The definitive guide (6 ed.). p. 1. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification – W3C Recommendation – Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME – and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary – Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press – Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 978-0596001728. OCLC 49502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX 10.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265–269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11–14 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, Ł., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241–52.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? – an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 – New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1–2. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp. 68–69, 127. ISBN 978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp. 4–5. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p. 7. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards – Mastering HTML5, CSS3, and XML. Apress. ISBN 978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBrügger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol – HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erdős Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" · \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Puskás\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n" + } + ], + url: "https://en.wikipedia.org/wiki/World_Wide_Web" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dd0be4869cb52a8a8f6ea3"), + containJudge: false, + desc: "https://en.wikipedia.org/wiki/World_Wide_Web", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://en.wikipedia.org/wiki/World_Wide_Web", + links: "https://en.wikipedia.org/wiki/World_Wide_Web", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[3]/main[1]/div[2]/div[3]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages—and to move from one web page to another through hyperlinks—came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org – The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better source needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious – discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万维网), which satisfies www and literally means \"myriad-dimensional net\",[45][better source needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories – a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5 billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information—such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations—groups of interested and often competing parties chartered with the task of standardization—not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3986 allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any character in the Universal Character Set—and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52–58. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN 978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p. 2. ISBN 9780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN 978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN 978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript – The definitive guide (6 ed.). p. 1. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification – W3C Recommendation – Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME – and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary – Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press – Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 978-0596001728. OCLC 49502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX 10.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265–269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11–14 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, Ł., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241–52.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? – an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 – New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1–2. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp. 68–69, 127. ISBN 978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp. 4–5. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p. 7. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards – Mastering HTML5, CSS3, and XML. Apress. ISBN 978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBrügger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol – HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erdős Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" · \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Puskás\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("31"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://en.wikipedia.org/wiki/World_Wide_Web", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://en.wikipedia.org/wiki/World_Wide_Web" + } + ], + links: "https://en.wikipedia.org/wiki/World_Wide_Web", + name: "WIKI WWW", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "System of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages—and to move from one web page to another through hyperlinks—came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org – The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better source needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious – discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万维网), which satisfies www and literally means \"myriad-dimensional net\",[45][better source needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories – a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5 billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information—such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations—groups of interested and often competing parties chartered with the task of standardization—not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3986 allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any character in the Universal Character Set—and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52–58. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN 978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p. 2. ISBN 9780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN 978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN 978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript – The definitive guide (6 ed.). p. 1. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification – W3C Recommendation – Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME – and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary – Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press – Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 978-0596001728. OCLC 49502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX 10.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265–269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11–14 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, Ł., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241–52.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? – an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 – New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1–2. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp. 68–69, 127. ISBN 978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp. 4–5. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p. 7. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards – Mastering HTML5, CSS3, and XML. Apress. ISBN 978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBrügger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol – HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erdős Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" · \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Puskás\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\nshowAuthority control National libraries\nSpain\nFrance (data)\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNational Archives (US)\n\n\n\n\n\n" + } + ], + url: "https://en.wikipedia.org/wiki/World_Wide_Web" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dfc300dcb6508b71d51af8"), + containJudge: false, + desc: "https://www.amazon.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("10"), + url: "https://www.amazon.com", + links: "https://www.amazon.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"twotabsearchtextbox\"]", + wait: NumberInt("0"), + value: "computer" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-search-submit-button\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"s-pagination-next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("5"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"s-pagination-next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div[1]/div[1]/div[1]/span[1]/div[1]/div/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/h2[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para1_linktext", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "2022 HP Stream 14 英寸高清显示屏,英特尔赛扬 N4020 双核处理器,4GB DDR4 内存,128GB 存储(64GB eMMC+64GB 卡),HDMI,WiFi,网络摄像头,蓝牙,1 年微 柔软 365 Win10 S | TGCD 套装 " + }, + { + num: NumberInt("1"), + value: "2022 惠普 14 英寸高清笔记本电脑、Windows 11、英特尔赛扬双核处理器高达 2.80GHz、4GB 内存、64GB 固态硬盘、铬操作系统、钴蓝色(续订) " + }, + { + num: NumberInt("2"), + value: "惠普 Elite 6300 台式电脑、英特尔酷睿 i7 处理器、16GB 内存、128GB M.2 SSD + 1TB 硬盘、WiFi 和蓝牙、无线键盘和鼠标、22 英寸 FHD LED 显示器、Windows 10 ( 续订) " + }, + { + num: NumberInt("3"), + value: "Lenovo 联想 IdeaCentre AIO 3 AMD 一体机,24 英寸全高清显示屏,锐龙 5 5500U,16GB 内存,512GB 固态硬盘,DVD RW 驱动器,Windows 11 " + }, + { + num: NumberInt("4"), + value: "戴尔 Optiplex 5040-SFF,酷睿 i5-6500 3.2GHz,8GB 内存,256GB 固态硬盘,DVD,Windows 10 Pro 64 位(续订)'] " + }, + { + num: NumberInt("5"), + value: "联想 ThinkCentre M73 SFF 小型商用台式机、英特尔双核 i3-4130 3.4GHz、8GB 内存、500GB 硬盘、USB 3.0、WiFi、DVD、Windows 10 专业版(续订 ) ) " + }, + { + num: NumberInt("6"), + value: "Dell Optiplex 7010 台式电脑 - 英特尔酷睿 i5 3.6GHz、16GB DDR3、500GB SSD、Windows 10 Pro 64 位、WiFi、USB 3.0、DVDRW、2X 显示端口(支持使用) " + }, + { + num: NumberInt("7"), + value: "联想 11.6 英寸 300e Chromebook 触摸屏 LCD 2 合 1-联发科技 M8173C 四核 2.1GHz 4GB LPDDR3 32GB 闪存 Chrome OS 型号 81H000US(续订) " + }, + { + num: NumberInt("8"), + value: "戴尔 Chromebook 11 3180 11.6 英寸 4GB | 16GB SSD 传统笔记本电脑(黑色)(续订) " + }, + { + num: NumberInt("9"), + value: "DELL OPTIPLEX 390 DT 台式电脑,英特尔酷睿 I3-2100 3.1 GHz,8GB DDR3,1 TB,DVD,WIFI,HDMI,VGA,蓝牙 4.0,Windows 10 专业版 64 位(嵌入式) " + }, + { + num: NumberInt("10"), + value: "迷你电脑 Windows 10 Pro 8GB DDR3 128GB SSD 英特尔赛扬 J3455 处理器(高达 2.3GHz)迷你电脑双显示屏,4K 高清千兆以太网 2.4G+5G 双频 WiFi BT 4.2 " + }, + { + num: NumberInt("11"), + value: "Gateway 15.6 英寸 FHD 超薄笔记本电脑,四核奔腾银色 N5030 高达 3.1GHz,4GB 内存,128GB emMC,WiFi,蓝牙,木炭(续订) " + }, + { + num: NumberInt("12"), + value: "Lenovo 联想 15.6 英寸 IdeaPad 1 笔记本电脑,AMD 双核处理器,15.6 英寸高清防眩光显示屏,Wi-Fi 6 和蓝牙 5.0,HDMI,Windows 11 家庭模式(20GB RAM | 1TB SSD) " + }, + { + num: NumberInt("13"), + value: "ACEMAGICIAN Mini Micro PC Windows 11Pro, Intel 11th Gen 4 Cores N5095 (up to 2.9GHz), Small Portable Compact Desktop Computer 8GB RAM 256GB SSD Support 4K UHD,Dual Gigabit Ethernet,3 HDMI,Dual WiFi,BT " + }, + { + num: NumberInt("14"), + value: "戴尔 Optiplex 7050 SFF 台式电脑英特尔 i7-7700 4 核 3.60GHz 32GB DDR4 1TB 固态硬盘 WiFi BT HDMI 决斗显示器支持 Windows 10 Pro 卓越状态(续订) " + }, + { + num: NumberInt("15"), + value: "惠普 ProDesk 台式机 RGB 灯电脑英特尔酷睿 i5 6500 3.2 GHz 8GB RAM 256GB SSD Win 10 Pro 游戏电脑键盘和鼠标(续订) " + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para2_linkAddress", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.amazon.com/-/zh/dp/B09QH6131Z/ref=sr_1_17?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-17" + }, + { + num: NumberInt("1"), + value: "https://www.amazon.com/-/zh/dp/B0B3M3P6DB/ref=sr_1_18?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-18" + }, + { + num: NumberInt("2"), + value: "https://www.amazon.com/-/zh/dp/B0977SQX9V/ref=sr_1_19?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-19" + }, + { + num: NumberInt("3"), + value: "https://www.amazon.com/-/zh/dp/B09F75N1SH/ref=sr_1_20?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-20" + }, + { + num: NumberInt("4"), + value: "https://www.amazon.com/-/zh/dp/B07N1TNKCY/ref=sr_1_21?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-21" + }, + { + num: NumberInt("5"), + value: "https://www.amazon.com/-/zh/dp/B07798GCN7/ref=sr_1_17?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-17" + }, + { + num: NumberInt("6"), + value: "https://www.amazon.com/-/zh/dp/B07NSG62QX/ref=sr_1_18?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-18" + }, + { + num: NumberInt("7"), + value: "https://www.amazon.com/-/zh/dp/B07RJZMC49/ref=sr_1_19?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-19" + }, + { + num: NumberInt("8"), + value: "https://www.amazon.com/-/zh/dp/B0BLP9B54N/ref=sr_1_20?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-20" + }, + { + num: NumberInt("9"), + value: "https://www.amazon.com/-/zh/dp/B07DY47BQQ/ref=sr_1_21?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-21" + }, + { + num: NumberInt("10"), + value: "https://www.amazon.com/-/zh/dp/B0BR9XDZ52/ref=sr_1_22?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-22" + }, + { + num: NumberInt("11"), + value: "https://www.amazon.com/-/zh/dp/B0BQFJ5587/ref=sr_1_23?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-23" + }, + { + num: NumberInt("12"), + value: "https://www.amazon.com/-/zh/dp/B0BMWBF3B1/ref=sr_1_24?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-24" + }, + { + num: NumberInt("13"), + value: "https://www.amazon.com/-/zh/dp/B0BFGLSRMD/ref=sr_1_25?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-25" + }, + { + num: NumberInt("14"), + value: "https://www.amazon.com/-/zh/dp/B08X1KKVCZ/ref=sr_1_26?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-26" + }, + { + num: NumberInt("15"), + value: "https://www.amazon.com/-/zh/dp/B0B1JNY1WG/ref=sr_1_27?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-27" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.amazon.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.amazon.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "computer", + value: "computer" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("4"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("5"), + value: NumberInt("5") + } + ], + links: "https://www.amazon.com", + name: "Amazon product names and links", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_linktext", + desc: "", + type: "string", + exampleValue: "2022 HP Stream 14 英寸高清显示屏,英特尔赛扬 N4020 双核处理器,4GB DDR4 内存,128GB 存储(64GB eMMC+64GB 卡),HDMI,WiFi,网络摄像头,蓝牙,1 年微 柔软 365 Win10 S | TGCD 套装 " + }, + { + id: NumberInt("1"), + name: "para2_linkAddress", + desc: "", + type: "string", + exampleValue: "https://www.amazon.com/-/zh/dp/B09QH6131Z/ref=sr_1_17?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=233WEIGBCHV44&keywords=computer&qid=1675502405&sprefix=computer%2Caps%2C1244&sr=8-17" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dfc34cdcb6508b71d51af9"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "computer" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Click Next Page", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("5"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Collection", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "product name", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "HP Laptop Computer ProBook 11 G1 Touchscreen Windows 11 Core i3 8GB 180GB SSDOpens in a new window or tab" + }, + { + num: NumberInt("1"), + value: "Little Big Planet Figure Sackboy Sackbot Console Kitty 3'' Toys 6'' SackboyOpens in a new window or tab" + }, + { + num: NumberInt("2"), + value: "FAST Intel Quad Core i5 Gaming PC Computer 16GB RAM 1TB HDD Win10 4GB GTX 1050TiOpens in a new window or tab" + }, + { + num: NumberInt("3"), + value: "Cheap Dell i7 4th Gen Desktop SFF 32GB RAM SSD / HDD Windows 10 PC Computer WIFIOpens in a new window or tab" + }, + { + num: NumberInt("4"), + value: "DELL 8FC8 Admin System BIOS password unlock service. One listing for ALL models!Opens in a new window or tab" + }, + { + num: NumberInt("5"), + value: "[NEW & SEALED] | Raspberry Pi 4 Computer Model B 8GB RAMOpens in a new window or tab" + }, + { + num: NumberInt("6"), + value: "HP Elitebook 840 G3 14\" TOUCHSCREEN i7-6600U 2.6GHz 8GB RAM 128GB SSD Win 10 POpens in a new window or tab" + }, + { + num: NumberInt("7"), + value: "1999 Pokemon Base Set: Choose Your Card! All Pokemon Available! Opens in a new window or tab" + }, + { + num: NumberInt("8"), + value: "✅COMPUTER✅HP ELITEDEK 705 G3 DESKTOP MINI AMD PRO A10-8770 8GB 512GB SSD WIN-10Opens in a new window or tab" + }, + { + num: NumberInt("9"), + value: "New ListingHP EliteDesk 800 G1 SFF Business Computer Core i7-4770 3.4GHz 240GB SSD 8GB RAMOpens in a new window or tab" + }, + { + num: NumberInt("10"), + value: "Lenovo ThinkCentre M910Q Mini Tiny Desktop PC Computer i5 6500T SSD Win 10 Pro Opens in a new window or tab" + }, + { + num: NumberInt("11"), + value: "Lenovo ThinkCentre M710 Mini Tiny Desktop PC Computer i5 7400T SSD Win 10 Pro Opens in a new window or tab" + }, + { + num: NumberInt("12"), + value: "J1900 Quad Core 4 Ethernet Lan x86 Firewall PFsense Desktop Computer RouterOpens in a new window or tab" + }, + { + num: NumberInt("13"), + value: "GAMING DELL BUNDLE DESKTOP PC FULL SET COMPUTER SYSTEM INTEL i3 8GB 500GB GT 710Opens in a new window or tab" + }, + { + num: NumberInt("14"), + value: "Gaming PC Computer Intel Quad Core i5 8GB DDR3 500GB HDD WiFi Window10 AntivirusOpens in a new window or tab" + }, + { + num: NumberInt("15"), + value: "HP i3 4th Gen SFF Computer PC 16GB RAM 2TB HDD/SSD Windows 10 PC WIFIOpens in a new window or tab" + }, + { + num: NumberInt("16"), + value: "Dell Optiplex 7450 AIO Intel i5 7500 16GB RAM 512GB SSD 24\" FHD Win 10 ComputerOpens in a new window or tab" + }, + { + num: NumberInt("17"), + value: "HP Z820 Computer 20-Core 2.50GHz E5-2670 v2 128GB RAM 256GB SSD No OSOpens in a new window or tab" + }, + { + num: NumberInt("18"), + value: "Dell Optiplex 7460 AIO i5 8500 16GB RAM 512GB 24\" FHD Win 11 All in One ComputerOpens in a new window or tab" + }, + { + num: NumberInt("19"), + value: "Fast Gaming PC Computer Bundle Intel Quad Core i7 16GB 1TB 2GB Nvidia GT 710 W10Opens in a new window or tab" + }, + { + num: NumberInt("20"), + value: "Compact Computer Ms-dos Windows 95 98 Intel 566MHz CPU Isa USB RS-232 Lpt #W2Opens in a new window or tab" + }, + { + num: NumberInt("21"), + value: "Fanless Mini PC Intel Atom Z8350 ProcessorMini Computer Windows 10 Pro4GB LDD...Opens in a new window or tab" + }, + { + num: NumberInt("22"), + value: "Gaming PC i7 13700F 32GB DDR4 RAM RTX 3070 1TB SSD 2TB HDD Intel Windows 10 PCOpens in a new window or tab" + }, + { + num: NumberInt("23"), + value: "(Raspberry Pi 3 SUPERIOR ALTERNATIVE) Orange Pi 3 LTS Quad-Core 1.8GHz ARM 8GBOpens in a new window or tab" + }, + { + num: NumberInt("24"), + value: "DELL HP QUAD i5 4th GEN DESKTOP SFF 16GB RAM 480GB SSD WINDOWS 10 COMPUTER PCOpens in a new window or tab" + }, + { + num: NumberInt("25"), + value: "DELL Optiplex 780 USFF Intel Core 2 Duo 250GB 4GB RAM Mini PC Computer Windows11Opens in a new window or tab" + }, + { + num: NumberInt("26"), + value: "Gaming PC Computer Intel Quad Core i5 8GB DDR3 500GB HDD Windows 10 AntivirusOpens in a new window or tab" + }, + { + num: NumberInt("27"), + value: "HP ProDesk 400 G1 MT Desktop Computer i3-4130, 4GB, 500GB, W10P, RestoredOpens in a new window or tab" + }, + { + num: NumberInt("28"), + value: "Fast Dell DT Dual Screen Setup Computer Intel i5 16GB 512GB SSD 2TB HDD WIFIOpens in a new window or tab" + }, + { + num: NumberInt("29"), + value: "Dell OptiPlex Tower Computer PC Core i3 32GB RAM 2TB HDD/SSD Windows 10 PCOpens in a new window or tab" + }, + { + num: NumberInt("30"), + value: "WINDOWS 7 FAST DELL OPTIPLEX DESKTOP PC COMPUTER INTEL CORE 2 DUO 8GB 500GB WIFIOpens in a new window or tab" + }, + { + num: NumberInt("31"), + value: "Fast Gaming PC Computer Bundle Intel Quad Core i5 16GB 1TB Win 10 2GB GT710Opens in a new window or tab" + }, + { + num: NumberInt("32"), + value: "New ListingRaspberry Pi 3 B Plus (3B+) Opens in a new window or tab" + }, + { + num: NumberInt("33"), + value: "Gaming PC Bundle i7 i5 i3 Desktop Gaming Computer PC 16GB RAM RTX 3050 Windows11Opens in a new window or tab" + }, + { + num: NumberInt("34"), + value: "HP Z210 MT workstation computer Intel i7 32GB RAM 960GB SSD Win10 Pro WiFiOpens in a new window or tab" + }, + { + num: NumberInt("35"), + value: "PC Computer Dell OptiPlex 3060 MiniTower i5-8500 8/16GB RAM 256GB SSD DVDRW, VGOpens in a new window or tab" + }, + { + num: NumberInt("36"), + value: "Forex Day Trading Computer full Set PC Intel Core i7 16GB 2TB SSD SIX 6 MonitorsOpens in a new window or tab" + }, + { + num: NumberInt("37"), + value: "INTEL CPU 8GB DDR4 128GB SSD USB 3.0 HDMI WINDOWS 11 V340 MINI PC COMPUTEROpens in a new window or tab" + }, + { + num: NumberInt("38"), + value: "Dell OptiPlex Tower Computer PC Core i5 32GB RAM 2TB HDD/SSD Windows 10 PCOpens in a new window or tab" + }, + { + num: NumberInt("39"), + value: "Fast Trading i7 Quad Monitor Tower Computer PC Dell/HP 32GB 512SSD 2TB Win10 ProOpens in a new window or tab" + }, + { + num: NumberInt("40"), + value: "Linux Mint Desktop Computer: HP 3.20GHz i5, 500GB, 120GB SSD, 16GB RAM, DVD, PCOpens in a new window or tab" + }, + { + num: NumberInt("41"), + value: "Gaming PC Bundle i5 i3 Desktop Computer & Monitor 8GB RAM 1TB HDD SSD Win10 WiFiOpens in a new window or tab" + }, + { + num: NumberInt("42"), + value: "New - Raspberry Pi Model B+ 512MB, 700MHz - Single Board Computer  (RPi B Plus)Opens in a new window or tab" + }, + { + num: NumberInt("43"), + value: "Gaming PC Computer Desktop PC Intel i5 8GB DDR3 500GB HDD WiFi WIN 10 AntivirusOpens in a new window or tab" + }, + { + num: NumberInt("44"), + value: "Dell Inspiron 24 5490 AIO Computer i5-10210 16GB 1.25TB HD 23.8\" FHD Touch W10HMOpens in a new window or tab" + }, + { + num: NumberInt("45"), + value: "HP J5N50UT Chromebox 4GB RAM 16GB Intel Celeron 2955U Mini PC Desktop ComputerOpens in a new window or tab" + }, + { + num: NumberInt("46"), + value: "FAST COMPUTER i5 4th QUAD DESKTOP TOWER PC &TFT SET 32GB WINDOWS 10 HDD & SSDOpens in a new window or tab" + }, + { + num: NumberInt("47"), + value: "FAST DELL QUAD CORE PC COMPUTER DESKTOP WINDOWS 10 WI-FI 8GB RAM 500GB HDDOpens in a new window or tab" + }, + { + num: NumberInt("48"), + value: "Desktop Gaming PC Bundle i7 i5 i3 2TB+480GB SSD 16GB RAM RTX 3050 Win10 + 19\"LCDOpens in a new window or tab" + }, + { + num: NumberInt("49"), + value: "Dell 7020 MT PC Tower Computer PC i7 32GB RAM 960GB SSD DVD-RW WiFi Windows 10Opens in a new window or tab" + }, + { + num: NumberInt("50"), + value: "Fast Gaming PC Computer Bundle Intel Quad Core i5 8GB 500GB Windows 11 2GB GT730Opens in a new window or tab" + }, + { + num: NumberInt("51"), + value: "Computer Set PC DELL HP 22\" TFT i3 Desktop SFF 8GB RAM 500GB HDD WINDOWS10 WiFiOpens in a new window or tab" + }, + { + num: NumberInt("52"), + value: "Dell OptiPlex DT Computer Core i3 i5 i7 16GB RAM 2TB HDD/SSD Windows 10 PC WiFiOpens in a new window or tab" + }, + { + num: NumberInt("53"), + value: "MINI COMPUTER PC 1GHZ WINDOWS 98 40GB HARD DRIVE RS-232 LPT PARALLEL PCMCIA TC70Opens in a new window or tab" + }, + { + num: NumberInt("54"), + value: "Fast Trading i5 Dual Monitor Tower Computer PC Dell 16GB RAM 512SSD 2TB WIFIOpens in a new window or tab" + }, + { + num: NumberInt("55"), + value: "PC Computer Bundle + 3 x 22\" Full HD Monitor i5 CPU 8-16GB Ram 240-1Tb SSD WifiOpens in a new window or tab" + }, + { + num: NumberInt("56"), + value: "FAST DELL QUAD CORE PC COMPUTER DESKTOP TOWER WINDOWS 10 WI-FI 8GB RAM 500GB HDDOpens in a new window or tab" + }, + { + num: NumberInt("57"), + value: "pi-top [4] Computer Design Code Make PT4GY3 Brand New UK StockOpens in a new window or tab" + }, + { + num: NumberInt("58"), + value: "FAST Intel Quad Core i5 Gaming PC Computer 16GB RAM 1TB HDD GTX 1630 Windows 10Opens in a new window or tab" + }, + { + num: NumberInt("59"), + value: "CHUWI LarkBox X Mini PC Windows 11 Tiny Desktop Computer AMD Ryzen 7 3750U 8+256Opens in a new window or tab" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "product address", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.ebay.com/itm/324106350107?epid=218948554&hash=item4b763e6e1b:g:7sMAAOSwlNtjyCGJ&amdata=enc%3AAQAHAAAA0Kv%2BWjTheQ9TMxWam%2Bo22kbG%2BOLTP0KOrmksUtV0QA2U8RQGCHObZGbCC8FVmUW8mzqL3dLUpUjpqSjvxhAyU1CnK60E3Z0bmO5r3JO3WlCLGTKPlvYplfZGxFLAwVrO0jijP34ub8sKMs5F8LliIgnnvAJpbmdd0O4T0fLanDTOvXBpj4ri7s%2BmsD3XVx6qJ4L0Oo%2FEIyFJJfkwQ%2FZNwlu3pSJZdsKPs%2BsDkr25tBFdH6hF49qIF42RHFbVKOc5O5so7hHSAhFGONNiXmWPtbo%3D%7Ctkp%3ABFBMlP6H-MJh" + }, + { + num: NumberInt("1"), + value: "https://www.ebay.com/itm/184870108514?hash=item2b0b1dfd62:g:MQkAAOSwcnNgwHAg&amdata=enc%3AAQAHAAAA4Lw%2BZZnvPrcPGS8GUKtnS0XWk6qJQke2T9irm%2FT%2FQ6WunWx9s8FkFV%2BVRCMPLK8gR9ic63uIScRAxPQdXaUaKRjRHZz4MGHdlEJ8d7cIyMYp%2Fdv8CR1y9CQ0nfJdlNrQWtBCoIbTmNeAwOka4C1RycCvOPGCOxjrtvADbvB8chq4GjlXT3hN7Lk%2B9WY6PFuo0vQoShNJqh2SHza4OP86uRKh4TFWnBKRiMydQDMyaeIizzP5qz87UUbhaUKX0kKwcn%2BLu9b%2FqrikbWxmoSjI9CEQI7pQkQFSIxlBt1QBRmg8%7Ctkp%3ABFBMlP6H-MJh" + }, + { + num: NumberInt("2"), + value: "https://www.ebay.com/itm/303765414163?hash=item46b9d46113:g:5LwAAOSwaaZhsIwt&amdata=enc%3AAQAHAAAA4OopyNwxH4Vidw1QrSDlt8gKmZcNWy0fZMtqVHVO6wirIdhz3PDoOJzgObRiwZaAqFgE6q0TZ6Vjc2DdD3sq2BsrOzbuoTP%2FnLQ5Z6%2F%2FjY9QcdlYTRnaFr9xE9IMBESfSfWQFSFCHY9DLJXMep%2FfnDrM%2F09xuJUcRqiQCP8hqLAtZY3rkGhk%2FVb1MJbSwR0To6erZGsJRx1QmmXbCBUXpGzsfd0VMZr7f%2BQzG3HsZm2dzLlwTZ5%2B5KnxTAVI%2B%2FFf7GAkvLfPIsXCBlJQVBDOxlcUu2M%2BnlLZzl7CPjqG%2F740%7Ctkp%3ABFBMlP6H-MJh" + }, + { + num: NumberInt("3"), + value: "https://www.ebay.com/itm/255291787383?hash=item3b70938877:g:k8cAAOSwaxtiMdbD&amdata=enc%3AAQAHAAAA4HuApRFHP7Pe1bYwRqJf6BnjXxnAYfo8boOQPingKp1%2Bk6GkbGzF5USItWW9gsZ9Pp8gbGVbrAk6c%2FtIOPGMQn1Id8AOO5U4Y34hMqxQzXSlhliaqJYS1RpYVJ55jflS4m%2FhvLdNijayKWcdG6vb%2F7jKsAfPP%2FDpLEx5a9JxY1U8aw1HftSJdj1MV8hb%2F0bKp2qmdYJHHtvtiIZKQIjkYlP7gNH0ad9JujRVtqp%2BU5hsUnp6cOiGxK3UjN6hzZ6j%2BFyk8%2BAbsPCo9h6zWQl95jBPjN2YwBUA%2F46K5mOPzU7W%7Ctkp%3ABFBMlP6H-MJh" + }, + { + num: NumberInt("4"), + value: "https://www.ebay.com/itm/294046987936?hash=item447690f6a0:g:5McAAOSw8~xgQeS4&amdata=enc%3AAQAHAAAAoAX9ytDbqheQz4Rz7VHBikTqhlo8kBRNOcM%2Fs%2FA9VXhdebh2QGkqqg9SOok3byiqY%2FJ1Leb%2BSWx61GguYlU4jybsgRNLcTVqEej4OxrZFzJJm65Pkej6GJmuBFZXVcMzzdf0FUgzPI15s3ghOW%2BcZRzTJQdooisb6Svq0DNIT7uZunNqOmaLa1WQHFQqLZZhbROk8oQzBUKnYUfZxUd%2Fkq4%3D%7Ctkp%3ABk9SR5T-h_jCYQ" + }, + { + num: NumberInt("5"), + value: "https://www.ebay.com/itm/225329535445?epid=18047669553&hash=item3476afd9d5:g:bwQAAOSwcHZjxZOi&amdata=enc%3AAQAHAAAAoHSMRLzXMubDAvzXx8J3k7P%2BuB4CwfoiuMf5oIVL40C4JaA3HXzcAq4YyYb88vO2%2B7iKYtyv2iuqPjmfhdodgHPkAcQ5nDEWa38EcMHo4Yo8DZbjb0a%2BGLyaP8fk9zOugN8IvBWwgUZkQiDPgGAgnEZruEeX7rya%2BeHDNhs9VYlVNMtlDwdH9NZca3tlT2%2FmwkqHku2xTRabBAOQk6eHgzs%3D%7Ctkp%3ABk9SR5T-h_jCYQ" + }, + { + num: NumberInt("6"), + value: "https://www.ebay.com/itm/325373593130?epid=10051234737&hash=item4bc1c7062a:g:EpAAAOSwwIFjQIqD&amdata=enc%3AAQAHAAAA4JxQeh7z61jcCcyCF4pNRQsNBUqRbL1fp07Naaxs4RjZUoAiR5n%2FQpS9eesvJRNYWi9cOIUB%2Ftyl8SN7aXyuPlVXPskA%2F7y%2FQY7R42uIj8RP1eNk8ibRKw6HEof0J81LJawdX4v0%2BwhluMqe2nVenkAM%2FJt1OchmHfy6xTAZxVr%2BurjQbWyJ2aM4c%2BfoFenUuGNd6S5vd4oWNCF%2BjnR6FbI3O%2B2%2Fu2Fa87BZx%2F9jRk2N5g7exXdkoq7IIUI0ai0Dw2vlFbHLqUbt%2BrkOVfyk80Gr3HIaVG4H6MAEuACP5oTk%7Ctkp%3ABk9SR5T-h_jCYQ" + }, + { + num: NumberInt("7"), + value: "https://www.ebay.com/itm/144259997552?hash=item219690df70:g:0t8AAOSwFBhhc3f5&amdata=enc%3AAQAHAAAA4AsugDblUbroOAYenoUjH92PUMbwXOJwp9y%2B4kYiCTwG%2FUTQm7j9GRwQfhLaIx6869s5uc75ytw8VlLnz72t%2FRyFqNLS25gWeDo7bMzmbvoVxydTtNk9A1fQlXlLlup7t7Wz7%2BbupISUeX3cm7%2BFVXWm9v7AcQbMsumEdITNMorT7Heuu%2Butm1PmuA9SDDlQVV7RbZCogECef2A82Om54BZASA6Vj16lG%2BRmRS7PSBF4Hvk%2BfddJ8aBEpJ9vpu%2F3rMMU3%2Fxq0KkiIFZuxWw9cUhImPmWmDTBMbs6p%2FhQHfaJ%7Ctkp%3ABk9SR5T-h_jCYQ" + }, + { + num: NumberInt("8"), + value: "https://www.ebay.com/itm/404097058383?epid=13040155816&hash=item5e160fc64f:g:vrIAAOSw~N1juvqe&amdata=enc%3AAQAHAAAA4D0Ig%2FJAMubXQ5GZMBe0vfm7OClz3LyNd1T24MBGU7yVId9StbojMBy%2FyHeSXYno4%2FJluVdSDU2ItEdPQAqvDTG7NEdp2ymqv7ZFtUA%2F1ofUBheCSl777NxahH%2FuCB4mVqSQuoR0eaoh1G5F9AiX1dt0%2BEt4tTJJFktSQKylUf8MGeUnu%2BewyETflB3hRQgKG1NEJEHl5YRK38lyDgxGXBsOloTQEcHl9iyn73mk%2B7d57WhWrH0iNIzD48laotZvjQyRQg%2FUps0C9sfRFAkgQmlFVPZAzUGwxDqwjlSBdGHd%7Ctkp%3ABk9SR5T-h_jCYQ" + }, + { + num: NumberInt("9"), + value: "https://www.ebay.com/itm/195582906878?hash=item2d89a651fe:g:JZkAAOSw1Ktj3N-J&amdata=enc%3AAQAHAAAAoKLswVbxX4wyryXiiMic7nH8WuGIszb6NdMdi6ZqJLgJlBkFCSMyaGEc5IF93SMkVzDzVnvLH%2F9sYYldFgkIDx5sgmiBrLmi0MXDi5qbOVsxfVLuurgDpkFmudb1sQ891%2FrYVNjGmHO3A3CB48Zs4StoWQZj2CTZnVWXuy1p0wBNV6xgr3ypRtXtSRmG8DAF5okadpQRWlv%2FuhMhTwyXTiM%3D%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("10"), + value: "https://www.ebay.com/itm/255608574938?hash=item3b837553da:g:IRAAAOSwdOljrS11&amdata=enc%3AAQAHAAAA4L7SheBo8dTAN4DZZGRggdJwytWKlL8fIvffTrdScHg7s6wnxrVo7arxyuyhQ4oMseNk%2BPsoGtTRp9nMKwYstZFIktyPvbK%2FlcykBYKhc5f8%2FmtQ6fDLW1xZaPnKsyCKVLpMMugbsYdZDwedOKjc5cubEad8jPSBpIoHpCphXMBy99p%2FBX8D6gAfwK7GW%2Fylpf0kQU2uSC17qTG9WgaCl%2F1yJdMoXGxcCeUhUApPD%2BiDVT1zxzNQryOTS3Gz%2FeZNLkLWBQkToivr%2FCNZq9iyCb7yPCNry0mPhf08Z%2BN0MpxD%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("11"), + value: "https://www.ebay.com/itm/255652606232?hash=item3b86153118:g:hI8AAOSw2sxi~I7Y&amdata=enc%3AAQAHAAAA4MmGNIe7swscGGPvUyANBBacuN%2F0EBqTla3kC0KdYP38S8HhTn7DjvZvlojx9cTTOO6qESFwGEFx6ICjoWBksy1virSTCUI7wMDMrK6BTGUi1S54CrOjQ7ZdzAuMmV7WAgi06WC8tQWn8XRlZlv%2FqPJ8RWeHvXA3XFnNQELWYyJ5qhX9Vqqxc2MjB2mpjJBfiuhO0yP7vI5VMj3Vl3WZIY%2FvtE2A%2F0iVI7pryk1iWncMuwhjAvw3Fcl6Nx3prZvNxgstJmk7ZRnST3DaABJMRnDPjZRjqoCuPliT7YnJddIJ%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("12"), + value: "https://www.ebay.com/itm/266107996299?hash=item3df545c88b:g:uC4AAOSwxy5jKYNT&amdata=enc%3AAQAHAAAAoNHtSD8qFc6%2F4%2BffGapdwX3gna8UXyBhIyaQurdNJ4%2FD7ov6%2Bxv1ZNUQU5QH3pgtJ%2Bv4N0NSogXNDWzKBUUbCBRvExsYWT0WdNECdKWgE%2BdH5jrjfEFOH1YDBAp8DTP81YxMzOWw4h8MkK9rB7cfpiieUMvwBSV1O8xcR%2BveQvyt1YAO7%2BIpKPObNaD22IxRqJAH%2B2D02okXZ%2FxVvWOfHZ4%3D%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("13"), + value: "https://www.ebay.com/itm/292482933047?hash=item4419576137:g:b60AAOSw3NBjYBCN&amdata=enc%3AAQAHAAAA4P%2BuXGYCPLLBiUMRwXg3XVYv36tQ1f99vX4Blh5fKgdR6L08aI4SRkETd%2BqTPfTSOUHs4Wdou4RODKXaTEuELuF0PSe%2Bz9wsgG1Kny4CGR%2FE8ltBl0nHwgoJYDZw7NBaY0T7QOJf%2BxlHnP7KNaXIVzLQE8029rCgKmoNhxWJwkdSnj5NpWCJhrl37oFTuedi9Y2gv1PqqUIq0OzSMn6AsVSCqf3EZm0h1mgkq%2B8pSXPQo415T8ADoAMlIJT%2FKUMCaUCpbdt2bSrw7YaGwAb8D%2FyTkQ1j2M4QEgGe4AowaP3V%7Ctkp%3ABFBMlv6H-MJh" + }, + { + num: NumberInt("14"), + value: "https://www.ebay.com/itm/265906088775?hash=item3de93ceb47:g:WGIAAOSwwXdjYO0~&amdata=enc%3AAQAHAAAA4NHdc10kLjXcLFveSSUcJT%2BNxCTdaQSAYJQUejytIaXHo5IBNQs4l1myPPZxvuVvFssqLpaVCWAK%2BaqJnwvCR8qKaMtfD%2Fv5NZwrc5C33PAJFI%2FlMTOBJVuC117JCTKUt6Vk1dmWITK041uvgPi81hmeG%2BUtMUaqTSFEzKzTP0YCpFOOYb8XehIGlcFTZGIUtsL%2BW5a3v%2F9LBeiINu%2BnIYrsf4ZvNQHzt5yy699vai4AIQLrg32gX1dKLR2ZFsGz77%2BQKt2XxKuM%2Bfn94A1EzuWmBRVID2adRRA3ZvE16coQ%7Ctkp%3ABFBMlv6H-MJh" + }, + { + num: NumberInt("15"), + value: "https://www.ebay.com/itm/275365485268?hash=item401d0fdad4:g:2oIAAOSwcAxiubNl&amdata=enc%3AAQAHAAAA4Gmp4rkBHHVQ8MimeR3Ez9H%2FubM7cCJvykKYRD366HhjgIHOs4zbJmaxRX%2B7ilvps3cfDzVQgH8nlYeptsHA1Z3p90KGDNS2BOLX%2FUzKEQiB%2BwffHCYhnRHuYsQgXwrPw8y7HQhHXanDrk4RMfxkSa5%2Bmh7fdYf7nYcCzNDH739lJ1ddHRNlTn3NDnZsVdJzJ7ehQHLz7ozSlH2AeuogCCRJ%2BqKvR7Fl6cGmmb35b3XSLqdqmYdzA43QME%2FnxBgWYI8%2FjNR0xXutAk0kVTEDkSwVa7QDir1djGVdQZQJ2ruO%7Ctkp%3ABFBMlv6H-MJh" + }, + { + num: NumberInt("16"), + value: "https://www.ebay.com/itm/255873243553?epid=23050676507&hash=item3b933bd9a1:g:z7kAAOSwH0VjlIaB&amdata=enc%3AAQAHAAAA4H2RpNZ8M67ERAZzYsIsES977KtrMtWRdHrNDg9lTI6TAcr%2F0OYYPvM%2Byx0Xjc%2B2oZcgk5RIHGcGyB1D4OyG8frEpbMVD1sUPROW70nZhA6NQ7WP2LjxzoghohrZG%2FFATFogNHnpgM6e%2B3Qj%2FAExEmDSyiPZCf2VNCINN4L4uwNSMtyAiDpKS%2FcAy0pnC%2BuLgchaxKakFn8SSvyxWTSjcpkrF19kxBTkEj0v37VrC8zCHC1xR4MFkiQQFc0JjSP%2BxaWL67rUGdiBz9Tgn7WDpAwdCR3d90Hjfk5NazVXS5e8%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("17"), + value: "https://www.ebay.com/itm/383809689955?hash=item595cd71963:g:6NAAAOSwg4JhCKuJ&amdata=enc%3AAQAHAAAA4JulVCJW%2FyyFYz3dCh62u2etq7HLYWXICDkBOVuM6Dr4%2FhAJGEoyzwauRaVtSSTpo8pU460iDIOvKLhwtNFDJmToLPfRq2CvVfayVn4800ptLZ%2BtOVUXXgN6hazMirG5F3bNpvgmzooZVqx%2BP6iWj%2FZPWsA2LnmBZc%2Fhx0%2FahgBDBTj4evJGYPu%2BVCrYwcBMgc53cpTHub2cI4ub3gibJi4v%2FVvTGZH3WR9scE6ckRzU92QNncpQFpSjwd3O7wM2f1KMe5J%2F5vFCV3CoxWXgs%2FeDyjx41SDtNRlPDBFXebEP%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("18"), + value: "https://www.ebay.com/itm/255883030813?hash=item3b93d1311d:g:nh0AAOSwjJJjnXlV&amdata=enc%3AAQAHAAAA4NkURa%2BzkwrzjKpCdTwhEnWf1V00ipI2K9QxvlPPOyGc6xXVXOGmRq8gCfn8MvAxtQcpQvT1e5jpiUUi4c7hUivVMSDS%2FcRbBNlw6CGsDpJ2k1OoVZD1O536IQB15VFhjUG08%2BdrmO6bNTwyHNKwonJ%2FkKV4p7BqJVyJ%2FgYpzJFW3Y6VAYL5abMk4JJzKBLKyUlJmpyyWnJdSp1FVjmJSSOmdqZCrkL5Sn1djyJEccfVl9urKHZ5HXmqNVMqCdmyX5ZeOVS%2B7kly7Z0kx59gQKT3B8IwuPYcF04uc%2BujVE%2Fo%7Ctkp%3ABk9SR5b-h_jCYQ" + }, + { + num: NumberInt("19"), + value: "https://www.ebay.com/itm/303267474487?hash=item469c266c37:g:u20AAOSwyTpjlyGy&amdata=enc%3AAQAHAAAA4LDmL5ABqtxzBFuvwUrsRn6LWTcJY1amhcUZAlqesma%2BT%2B4oBWDTNHe9dwK9IWVpHYsxFRwVEyp8Ah9UTw8Rh%2Fxo9FUOAFy8NeRm5o3xdF0533eTLEvYKuvjnvGQKVpIJhFtyABUnFzEL5lsgQBRB%2BD2FZJl8H1vbSXecGG3dLm0isPAf56luYvm%2BCjBNesyq9N6wjIbXwZsSwxrxVH45u3I6v8Sy9JVWwikje1fWGQPElhrZEmfSlNx0H3KpZXBX6066ylF%2FIJfhWuDl70I%2B78uLDOjCC5qD0n3bO%2FqHjdl%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("20"), + value: "https://www.ebay.com/itm/274082367984?hash=item3fd09509f0:g:cTgAAOSwcbRbpVCE&amdata=enc%3AAQAHAAAAoOHNWlAST0%2FQEfKszR0XBSHDh4rrqNGbe%2FwGu9BJQBhd3eOYMVfcgTMx4gZjmKaBhwEBbtYhttxKg1ehT2PnC4RjDS8BleIDBWyE%2Fgc0%2FPRYvnM9m3ka%2FR%2BaqApZ0dQTiVCC3sO2Rg94bVZKIJcozd9XhtLvBf%2BRk5hfTF6BBh7nmv4pFtgiSiTOpWCQhJUBR0JDMzO%2BnVOGdbrIAUHIDR4%3D%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("21"), + value: "https://www.ebay.com/itm/374456349625?hash=item572f5673b9:g:UK0AAOSwFNRjwDjX&amdata=enc%3AAQAHAAAA4LKLx70lPJGqjNff6dV1lLozVijjio25K%2BJo4638k2ffMTc7ZnuDJeMNSbhfEQUfTur9U3lp5VvkA83BvPlxMLqdsUDgI9%2ByBixDgajIWqNK6khnV4sj6y5rCG9xftuzFfVwEJVA5nUtmsxRLX1B062petN1TVX7FTjtOizomjESiXfeiLMZv%2FsCuDUotm4jfx3Dp8F4tzFQQJCIzJuH%2F%2BYKfFmfncMCY4hLKw0puoER29ltLHfe4reJmM%2FSz3HWJDg1MsEsgu2J8e8lwWG7dBI1KnmfZnhFiLMNyu%2BEaE7p%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("22"), + value: "https://www.ebay.com/itm/125728671794?hash=item1d46034832:g:6S8AAOSwodpjyk~5&amdata=enc%3AAQAHAAAA4FC37a3mUiaT21pgFnYhcMAUbixCcqIgnXhQSeApp6Av6RJLDWiNP4BVUbqYiXvxLg5n7o62R0W0rH4jcNBkMQrCpE0k9MdvDOe4R5AyLGQTmW9ZJaMFUdMvv%2Fp6sxiiM%2B0mATLeOsDpfgZddJS26RhdqwK4h96wb%2FUKQtT2YeFeJ%2Bb8cDLdP3n2qsKBPWeA%2FaqCqzrUSmElHgEStAO8%2FN2rkkPhC9Z7Q8GKvvxMcmRelnQ2yaS6nkEHJhtC6wDcAqCQPK3KtfZ5Aj6KNGyD%2Br9hI%2F7wxhvNVZfWYIQltv6N%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("23"), + value: "https://www.ebay.com/itm/144913389857?hash=item21bd82d921:g:-TYAAOSwHcljzzSW&amdata=enc%3AAQAHAAAAoDtFwAOq5%2BtP0Qc1MMvT6TNJrVbmf55MPb63WH1tINZyKIpoe6GJT7uKk0AtN0UAHqm1zWpEPMaK2wo%2FUjAHPqdnZSotNLAI%2FuQ1pstI305Ph4q3oArTA%2Bl5QFby1SmoMrrR%2BbwMogkXqAZPZ6oDV%2FK998KvfzGok5l4JTFLi3Xfb6Z131UNTMIffyWlLWTDYiPJbVLySs4HGsW97npSNEM%3D%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("24"), + value: "https://www.ebay.com/itm/185609134672?hash=item2b372aa250:g:xPkAAOSwo2FjP~tj&amdata=enc%3AAQAHAAAA4EN80%2FIsi23f0Zr7to4qpwyQXOMIZXCDDc128YNScuM4npd%2B2KHnhFsqw1%2Fv8IPkpcDj1o%2FdGB0c7L48b%2BpAVCIIQ0UgiepT0NofR2Gbd8vs%2FYDm1m0l7513rPpVlGTGoh4OVJIhK5QL2Csurpe8nt3tgWTIgKxhfBIVaQWZ%2F13NWXdRiqLHtqwVoaD2zAKZ%2BbiiK7Mb%2Faoinq06NtT9j6Zh7DYpA6nlPO27FXvzQukh3sIRKVXVIYcyEYP2AO%2BgsGA82CvoeUN5MeGoTXj59mimrXnDGWAfYk7etXLCUeWg%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("25"), + value: "https://www.ebay.com/itm/125582856799?hash=item1d3d52525f:g:MKEAAOSwuk1jW4TH&amdata=enc%3AAQAHAAAA4P6QsHvFfCmkgFDiHw24V0ESrPHlTV5Y8HU2g8%2Ftalr7LaBL6om8OaIXlmLRLrR04WScqYKeXaefO1uUVy92DLqDdM%2BCgpUKf3I7fVyplBDEUJtJAOhrd3d1OCGiqt4xXkQBMAX7y7qX81Njnj3586abouodTO4b1O%2FWVwlmdHpBmMKGqeU4t%2FWd6PUkF7WXl8%2BOE1YnHUEKXbKdqzYPZtNv%2FBg4e211Sl2QKmfE0j%2B1sqUz4HK%2BSPpah6jN5zgVkroFvRB2oJmQKMijhj%2FttfuxJrpYtIRAEsMu%2FiSDgr5t%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("26"), + value: "https://www.ebay.com/itm/265372518746?hash=item3dc96f495a:g:SsAAAOSw2SRjpEnb&amdata=enc%3AAQAHAAAA4A1EkLGBbr%2FSFre%2BXAGRXXvchX%2BRkcku0JQeKRstJvVtqt4qWVJWtXX3b6CGXiY08e7Fs%2Blv6vEgEOC7HXe6%2B1p2243C6szQOw0LjzZkpBA2mJwVe7icUDV4vQHd%2BFDI9bvUlYNxmtF%2BEMm13tmB%2BONIVc2kA6aL2LiwLbIl4OCbUN7Yl71Iqq3n8%2FMJi4kUlf8bJE9tEPjpDfdyJa%2BIhINKsFrqk8Yqvc%2FsjS9Z8smlKqR9iNF7H1KEk%2Bcz1HZ0A6wqSp643Gd8dZ082qEdVEb5smna%2FROrscvUSBcWMFME%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("27"), + value: "https://www.ebay.com/itm/115444599374?hash=item1ae108ca4e:g:iJQAAOSw32diuf4G&amdata=enc%3AAQAHAAAA0MZiEJDSl4iNlZpGFRQqhhaYnTZbBdcC4t9LQPT08GbYZrhwtcVZ5E%2BwbqdQ1mw7KFwXf068EDISWCsTmNhthUYCNIvBayIDhkHSM%2Ft%2F5BH8NQfHiMjyrWR%2FaHit%2F4vcUpdMhFiTnAJNzpD37W8bw59axQMQbDJ98D0jl%2FsvjgKecMhAo55IrpjUDGRPTwx0ZkS0eLX0N0p3n5OW8lKXbV890Ja1Ax8by3n1gELC5T08eSJ8eeiHcIHUYIFSTXpM6kkWusY1gkhgsyeU0iFGEmQ%3D%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("28"), + value: "https://www.ebay.com/itm/223172033000?hash=item33f616f9e8:g:0UAAAOSwIIFivtl-&amdata=enc%3AAQAHAAAA4OLXspPwytzQG%2FNuUHQs%2FhLJINFU5%2Fk9Rx1l56t8SnKg4kunmubB1gPvPZM9wQTYPHXfmF2kqOUnsb%2B%2FASB901zXbC6j9N0iLIxYMM9eESIZKHRuzR3aCexQdPQtxjHWQdyx6pDoLHN5Rpr4afMMRe4DeqHofpeKghic0xLfrzE4UYKrW7e7REZyuSthY0fEOAxJI%2BZta%2BF%2FS3TXTmkdPvy6Q%2F8M7DSG64b2kVff6KCqc99MeXWePZodUJoGv%2BF0TqsEyXDJErbuT023gQ%2FTsMiezLGCe1JThaOLeylSu6aX%7Ctkp%3ABFBMmP6H-MJh" + }, + { + num: NumberInt("29"), + value: "https://www.ebay.com/itm/275432199152?hash=item402109d3f0:g:aMsAAOSwW0Ji~kVp&amdata=enc%3AAQAHAAAA4B9G5yjp1jODMzYhbW2LqLVtfUlGajwGcuXPSj0Cq%2BgEhKtH%2FuWxsJm73tq%2BFHbpHXq%2BD8cJrY1UErhDdd5LVJlX%2BRYWlosw5%2BCBJRVIn3J3Y6j0IBZLtoTsv990QPwTb8NFSt8SycH97NO5k%2FHc7UXQzYK%2Bw5XiP2pPI3HwqR4sOrAN8%2BUQ6usQ4CzSggjXkHw2MbNKWgflIAz%2BYW5xKUG6Gs%2BKy5zGJ61t4ukYkO2kRcrldxVlOlNfB21o%2BWU4HxukI5jaFpfLr%2FuZWCNK4gs%2FMGFJQ6E7dpssRV%2B6yLSk%7Ctkp%3ABFBMmP6H-MJh" + }, + { + num: NumberInt("30"), + value: "https://www.ebay.com/itm/292512179602?epid=2238456505&hash=item441b15a592:g:MswAAOSw-btaxjWs&amdata=enc%3AAQAHAAAA4N38XnchaKyCEv3uoivjxnYr49xVb5tMutSOcfivF1%2FrDEZJmvRH9J9kDJiB40FQ8v1D%2BmaAu4LM94fO9rqlK95%2FoTn5vaxFD2BJic8VCfCo82YK4HBKX5VY90RNwAVRAzlGLQKnxGBDcpQBHmGO8LVJOIGk2lPeDbq7Wy7qEhNTnfN3biH3pwa4VWWKaaWS0weMV2w9TwpLgeiNXgjxQJm32udeouUj6wovBcd%2F%2B8aNMuxojR9omn1tdYbKGBBJaebpO1aLXohWT07CMVe9pUYiIDDYfFmHBL0bXuIHtKz7%7Ctkp%3ABFBMmP6H-MJh" + }, + { + num: NumberInt("31"), + value: "https://www.ebay.com/itm/224450136332?hash=item344245490c:g:7G8AAOSw061ft9Yq&amdata=enc%3AAQAHAAAA4DYnUCy%2BL26Lhn6SgJ%2Br0lmhSyFU5vJTk1nWbL7QK868tsfZw5Pr%2B78buc5OH%2BFqGfPbXCj4PAIzSGLRln9%2BSG7TLOvcYUHSsVobYgh%2BpBBE%2BOfqRS%2B1RkLOjavVWMVW5WLahLmoZNSbdQ%2BikSGguEra8gwh%2Bk0rUwuANJKGWCKsV9ZrDugp6EFdd1WM80mMxuEEbXxFKLwMJHTPu8Hh%2Bt0tr95quzI3xPbBSsINoBIIEAwEgE0%2FmqddgF52xmmTQgI69bU%2BjrUoTX2hqnhLkr%2FXjomcZfC78m3ZLHChHQLL%7Ctkp%3ABFBMmP6H-MJh" + }, + { + num: NumberInt("32"), + value: "https://www.ebay.com/itm/125751868178?epid=3029963667&hash=item1d47653b12:g:RnsAAOSwdRFj3LR3&amdata=enc%3AAQAHAAAAkHCahjlgqCxzLZv8SHXWSlhlvJwCovEbecsN9QHykvJ0e9geJHR2SvPohJj4k3Qluu%2FKWTRCB7EJ%2F6%2FUEiYeinwGBimwHxrngSL3JVtnh2OijkrtEcXEAf%2Biwo8zy0zVOtq%2BAgSrvhnFaxYlpMIyYPKwvkN%2FN%2BkYqWToQAeXM34%2F9SR4mzgywQjH8bUqoOrVNQ%3D%3D%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("33"), + value: "https://www.ebay.com/itm/304719006205?hash=item46f2ab09fd:g:TTMAAOSwr3hjhJYp&amdata=enc%3AAQAHAAAA4Gkkc3OS%2BTV1veoOVpYuMmNrINFeYA%2FbKdUwZclXV69Xf2U%2FijW4%2FTNyH5apDjbeP9I%2BST0dxJIqHeq3LYHyBugZWMEtsvIQK5BdyGsEcUDMTSlCjfddsGNA01qMeLQI5KogWT8W%2FYH7oVsBhHETe1bd%2BtdyDkylsmB2zypowyU4LV17zLhU3Ccy%2B84ELpxaVQ36FVr8TQM7Jx7O4V4DAL9NcYpsSUQV0yO%2Ft9Vk4OPBUKpZWu6houG6rfIUOCTLU1LUBRlVYoMwDrqjbUC5cZRdApbhsKgpHOj6ESl8beRH%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("34"), + value: "https://www.ebay.com/itm/234711377986?hash=item36a5e36842:g:rYwAAOSw6SJjMzsD&amdata=enc%3AAQAHAAAAoJzde63Bz%2FZD0fOeAJod8i5W45iQpYGXlkmNtZ6d0tTK8V%2BNQxUrAdWq9f0CX6WnJgDXm4TLYMtdgQOqKrD3tqDfX2jACrNDdrAjGW6tJZ2T2t74pi%2BhvT3D%2Bz37UyQqy%2FBkunuRADArPE0eURVM%2BOWwk%2F69vR1HYwJGPzr0FnrT7x99ULhFqipCEryvygR6WBbcVvL8ikApqcNib7TU4ok%3D%7Ctkp%3ABk9SR5j-h_jCYQ" + }, + { + num: NumberInt("35"), + value: "https://www.ebay.com/itm/115678277362?epid=6055699538&hash=item1aeef66ef2:g:o3YAAOSwQi9jyTNF&amdata=enc%3AAQAHAAAA4DdhnUovD07IfzTnWc45YVaZUfebsZfVlg0DOjOF16mpenX%2Buq1x4c6Grq%2BAwQMkwaXF6IptLCsW0lt8diy7OXAeGI4QMmtkQlR2tV11wnSyNdfQ1kng29orzT3W4NUgvYsVIw8SZWpL1U0r1m7Xj9FigmpEH%2BTnL29hzrT6297hFhkV7gnRykcaD24gVS2Tc35tdrPcWggPGK1jZaYvXXea9FZ14KiVq8grP5KhP8%2BJLvS%2F2vrz9IrnNeu9eKZ0dpEVSVx5KQILYRImnbBrVijmKRcN0wTIVSk%2Bvp4O3%2FNu%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("36"), + value: "https://www.ebay.com/itm/275047138035?hash=item400a1642f3:g:FD0AAOSwoyBianIq&amdata=enc%3AAQAHAAAA4Ma2m8PXTrQ5u8KB2Zhe7ivYnzKMDO%2BzdM%2FsjpQbwkp2Hm3Z78XnsiLfCm3tyiZoDbxqoBvlB0W4C02dXJ72jX%2BzinO%2B%2Bg4MPJz%2BfccGFWTnbFcxFYuGoFaBUeyQ%2FOiLqcpmYAVl8QzDqbeIufATInChDl2LinCoiDkzV3p747hDwPDlew%2Bw6wFwegMGZfTuX1yHzLTXPMmhBNeDo4VQ%2BH8nmtLIn01PGI1jKZuaela%2FIu5o4cwYoDBc52ZeEKMcpgtClmV0qqU%2Fep2Wx%2F3qsZDFKZq0HWxrnqOPm69t%2FluA%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("37"), + value: "https://www.ebay.com/itm/275394373901?hash=item401ec8a90d:g:W2kAAOSw-kpirBpn&amdata=enc%3AAQAHAAAAoOm3l4QrAiUEj%2BH2SVvfG0na3Vj06Kc7mt%2BSpmgzF3I2YTKmbRNN0krIz2Dv1WmvQLB0C0g5QNMVTRUbb%2F%2FUV8WapFxU3OXTVxQIMIvCxIG1qDkevJnnv0Fknmj8gPqfz1Ns7vs3AGIb2y0J%2FDW8OmKLc2gvtIzyPIr0lBXF62sHcxBgHppdfddzM0jzQe5wdF8nWA6zDeTua5KIZrGfLOc%3D%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("38"), + value: "https://www.ebay.com/itm/255690426781?hash=item3b8856499d:g:aMsAAOSwW0Ji~kVp&amdata=enc%3AAQAHAAAA4CgJooKbRWB6b6i0j6hOyel0l0L7hYPOW9iW7xA4X9i6y0dsq97WQqL0HwLHTRBdRl1icqKx%2FabqkV%2Bj57wRBgsI4xhQoZYbj8SrmVfeDnM2lnePQEGK2uxQrtSlMo8Ry94JkZ9QpETLOHFG%2F83Yc20kz8eS56U7ciitXhYm0dIIXJ9NigXVPlA9GFwqlvjOMF3hinxtm8yWvexqsZNY2QeDtnLsda11PiIOnqvehbGtcqVjZ8x18pBKgoFjXa0VCzZcQmQjXnDOtpfmcKRtSsPpZ3mR9vHmC9yPwinVHqcF%7Ctkp%3ABFBMmv6H-MJh" + }, + { + num: NumberInt("39"), + value: "https://www.ebay.com/itm/265812959772?hash=item3de3afe21c:g:dqcAAOSwmShi66Qz&amdata=enc%3AAQAHAAAA4NF8PgN1bSi%2B6YRXe3foI8te04QNp5J5SenCv9nMwePoQM0QZgUOahLWGQacGr6BojLMGs6GVs64%2FXyehn6xiqeSLzK3ipVKC4e4Lr9amU6U87R0VXJOyzO5bb1Q4u3MDuQr84zfMr4wDZNIj62wKi66e0vFIv9jTfYH1hp1FSRmecFdkYjrg%2FwtUssBHGrOdB1bhEYKwWYt0450C01iMr8D%2BPPXQ7jRA%2FDs7fHWfeCfFxqWjm%2BGx7hUjp8shWTBFevMMg21K4j8du8ZmqjNsJRbe1%2F1gauC2OgzeAAryp3a%7Ctkp%3ABFBMmv6H-MJh" + }, + { + num: NumberInt("40"), + value: "https://www.ebay.com/itm/284960385595?hash=item4258f66a3b:g:dYkAAOSw8HtjGo0Q&amdata=enc%3AAQAHAAAA0PIgxRdjMvsvQFLjOVylbR9OBYzf55i39op0CLrMHg4eU7USkoSeyum0frNnMDD7ybUKP7kzJt7i00z67XZQz1SRFwzPANfxsrO4qhetGRm2lxpVse9je0wgnq7bY%2FAOWNl3MyTPurmTsRafWUzWne%2BxRH8g6mwkR%2B%2Fyn8eshFftkUrGQuht04RUdvgOej13s8vD8999rLWbESWJ%2FBw3fxx4aU%2FTBREp3jiKWV7d49qIm%2Brrc5mdpdEdXZgUU0WNB7EmLrSz%2FmzWnhMjGrQ%2FK7U%3D%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("41"), + value: "https://www.ebay.com/itm/155046660545?hash=item24198049c1:g:WP0AAOSwGudiseHk&amdata=enc%3AAQAHAAAA4FurkP8rprjPAEY9EenrxDgZQzdlcIh9nlh6%2FhgeWIlJHVsLYQ4gG1070DM1sVW2p01GJu3zX0vIuMlyLBB1x%2BS20U%2ByDWjzE3Kp5Y6awHgXu%2FDO5tw0CwMxRjsko9nSNEpIFqUe%2F69mrIjCUGUTzfEiFQN3zy6IhwCbaNGOYRYNIKTl1KITW9nq%2BGSWhRXkgwXIPnaLdqWf%2FoZ0CwfuIrjB4bFyFzabo1lI6RSDCQvAPFLz9GoGSTfc6mkE8mMCJhPPQ%2BYsESkb88qBW56xm3GdO7bCJRwjHw6%2F3hoUgyEZ%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("42"), + value: "https://www.ebay.com/itm/115690933316?hash=item1aefb78c44:g:UKcAAOSw28BjyVsz&amdata=enc%3AAQAHAAAA4N7DRnsawOfd7Np4wuTO4CesJwVBUS2HxY1xiUbdF8eYb612SJB5MHcYd0Hc9OqnmX2Sudn5YVA5IpbW%2BTkxra82bHEV9%2FSSn1Us8pyY%2F2Pp2JnEArAXrs4451ucAiTtviH3T%2FlC3P8SAMjxOFxXVrZnuFOwoaxSUvNM03HdcEehG7zc9n0oIYVXrBaEsYJkIn7Onc1DQS5b46hly6P%2F%2FKqAIzGR3aKIIG9VFnR32qFIiEZS3gfKNsbcUBkeNPHVvAoQG%2Fa7q0yHMoa8xzxZ54xvItPo%2BwPMor1jESHD65MD%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("43"), + value: "https://www.ebay.com/itm/265906100052?hash=item3de93d1754:g:vAsAAOSwpCJjYNfD&amdata=enc%3AAQAHAAAA4K4w93ycFLPq0cnanhhXRaaq9GDuNGgjFQLFi5ezJMhbOxF4IOxh5UlXzyc7sPKfXjlya9gQ9D3s5TjKClljJKgimY9ajZVbghd198bAeFaKaYBfngyDS57FAmdrP2f2wTj7k9%2BtKw9aoKaWKECDLUW8%2Fe9qYxgyKWoD1S7muLnD%2FrGrZ6JM2d19ZmQiO2T%2BzsgFH3hf3RGDSs9rHFJExDGAMqJdedbLjMXDtJQDfA1B%2BnHKlvN3xdz9QmfkptUsChQjm08T4%2BU4F22LOYCUJgfApwUorgs2qxAOMNDZvb7K%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("44"), + value: "https://www.ebay.com/itm/144381601330?hash=item219dd06632:g:pl4AAOSwW4Zh7Dp8&amdata=enc%3AAQAHAAAAoD4H%2BRQmylBpODE6f62u5bKx36RUS8%2FyfpqV2BYmsQS%2FLPltJJb7r0yMCArnoQvZNMBLcJ9%2BN%2F9UJsBfV6WNtJ6z1ovHfmKhILNZZQ%2BBnGk0j72fTDesNW4lH0feCLuiqdy1FqtttiAGuW56VVq8%2FlSKzFQwDEPDGu8BhZS%2BYCT2oKHDFkxJyOHNoCDtpFTdORRvz5fsG3BOxMOCPSNPtPU%3D%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("45"), + value: "https://www.ebay.com/itm/125746832360?hash=item1d471863e8:g:ZTMAAOSwZBBjwWJK&amdata=enc%3AAQAHAAAAoPQxnE3lfFqh5ME%2F%2BnHcxYLMOA5i%2FcE7U6WUCAz21PmZBeYfnzCOHiTM0uIz7o1FdbPvt5keN8uAgK6gQXy1FtcP8sA1mHKTUFRRS%2Ft3dfUP1BbH9TxDRdyAmV%2FC70zYJ7osmMKRXYYJMfgPZRAssGPwisqH779v%2FomIAbM8I65GNj1W8Z4u8ZKAlfmBFnQXeP%2FJSsJ82%2F776hch4nmPRpQ%3D%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("46"), + value: "https://www.ebay.com/itm/144085984090?hash=item218c31a35a:g:SGwAAOSwlZxg0ktM&amdata=enc%3AAQAHAAAA4O0R9KCmsxPTSM5mymYJ5xsXo9pGzqNvm8UdA30%2F55YHaQqy7PM0gQH2qXRFkjZxEte%2Fw0T6%2FPgPxeJk9kcnPmk82E8PLFL2zhMfoVdW9AzJxbzJlzRmwAL2lh1M2AaZ9rLCjJCmmgbTVTWVt4Lp4MHH3YwEYys7W0CsrwygLYfS%2BTOVyiJbGUjrDrBZoQAqDcPZ3dq12elPV5pGbYD%2FzJ7zj6YzOmx%2FDw2LEq0rQDWKlj5lrU5XaFBlVZgfoGLItSwScZAKf3KrJPj%2FgSi%2FDs6GTZ5CM0xK5gRtdtz4vffE%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("47"), + value: "https://www.ebay.com/itm/303247751667?hash=item469af979f3:g:xwUAAOSwmBJclMFd&amdata=enc%3AAQAHAAAA4IC8LdgAX5vBMHyRi6Rn8yEgFZTZBC4XB0GHXZ7Z5Pcq5D1pkfIsbr55tCWqgHGoTLnnlkIrqQFMqd%2FjE8iqIgRKWdr7OOxveuyXuACpEfkgAup2mOqkcUj3t7cx0e1l0pZ4mXZgypRzdqbuMDr35hCnaswxsQchTaDfyoDCIJ6MKDjG7PcdhFcdmVWs4a0IBLCVTGyZyRV9JXKcV6ESArDd5YCOjObpM7n%2Fxe8DdvO1BCNtBJlIN8bBSXDNj3jKinxliCLVOTRsMU8UUh6FQXWsooAqRjSPHsQ7Yga8TLAJ%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("48"), + value: "https://www.ebay.com/itm/295310884482?hash=item44c1e67e82:g:u28AAOSww75j13KT&amdata=enc%3AAQAHAAAA4AhBBqbhkzj7l4hrnBoNaDA7dLJbfo0i%2FgK%2Bzc1BaZlbI9iSbdROkeBhBo7NZ9jyX86dPzyA5QtKpENxT0saolrswIMe4ERScxtCiCamLqg65A%2ByGmMMisVrCIYbWYhWK5peGDIjya935N8gy79zzsrBJDlR6CVWNjEdIiBS4j74%2Bulm7DloI4O4VQEprAdleGeFQqDT6dQNzPLf11wswj5v%2BVGFoi5us4BZ%2Fr1tYDtOPi3eFayTkayF8Ioa5kUBuiqVWROPtjGOY1m2oWePPiVmjcp2ZXxWgbPhm9LEYYoF%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("49"), + value: "https://www.ebay.com/itm/234690240169?hash=item36a4a0dea9:g:QhcAAOSwU~xjG9kb&amdata=enc%3AAQAHAAAAoKzMHifspHcNl9eFovr9fRCe1fXok54ja3DrqqcNb2MSLt%2Fjr%2BPY3W%2B%2Fzn2dBLqymBubw%2FBKoIX8%2BmAHEUk9gnLNldn3%2BNemXrFZMtgMVuPev2jtzi2R6oxpRHO1BDxSHh9R14CzABtudwkNLswiWKIQfwM%2FjknVALXivtk%2FIJVBzv5ktUjYLdCqWZABENPuYFajxFGHZvjUq7%2B2k353HEk%3D%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("50"), + value: "https://www.ebay.com/itm/144611806693?hash=item21ab890de5:g:vl4AAOSwp~tisGmk&amdata=enc%3AAQAHAAAAoEj6RuSwhdac7KCJJEj%2FwitumAPGdrbnlAcfn3IhmO8I%2Bgnm4MJmRbEJ%2FO7TC%2BtTM0O05X%2BCjTMfY%2FHdembRibsA8zC7YIZmFDDZ0HpX%2FvA7GHqwl8t0otxAQ%2B5OJVut7wxSmM1B4%2FnUhKy7IuQ7e7U%2FTJ4k%2BRCQwTU%2FQCPdljVcF50KB5xehWOGyhgJGQVjINfG%2F1Jkb0qeAurzuiLFvfw%3D%7Ctkp%3ABk9SR5r-h_jCYQ" + }, + { + num: NumberInt("51"), + value: "https://www.ebay.com/itm/144110916956?hash=item218dae155c:g:OIAAAOSwH3Fg7BRp&amdata=enc%3AAQAHAAAAoN3fkBuG%2B5%2Bmkafauc4GcTPa%2B1ho4%2FBwM62uNumAkIFwNp79vOlC1qzKCHYMZDcE%2BIIGsWMo0oOqLCunk0mLnJ1VNAb1Yq1kY6Y9I4DDxDO9GJqwpFn%2F4m2fNrW2tl2wLdP6xcehaqWIn3%2FE02s8byRPkOlsVD1DdpN65aKyIAxKiEsUgyTiHP4DJ4ZGZoLNhJBspIEWlPlM3Ub8yjk0QRE%3D%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("52"), + value: "https://www.ebay.com/itm/363951112583?hash=item54bd2d4187:g:AjkAAOSwRVBi~0Ub&amdata=enc%3AAQAHAAAA4A%2BrbsGHaMEhdp%2BC%2FQxDYY%2BEn%2Fl4cxyp4EMJZkU4pY53ciMbf8vvEC3W4N2ce92qWGQIykc2E6bFxzLvjFrx57arpV0t54bOs3uCmtC4st0ERmgVRbg8jl2C%2F7o7zTejP00LzuTq5Y7KW0iT8b%2FuXQ1sNhWIF6BmT3%2FVldI%2BlH7Gyf7w3UliEL2CZrGbv3rDarjjGQ2Pm9sCFigPAWssrq5DdwQzBY6ByUOk5QXcvX9OAMJT1KbH0ouMyTkHHokvJjymEKPgBWoJXJvp90rjjNHunKPzisQJCu5fjrHrQhGI%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("53"), + value: "https://www.ebay.com/itm/275375557275?hash=item401da98a9b:g:FDcAAOSwIitgt~M7&amdata=enc%3AAQAHAAAAoNOZkY8xVwAuIJTQcyHASh9e45cAvom7jm0700sgiBtJCTSeUcPEuwbjp0%2BbcB5IrauKM5TFnHnqEUG2gRTwQYKCGOgJD9bpgl%2Fj3JOyyNxf9TEME9WedAt%2BJisPEyls4Izppw0tntOv0xsgnEdCDny3ScmpykE1dBuvPobWCtCJR8i8D%2Flwin2mcmObWR4qJ3PioiE1zErntyV0LOCyeDY%3D%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("54"), + value: "https://www.ebay.com/itm/265429620554?hash=item3dccd6974a:g:1PUAAOSw6I9iX9zA&amdata=enc%3AAQAHAAAA4BVVqQzbOZpeLGmCf2ZOnIZ%2FizkrXCakI4MfpWbAmP467LONJktqTRZNp6zkfPDGoGK5hQld%2BciQsvQ6cBvvFe60PT%2BIOcSXzB3NLNOVCfu2j7BRzgldkjx6sEki8RavuaSjKJJzjyE1kn4H8ExFrWlQNqfQB4HiwptE%2BcjTo7d%2Fy%2FmYK7d6rkGNyyjmJS3k15UtRMu4CTm4Of%2FS%2FOEVAF3e4KLWO4ladLFWOOBnjWWZmP164eVBDZi6yWGU5w7ckFM4MKPQOeVEcSN%2FonCudTeMwapkjwmAC4CCdVy0arWW%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("55"), + value: "https://www.ebay.com/itm/373938233169?hash=item5710749f51:g:do8AAOSwe2ViD8t6&amdata=enc%3AAQAHAAAA4JfJWeZVeY5q7x4B2AyHcoJyl6N1B%2Fc%2Bl%2FcLfsmzkd1VVGlSlZGPoTEMpHg8jXpOohthvXmDNnTyQFVDA5cKB2ft8IeQixjoGLL3nwy65FyoaI%2BvN8Gh8IbZauT4eu61BwQmP7cck7i7yKV3hMopz4IucsODTbXzi21DsW53uB69dCKP4gdKSh0ez9csRQK6N1n%2Btp7WRGRoCtsvw4NOb8MAiuWNb5L9IMhzv8zgfE%2FoJoK8KQuQ1A%2BH9yFM%2FXv4GkiUCSsSEmavNETV%2FzWeZ1k9i%2BBXU%2FjC1YUGSR8b0KQu%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("56"), + value: "https://www.ebay.com/itm/294138927037?hash=item447c0bd7bd:g:L7AAAOSwwGBggq8w&amdata=enc%3AAQAHAAAA4CDF319hj2AcQ%2FKwVz19oCCjVSJE0TLetS9LX4st8fuu0nBlvUlABe747ehXnGzxo71b3w26D4CFDGm8Fb9%2F6Q1bsQcjRojfAh19WryRM%2FLixr%2FGZzNQej1Q8N2QI%2FiukQI%2FcGujrwo%2B5ToM1GCDVUy6bALMGiedk5YKcv7HzaEpigLtelJmiLkaewaVilWXlg3oAdkfolwbm2jQyZ%2FvMsQJapbM0032vlM5jbJR7By6IiZ4UP8Maf2bNNnRAZOoh8AB2C3ho%2B1lfC1%2Fy0rUvEOs%2FgymDLCsh1ibDv9ERN32%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("57"), + value: "https://www.ebay.com/itm/125728823762?epid=21051490359&hash=item1d460599d2:g:yAgAAOSwj4Fh6Aaa&amdata=enc%3AAQAHAAAAoBgD%2B%2FchUPmdWqr%2BAtwHtdGn6z2a0z9sCqKL2PtXSoMi6%2BhWH%2FVZD478ek3SrPvwKS7RYucg9ZZFWNbXftpnD%2FzPYmsvFowzmmBZGc%2BUofOHUGXGG9ywHY%2FseZsDbBKpnnx52R7lID5ARNoegwZMn42e6Cl4%2B0jx%2Fr%2FV1b%2FmrsoUVeNlS2SdS%2F2DN6BPOFRqH99IKnvJHFOzhvmpR2429lg%3D%7Ctkp%3ABk9SR5z-h_jCYQ" + }, + { + num: NumberInt("58"), + value: "https://www.ebay.com/itm/124789931370?hash=item1d0e0f3d6a:g:V5MAAOSw8yFjhIo4&amdata=enc%3AAQAHAAAA4FVwvfZA%2BuDV4hkRn3AONVXaG9lPj%2BB81A7ImA3J8mnuPlEifWDpM2mfgHdGcq7GNL5vXtl8K5XrIZcrSR2H1UgJfHSQILpU8LomyIHwauuovxYKV%2B9vJA9Y84rjvNvwOGW6yjAi9stDG6WF7HksZjey8azjiD3R3p4bmngZ5FfdkxQTMwJejw%2BKIAKRvli%2B%2Bwd8jNpu0iqo6gjDUN%2FQ35p5vpZKioSmRyK7YasjJYhL%2Bz7V%2Bqb%2FYFH%2FsZd47fPxcXZu5rUMcOs8bVjSVB7JljzTAbgdrfU%2FhwMX3Sf4JT3R%7Ctkp%3ABFBMnP6H-MJh" + }, + { + num: NumberInt("59"), + value: "https://www.ebay.com/itm/334609619633?hash=item4de8499ab1:g:bBIAAOSwpBVjXPuL&amdata=enc%3AAQAHAAAA4LVe3mYO56gjRc4NllHnQl93kwWOYKVDCy6600ypXVaY1oKap4KOaY5KkEbcZ%2BUO%2Bq9tNQFDeKU0nilv5OhQmrxRzyfVt%2BFAYk4D4f%2F1VUkM7Eiq6MBYb8VBjcaUDLHGqVqHwdZB3E4t7X%2Fi5nnaK2L%2BacxP0GjBfCoNTi0eRsL%2FKlj5pnYX62lNlU6cVrwWYFnKhiBDgKACK490mdorhbhdGLyRorQqIda3AN4OzPYY69TPxWyo8Oc9fQFOipTohiqceSxWv2JC%2FLa2UldVg9JbXPpRl1E4530yOFgJjsFb%7Ctkp%3ABFBMnP6H-MJh" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "computer", + value: "computer" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop Click Next Page_2", + nodeId: NumberInt("4"), + nodeName: "Loop Click Next Page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("5"), + value: NumberInt("5") + } + ], + links: "https://www.ebay.com", + name: "eBay product information task", + outputParameters: [ + { + id: NumberInt("0"), + name: "product name", + desc: "", + type: "string", + exampleValue: "HP Laptop Computer ProBook 11 G1 Touchscreen Windows 11 Core i3 8GB 180GB SSDOpens in a new window or tab" + }, + { + id: NumberInt("1"), + name: "product address", + desc: "", + type: "string", + exampleValue: "https://www.ebay.com/itm/324106350107?epid=218948554&hash=item4b763e6e1b:g:7sMAAOSwlNtjyCGJ&amdata=enc%3AAQAHAAAA0Kv%2BWjTheQ9TMxWam%2Bo22kbG%2BOLTP0KOrmksUtV0QA2U8RQGCHObZGbCC8FVmUW8mzqL3dLUpUjpqSjvxhAyU1CnK60E3Z0bmO5r3JO3WlCLGTKPlvYplfZGxFLAwVrO0jijP34ub8sKMs5F8LliIgnnvAJpbmdd0O4T0fLanDTOvXBpj4ri7s%2BmsD3XVx6qJ4L0Oo%2FEIyFJJfkwQ%2FZNwlu3pSJZdsKPs%2BsDkr25tBFdH6hF49qIF42RHFbVKOc5O5so7hHSAhFGONNiXmWPtbo%3D%7Ctkp%3ABFBMlP6H-MJh" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63dfd3c4869cb52a8a8f6eab"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[5]/div[1]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "已保存" + }, + { + num: NumberInt("1"), + value: "主页" + }, + { + num: NumberInt("2"), + value: "电子产品展开: 电子产品最受欢迎类别手机、智能电话智能手表电脑、平板电脑及网络硬件数码相机视频游戏、游戏机便携式音响、耳机电视、视频、家用音响翻新技术更多类别苹果三星小米微软戴尔索尼任天堂汽车电子设备、GPS\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("3"), + value: "时尚展开: 时尚最受欢迎类别男装男鞋女装女鞋手表、零配件珠宝首饰女士箱包男士配饰更多类别阿迪达斯Champion耐克卡西欧西铁城古驰雷朋拉夫劳伦\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("4"), + value: "保健、美容展开: 保健、美容最受欢迎类别护肤品化妆品香水沐浴、身体护理护发、造型剃须、脱毛口腔护理保健品更多类别维生素、膳食补充视力保健美甲、指甲护理海蓝之谜SK-II雅诗兰黛飞利浦戴森吹风机\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("5"), + value: "体育运动展开: 体育运动最受欢迎类别骑行健身、跑步、瑜伽健身科技钓鱼露营、徒步高尔夫团体运动狩猎更多类别水上运动冬季运动网球游泳GPS、运动手表佳明颂拓\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("6"), + value: "收藏品、艺术品展开: 收藏品、艺术品最受欢迎类别体育集换卡及配件古董运动纪念品烟草动作玩偶硬币、纸币压铸车模、玩具车军用物品更多类别拼装玩具玩偶、玩具熊笔、书写用具陶瓷装饰性收藏品迪士尼藏品漫画艺术印刷品\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("7"), + value: "商业、工业用品展开: 商业、工业用品最受欢迎类别医疗保健、口腔护理电子设备及用品数控机、金工及制造自动化控制设备重型设备零件轻型工业工具测试、测量及检测设备更多类别包装、运输办公用品及设备印刷、平面艺术餐厅、餐饮服务维修、安全设备零售、服务材料处理\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("8"), + value: "家居园艺展开: 家居园艺最受欢迎类别厨房小家电吸尘器旅行、行李箱包玩具、爱好戴森iRobot新秀丽乐高更多类别凯膳怡Ninja途明Nest婴儿用品家居装修智能家居工具、车间设备\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("9"), + value: "海淘展开: 海淘海淘主页收藏品频道运输俱乐部\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("10"), + value: "车辆展开: 车辆汽车汽车及卡车零件工具、用品涡轮增压器服装、商品减震器发动机进气系统复古单品摩托车和特惠活动摩托车零件车身、车架发动机和零件配件排气系统轮辋超值特价\n\n\n\n\n\n\n\n\n\n" + }, + { + num: NumberInt("11"), + value: "超值特价" + }, + { + num: NumberInt("12"), + value: "更多 展开: 更多电子产品时尚保健、美容体育运动收藏品、艺术品商业、工业用品家居园艺海淘车辆超值特价" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + } + ], + links: "https://www.ebay.com", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "已保存" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e0c181c85da553b7a9d4d2"), + containJudge: false, + desc: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462", + links: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]/div[2]/div[1]/canvas[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]/div[2]/div[1]/canvas[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462" + } + ], + links: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462", + name: "300字作文", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "" + }, + { + id: NumberInt("2"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "" + }, + { + id: NumberInt("3"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "" + } + ], + url: "https://wenku.baidu.com/view/291a3ff982d049649b6648d7c1c708a1284a0ad9.html?fr=hp_doclist&_wkts_=1675673791462" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e0c2a8c85da553b7a9d4d4"), + containJudge: false, + desc: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[2]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n\n \n \n \n 小学教师家访记录内容整理 \n \n1.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,但是这孩子却非常的粗心,受到一点打击就会掉眼泪,内心比较脆弱。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。在家与妈妈相处的时间较多,不经常与周围的孩子玩耍,可能内心脆弱与这个有关。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n2.家访记录: \n    该孩子在校是个有礼貌的孩子,但脾气较暴躁,虽然脑袋灵活,但学习习惯不是很好,比较拖拉。 \n孩子的父母很负责,对孩子的学习抓的很紧,但孩子在生活上不太善于收拾,学习时也总是注意力分散,思想不容易集中,完成作业自觉性不够,需要家长守着。 \n家长希望老师多给孩子鼓励,作业时多盯紧她,家长也会积极配合老师帮助孩子改正缺点,养成良好的学习习惯。 \n \n 3.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,喜欢体育活动,在活动中有不俗的表现。但是这孩子却非常的粗心。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。劳逸结合,积极参加体育锻炼和适当地实践活动。做完作业后,最大的兴趣就是看课外书,父母如果强加一些练习给他,他就非常的不情愿。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n4.家访记录: \n    该生在校表现较好,能尊敬老师,团结同学,按要求完成各项任务,但是该孩子学习基础很差,各科学习都相当吃力,上课也经常开小差,作业不能独立完成。 \n该生在年龄上比其他学生要小的多,因此学习比较吃力,相对有些难度的习题他就无从下手。不过该孩子平时都能按时完成各科作业,其爸爸每天也会耐心地辅导她,渐渐地她对学习也产生了兴趣。 \n    家长对学校和老师的工作很满意,感谢老师们为孩子的耐心付出,希望在今后能继续加强对孩子的学习的辅导,让孩子能缩小与同学的差距。   \n5.家访记录: \n    该生性格内向、文静,能尊重老师、团结同学。在学习方面,学习态度端正,学习基础较好,但课外知识积累不够。 \n该生在家能帮助父母做一些力所能及的事。不过父母对其学习不够重视,不会着重培养她的爱好、兴趣。虽然她很努力学习,成绩也优异,但是思维不够活跃。 \n     家长表示一定积极支持学校和老师的工作,配合老师共同管理好孩子的学习和生活。   \n6.家访记录: \n\n \n \n\n \n " + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" + } + ], + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + name: "小学教师家访记录", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "\n\n \n \n \n 小学教师家访记录内容整理 \n \n1.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,但是这孩子却非常的粗心,受到一点打击就会掉眼泪,内心比较脆弱。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。在家与妈妈相处的时间较多,不经常与周围的孩子玩耍,可能内心脆弱与这个有关。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n2.家访记录: \n    该孩子在校是个有礼貌的孩子,但脾气较暴躁,虽然脑袋灵活,但学习习惯不是很好,比较拖拉。 \n孩子的父母很负责,对孩子的学习抓的很紧,但孩子在生活上不太善于收拾,学习时也总是注意力分散,思想不容易集中,完成作业自觉性不够,需要家长守着。 \n家长希望老师多给孩子鼓励,作业时多盯紧她,家长也会积极配合老师帮助孩子改正缺点,养成良好的学习习惯。 \n \n 3.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,喜欢体育活动,在活动中有不俗的表现。但是这孩子却非常的粗心。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。劳逸结合,积极参加体育锻炼和适当地实践活动。做完作业后,最大的兴趣就是看课外书,父母如果强加一些练习给他,他就非常的不情愿。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n4.家访记录: \n    该生在校表现较好,能尊敬老师,团结同学,按要求完成各项任务,但是该孩子学习基础很差,各科学习都相当吃力,上课也经常开小差,作业不能独立完成。 \n该生在年龄上比其他学生要小的多,因此学习比较吃力,相对有些难度的习题他就无从下手。不过该孩子平时都能按时完成各科作业,其爸爸每天也会耐心地辅导她,渐渐地她对学习也产生了兴趣。 \n    家长对学校和老师的工作很满意,感谢老师们为孩子的耐心付出,希望在今后能继续加强对孩子的学习的辅导,让孩子能缩小与同学的差距。   \n5.家访记录: \n    该生性格内向、文静,能尊重老师、团结同学。在学习方面,学习态度端正,学习基础较好,但课外知识积累不够。 \n该生在家能帮助父母做一些力所能及的事。不过父母对其学习不够重视,不会着重培养她的爱好、兴趣。虽然她很努力学习,成绩也优异,但是思维不够活跃。 \n     家长表示一定积极支持学校和老师的工作,配合老师共同管理好孩子的学习和生活。   \n6.家访记录: \n\n \n \n\n \n " + } + ], + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e0c4dbc85da553b7a9d4d5"), + containJudge: false, + desc: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[2]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n\n \n \n \n 小学教师家访记录内容整理 \n \n1.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,但是这孩子却非常的粗心,受到一点打击就会掉眼泪,内心比较脆弱。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。在家与妈妈相处的时间较多,不经常与周围的孩子玩耍,可能内心脆弱与这个有关。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n2.家访记录: \n    该孩子在校是个有礼貌的孩子,但脾气较暴躁,虽然脑袋灵活,但学习习惯不是很好,比较拖拉。 \n孩子的父母很负责,对孩子的学习抓的很紧,但孩子在生活上不太善于收拾,学习时也总是注意力分散,思想不容易集中,完成作业自觉性不够,需要家长守着。 \n家长希望老师多给孩子鼓励,作业时多盯紧她,家长也会积极配合老师帮助孩子改正缺点,养成良好的学习习惯。 \n \n 3.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,喜欢体育活动,在活动中有不俗的表现。但是这孩子却非常的粗心。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。劳逸结合,积极参加体育锻炼和适当地实践活动。做完作业后,最大的兴趣就是看课外书,父母如果强加一些练习给他,他就非常的不情愿。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n4.家访记录: \n    该生在校表现较好,能尊敬老师,团结同学,按要求完成各项任务,但是该孩子学习基础很差,各科学习都相当吃力,上课也经常开小差,作业不能独立完成。 \n该生在年龄上比其他学生要小的多,因此学习比较吃力,相对有些难度的习题他就无从下手。不过该孩子平时都能按时完成各科作业,其爸爸每天也会耐心地辅导她,渐渐地她对学习也产生了兴趣。 \n    家长对学校和老师的工作很满意,感谢老师们为孩子的耐心付出,希望在今后能继续加强对孩子的学习的辅导,让孩子能缩小与同学的差距。   \n5.家访记录: \n    该生性格内向、文静,能尊重老师、团结同学。在学习方面,学习态度端正,学习基础较好,但课外知识积累不够。 \n该生在家能帮助父母做一些力所能及的事。不过父母对其学习不够重视,不会着重培养她的爱好、兴趣。虽然她很努力学习,成绩也优异,但是思维不够活跃。 \n     家长表示一定积极支持学校和老师的工作,配合老师共同管理好孩子的学习和生活。   \n6.家访记录: \n\n \n \n\n \n " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]/div[2]/div[1]/canvas[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" + } + ], + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + name: "小学教师家访记录", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "\n\n \n \n \n 小学教师家访记录内容整理 \n \n1.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,但是这孩子却非常的粗心,受到一点打击就会掉眼泪,内心比较脆弱。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。在家与妈妈相处的时间较多,不经常与周围的孩子玩耍,可能内心脆弱与这个有关。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n2.家访记录: \n    该孩子在校是个有礼貌的孩子,但脾气较暴躁,虽然脑袋灵活,但学习习惯不是很好,比较拖拉。 \n孩子的父母很负责,对孩子的学习抓的很紧,但孩子在生活上不太善于收拾,学习时也总是注意力分散,思想不容易集中,完成作业自觉性不够,需要家长守着。 \n家长希望老师多给孩子鼓励,作业时多盯紧她,家长也会积极配合老师帮助孩子改正缺点,养成良好的学习习惯。 \n \n 3.家访记录: \n     该孩子在校表现较很好,上进心很强,学习成绩优异,上课能积极回答问题,喜欢体育活动,在活动中有不俗的表现。但是这孩子却非常的粗心。 \n该生在家尊重长辈,关心他人。主动为父母做一些力所能及的事情,也适当地做一些家务。在学习方面比较主动,主动完成各科作业。劳逸结合,积极参加体育锻炼和适当地实践活动。做完作业后,最大的兴趣就是看课外书,父母如果强加一些练习给他,他就非常的不情愿。 \n    家长对孩子在学校的健康成长很欣慰,认为孩子在学校各方面都得到了锻炼,希望学校今后也能多组织各种活动,让孩子们能从活动中得到锻炼,培养孩子健康人格。   \n4.家访记录: \n    该生在校表现较好,能尊敬老师,团结同学,按要求完成各项任务,但是该孩子学习基础很差,各科学习都相当吃力,上课也经常开小差,作业不能独立完成。 \n该生在年龄上比其他学生要小的多,因此学习比较吃力,相对有些难度的习题他就无从下手。不过该孩子平时都能按时完成各科作业,其爸爸每天也会耐心地辅导她,渐渐地她对学习也产生了兴趣。 \n    家长对学校和老师的工作很满意,感谢老师们为孩子的耐心付出,希望在今后能继续加强对孩子的学习的辅导,让孩子能缩小与同学的差距。   \n5.家访记录: \n    该生性格内向、文静,能尊重老师、团结同学。在学习方面,学习态度端正,学习基础较好,但课外知识积累不够。 \n该生在家能帮助父母做一些力所能及的事。不过父母对其学习不够重视,不会着重培养她的爱好、兴趣。虽然她很努力学习,成绩也优异,但是思维不够活跃。 \n     家长表示一定积极支持学校和老师的工作,配合老师共同管理好孩子的学习和生活。   \n6.家访记录: \n\n \n \n\n \n " + }, + { + id: NumberInt("1"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "" + } + ], + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e0c9ebc85da553b7a9d4d7"), + containJudge: false, + desc: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "内容推荐小学家访记录大全100篇标准版.doc小学家访记录大全100篇免费下载,爱问旗下办公文档资料分享平台,支持在线下载,提供企业各类章程/制度/计划/方案等范本模板,小学家访记录大全100篇,任意编辑打印,提升办公效率!广告查看全文 " + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" + } + ], + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + name: "小学教师家访记录", + outputParameters: [ + { + id: NumberInt("0"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "内容推荐小学家访记录大全100篇标准版.doc小学家访记录大全100篇免费下载,爱问旗下办公文档资料分享平台,支持在线下载,提供企业各类章程/制度/计划/方案等范本模板,小学家访记录大全100篇,任意编辑打印,提升办公效率!广告查看全文 " + } + ], + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e103f8869cb52a8a8f6eb2"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "test" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5"), + NumberInt("6") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "200 真正的 METRIX 测试棒(4 盒 50 件)有效期至 2024 年 6 月或更好" + }, + { + num: NumberInt("1"), + value: "任天堂 WII 游戏 批量 您选择 购买 2 获得 1 50% 关闭游戏已测试 批量 2" + }, + { + num: NumberInt("2"), + value: "Saliva Drug Test 3 in 1 Testing Kit Home Oral Test Cannabis Cocaine Heroin Kits" + }, + { + num: NumberInt("3"), + value: "300 真正的 METRIX 测试棒(6 盒 50 件)有效期至 2024 年 6 月或更好" + }, + { + num: NumberInt("4"), + value: "任天堂 64 n64 原装视频游戏墨盒 * 正品/清洁/测试 *" + }, + { + num: NumberInt("5"), + value: "Various Artists Vinyl: Check: New Signals and Recordings to Test (Schallplatte)" + }, + { + num: NumberInt("6"), + value: "雅达利 2600 游戏机 ( 多件 ) 清洁测试标签变化自选 favs 组合 S & H" + }, + { + num: NumberInt("7"), + value: "Freestyle Lite 100 试纸 * * 美国卖家 * * 免运费" + }, + { + num: NumberInt("8"), + value: "Gendermaker 性别预言家测试。男孩或女孩婴儿性别预测测试。" + }, + { + num: NumberInt("9"), + value: "任天堂 Wii 游戏 R-z 测试巨大的选择散装折扣" + }, + { + num: NumberInt("10"), + value: "100 x Urine Test Strips 10 Parameter Urine Reagent Tests Diabetes, UTI, pH &More" + }, + { + num: NumberInt("11"), + value: "任天堂 DS 游戏-各种 测试" + }, + { + num: NumberInt("12"), + value: "Contour Next 试纸 血糖 50 每盒有效期至 2024 年 01 月 最快发货" + }, + { + num: NumberInt("13"), + value: "Drug Testing Kit Home Urine Strip Tests for Cannabis Cocaine Opiate Speed + more" + }, + { + num: NumberInt("14"), + value: "Sculptnation TEST BOOST Max 男式睾酮力量肌肉性力量" + }, + { + num: NumberInt("15"), + value: "Blood Type Test Kit Home Blood Group Testing Kit A, B, O Rhesus D Eldoncard - CE" + }, + { + num: NumberInt("16"), + value: "任天堂 DS 和 3DS 游戏系列您挑选 批量 更新 2/4" + }, + { + num: NumberInt("17"), + value: "600 真正的 METRIX 测试棒(12 盒 50 件)有效期至 2024 年 6 月或更好" + }, + { + num: NumberInt("18"), + value: "NEW STOCK! - Skylanders Imaginators Figures | Crystals | Chests - TESTED - RESET" + }, + { + num: NumberInt("19"), + value: "30 Pregnancy Test Strips Ultra Early 10mIU HCG Urine Home Testing Kit One Step" + }, + { + num: NumberInt("20"), + value: "TESTARTIKEL - BITTE NICHT KAUFEN" + }, + { + num: NumberInt("21"), + value: "Ovulation and Pregnancy Test Strips Ultra Early Home Urine Tests One Step Kit" + }, + { + num: NumberInt("22"), + value: "ClearClick 视频到数字转换器 2.0 第二代,二手已测试工作正常" + }, + { + num: NumberInt("23"), + value: "Fishlund PE 编织鱼线 6 -300 磅测试 4 8 股耐磨" + }, + { + num: NumberInt("24"), + value: "Blood Glucose Sugar Test Strips - SD Codefree - Various Pack Sizes Available" + }, + { + num: NumberInt("25"), + value: "索尼 PlayStation 2 ps2 完整带盒游戏完整已测试免运费挑选和选择" + }, + { + num: NumberInt("26"), + value: "Test Cart (Vectrex)" + }, + { + num: NumberInt("27"), + value: "PlayStation 2 (ps2) 游戏已测试 ! 挑选和选择! 许多伟大的游戏 ! 更新 10/1" + }, + { + num: NumberInt("28"), + value: "Test Bank 病理生理学 8 版 McCance护理学习指南iPDF" + }, + { + num: NumberInt("29"), + value: "One Step Underactive Thyroid TSH Blood Test - For Hypothyroidism" + }, + { + num: NumberInt("30"), + value: "30pcs 4mm 可堆叠香蕉型插头测试引线套件带鳄鱼夹背部探头" + }, + { + num: NumberInt("31"), + value: "80 pH Test Strips Litmus Test Paper Full Range 1-14 pH Acidic Alkaline Indicator" + }, + { + num: NumberInt("32"), + value: "Mess Test Tapes: Pegel W&F Azimut Dolby Level Frequenzgang Kopfhöhen calibration" + }, + { + num: NumberInt("33"), + value: "Kirby's Dream Land 2 GBC 游戏卡 适用于 GameBoy Color 16 位游戏已测试并保存" + }, + { + num: NumberInt("34"), + value: "任天堂 64 扩展 Pak nus-007 n64 高分辨率包测试清洗 Zelda" + }, + { + num: NumberInt("35"), + value: "任天堂 Gameboy Advance 墨盒测试" + }, + { + num: NumberInt("36"), + value: "任天堂 DS Lite 控制台带充电器自选颜色美国卖家已测试正常工作" + }, + { + num: NumberInt("37"), + value: "#23。 旧经典 DVD #2 批量挑选 4 美元平装运送" + }, + { + num: NumberInt("38"), + value: "Contour Next 100 试纸 * * 美国卖家 * * 免运费" + }, + { + num: NumberInt("39"), + value: "Male Fertility Sperm Concentration Test, Active Count Kit - One Step" + }, + { + num: NumberInt("40"), + value: "XBOX One 游戏!! 经过所有测试,状况良好! 许多很棒的头衔!" + }, + { + num: NumberInt("41"), + value: "OBD2 Breakout Box OBDII 协议探测器 CAN 测试箱汽车突破测试仪 " + }, + { + num: NumberInt("42"), + value: "H-M 便宜游戏 (PlayStation 2) ps2 圆盘只测试" + }, + { + num: NumberInt("43"), + value: "Prima PSA Home Prostate Disorder Test - CE Marked - Results In 10 Mins" + }, + { + num: NumberInt("44"), + value: "戴尔 Latitude E5450 14 英寸笔记本电脑英特尔酷睿 i5 8GB 500GB 硬盘 Windows 10 - 已测试" + }, + { + num: NumberInt("45"), + value: "索尼 PlayStation 3 控制台 ps3 Slim 黑色捆绑出售物品控制器和线测试" + }, + { + num: NumberInt("46"), + value: "新物品刊登Doctor Who BBC EDA/PDA Books" + }, + { + num: NumberInt("47"), + value: "Johnny Marr Bernard Sumner 电子 - Getting Away With It 测试按压乙烯基" + }, + { + num: NumberInt("48"), + value: "Colin Macleod Test Pressing Vinyl: Hold Fast" + }, + { + num: NumberInt("49"), + value: "TEST [PC] Steam DIGITAL Key" + }, + { + num: NumberInt("50"), + value: "D-G 便宜游戏 (PlayStation 2) ps2 圆盘只测试" + }, + { + num: NumberInt("51"), + value: "雅达利 2600 游戏收藏已清洁测试工作陷阱 Frogger Adventure" + }, + { + num: NumberInt("52"), + value: "One Touch Verio 50 条试纸 * * 美国卖家 * * 免运费" + }, + { + num: NumberInt("53"), + value: "NES 游戏 A-G (任天堂 NES) 测试清洗和抛光墨盒只有" + }, + { + num: NumberInt("54"), + value: "SEGA Genesis 游戏 S-Z 测试" + }, + { + num: NumberInt("55"), + value: "100条真正的Metrix血糖糖尿病试纸有效期至2024年5月31日" + }, + { + num: NumberInt("56"), + value: "kirby 任天堂 GameBoy GBA 测试 korokoro kagami 镜子 Kirby's Adventure" + }, + { + num: NumberInt("57"), + value: "4 x First Response Ultra Early Result Pregnancy Test Kits 2 Packs of 2 Tests" + }, + { + num: NumberInt("58"), + value: "SMD IC 测试钩夹迷你抓取器跳线探头适用于逻辑分析仪" + }, + { + num: NumberInt("59"), + value: "Coeliac Test Celiac Disease Wheat Gluten Intolerance Allergy Food Kit" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "test", + value: "test" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "200 真正的 METRIX 测试棒(4 盒 50 件)有效期至 2024 年 6 月或更好" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e2155b869cb52a8a8f6ebc"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[5]/div[1]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Favorites" + }, + { + num: NumberInt("1"), + value: "Home" + }, + { + num: NumberInt("2"), + value: "ElectronicsExpand: ElectronicsMost popular categoriesSmartphones and accessoriesVideo games and consolesComputers and tabletsCameras and photosCamera dronesRefurbishedSmart homeMore categoriesAppleSamsungPortable audio and headphonesEmerging brandsSmart watchesDealsSell on eBay" + }, + { + num: NumberInt("3"), + value: "MotorsExpand: MotorsCarAuto and truck partsTools and suppliesTurbo chargersClothing and merchandiseShock absorbersElectronic and GPSAir intakeVintage piecesMotorcycle and moreMotorcycle partsBody and frameEngines and partsAccessoriesExhausts and systemsRimsDealsSell on eBay" + }, + { + num: NumberInt("4"), + value: "FashionExpand: FashionMost popular categoriesFootwearWomen's clothingFootwear for womenMen's clothingMen's footwearWatchesJewelryMore categoriesAccessories for menAccessories for womenBags and wallets for womenMens sunglassesWomens sunglasessSneakersDealsSell on eBay" + }, + { + num: NumberInt("5"), + value: "Collectibles and ArtExpand: Collectibles and ArtMost popular categoriesCollectiblesArtAction figuresCartoon charactersMovie and TV charactersDiecastMusical memorabiliaMore categoriesSports memorabiliaTrading card gamesAntiquesComicsFunko popStar WarsDealsSell on eBay" + }, + { + num: NumberInt("6"), + value: "SportsExpand: SportsMost popular categoriesCyclingFitness, running and yogaFitness TechFishingCampingScootersTeam sportsMore categoriesWatersportsWinter sportsBox and MMASwimmingGPS & Running WatchesGarminDealsSell on eBay" + }, + { + num: NumberInt("7"), + value: "Health & BeautyExpand: Health & BeautyMost popular categoriesBeautyMakeupHealthK-BeautyManicure and pedicureHair productsSkin productsOrthopedic productsMore categoriesVitamins and food supplementsShaving and waxingBath and personal hygieneOral hygieneMassagersDealsSell on eBay" + }, + { + num: NumberInt("8"), + value: "Industrial equipmentExpand: Industrial equipmentMost popular categoriesDental healthcareElectronic equipment and suppliesMetallurgy and manufacturingMotors and industrial automationHeavy equipment partsLight industrial toolsInspection, measurement and testing equipmentMore categoriesPacking and shippingOffice supplies and equipmentPrinting and graphic artsRestaurants and food serviceMaintenance and safetyRetail and servicesDealsSell on eBay" + }, + { + num: NumberInt("9"), + value: "Home & GardenExpand: Home & GardenMost popular categoriesWorkshop Tools and EquipmentPatio, garden and outdoorsHome improvementKitchen, dining and barLamps, lights and fansInterior decorationHome organizationHome appliancesMore categoriesToysPetsCraftsArt suppliesMusical instrumentsJewelry and beadsDealsSell on eBay" + }, + { + num: NumberInt("10"), + value: "Deals" + }, + { + num: NumberInt("11"), + value: "SellExpand: SellHow to create a listingJoin our growth programSeller centerSeller updatesSeller customer serviceeBay managed paymentsLearn to selleBay storeseBay feesSelling limits" + }, + { + num: NumberInt("12"), + value: "More Expand: MoreElectronicsMotorsFashionCollectibles and ArtSportsHealth & BeautyIndustrial equipmentHome & GardenDealsSell" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "123" + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("4"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "123", + value: "123" + } + ], + links: "https://www.ebay.com", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "Favorites" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63e52ca5dcb6508b71d51b14"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("9"), + NumberInt("13") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "//*[contains(@class, \"current\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: true, + xpath: "//*[contains(@class, \"current\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("0"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2021-11-25 15:50:06" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "来源:最高人民法院" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【基本案情】" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【裁判结果】" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【典型意义】" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para9_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[6]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "标题", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "时间", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "来源", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2021-11-25 15:50:06" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "内容", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "来源:最高人民法院" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para14_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n \t\t首页 >审判 > 典型案例\n \n \n \n 石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案\n \n \n\t\t\t \n 2021-11-25 15:50:06 | 来源:最高人民法院 \n \n \n \n \n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 \n \n\t\t\t\n\t\t\t\n\t\t\t\n \n\t\t\t\t\n 责任编辑:于子平\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n \n \n \t\n \t相关新闻:\n \n \t碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案子女不履行赡养义务可作为公益诉讼立案受理吗?潮州饶平法院宣判一起刑附民公益诉讼案\n中国生物多样性保护与绿色发展基金会诉秦皇岛方圆包装玻璃有限公司大气环境责任纠...岳阳法检两院环境公益诉讼座谈会在君山召开检方规范个人信息保护公益诉讼案件办理重庆江津法院一审宣判一起涉古树公益诉讼案 \n \n \n \n \n \n \n \n \n\t\t\t\t\t\t“黑物流”刘晓强等人敲..\n\t\t\t\t\t\t程海明等人敲诈勒索企业..\n\t\t\t\t\t\t华士中等人火车站敲诈勒..\n\t\t\t\t\t\t王维刚等人电子市场“软..\n\t\t\t\t\t\t房屋“黑中介”刘康等人..\n\t\t\t\t\t\t陈海涛等人组织、领导、.. \n \n " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para16_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n 石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案\n \n " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para17_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2021-11-25 15:50:06 | 来源:最高人民法院 " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para18_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("1"), + index: NumberInt("9"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("13"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[2]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("3") + } + }, + { + id: NumberInt("3"), + index: NumberInt("14"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[2]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("4"), + index: NumberInt("15"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("17"), + NumberInt("16") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("16"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: 0.5, + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("17"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("18"), + NumberInt("19") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("18"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("8"), + index: NumberInt("19"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para10_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para9_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18 | 来源:最高人民法院 " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (一)基本案情" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (二)裁判结果" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (三)典型意义" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[6]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[7]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p[8]", + exampleValues: [ + { + num: NumberInt("0"), + value: " " + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("9"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("15"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法院", + outputParameters: [ + { + id: NumberInt("0"), + name: "para10_text", + desc: "", + type: "string", + exampleValue: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + }, + { + id: NumberInt("1"), + name: "para9_text", + desc: "", + type: "string", + exampleValue: "2020-07-27 16:44:18 | 来源:最高人民法院 " + }, + { + id: NumberInt("2"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "  (一)基本案情" + }, + { + id: NumberInt("3"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。" + }, + { + id: NumberInt("4"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "  (二)裁判结果" + }, + { + id: NumberInt("5"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。" + }, + { + id: NumberInt("6"), + name: "para6_text", + desc: "", + type: "string", + exampleValue: "  (三)典型意义" + }, + { + id: NumberInt("7"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。" + }, + { + id: NumberInt("8"), + name: "para7_text", + desc: "", + type: "string", + exampleValue: "" + }, + { + id: NumberInt("9"), + name: "para8_text", + desc: "", + type: "string", + exampleValue: " " + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63eca628c85da553b7a9d502"), + containJudge: false, + desc: "https://modelzoo.co/", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("15"), + url: "https://modelzoo.co/", + links: "https://modelzoo.co/", + scrollType: "2", + scrollCount: NumberInt("2") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[1]/div[1]/div[1]/div[3]/div/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para1_linktext", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "OpenPose 24000OpenPose represents the first real-time multi-person system to jointly detect human body, hand, and facial keypoints (in total 130 keypoints) on single images.\nCaffeCV" + }, + { + num: NumberInt("1"), + value: "Mask R-CNN 21600This is an implementation of Mask R-CNN on Python 3, Keras, and TensorFlow. The model generates bounding boxes and segmentation masks for each instance of an object in the image. It's based on Feature Pyramid Network (FPN) and a ResNet101 backbone.\nKerasCV" + }, + { + num: NumberInt("2"), + value: "detectron2 20700Detectron2 is FAIR's next-generation research platform for object detection and segmentation.\nPyTorchCV" + }, + { + num: NumberInt("3"), + value: "ray 20200A fast and simple framework for building and running distributed applications. Ray is packaged with RLlib, a scalable reinforcement learning library, and Tune, a scalable hyperparameter tuning library. ray.io\nPyTorchRL" + }, + { + num: NumberInt("4"), + value: "MMDetection 19500MMDetection is an open source object detection toolbox, a part of the OpenMMLab project.\nPyTorchCV" + }, + { + num: NumberInt("5"), + value: "pytorch-CycleGAN-and-pix2pix 17400PyTorch implementation for both unpaired and paired image-to-image translation.\nPyTorchCVNLPGenerative" + }, + { + num: NumberInt("6"), + value: "Awesome pytorch list 12983A comprehensive list of pytorch related content on github,such as different models,implementations,helper libraries,tutorials etc.PyTorchCVNLPGenerativeRLUnsupervisedAudioGraphSelf-SupervisedHealth" + }, + { + num: NumberInt("7"), + value: "StyleGAN 12400StyleGAN — Official TensorFlow Implementation (https://arxiv.org/abs/1812.04948) with support for multi-GPU training.\nTensorFlowGenerative" + }, + { + num: NumberInt("8"), + value: "PyTorch-GAN 11900PyTorch implementations of Generative Adversarial Networks.\nPyTorchGenerative" + }, + { + num: NumberInt("9"), + value: "best of ml python 10966 A ranked list of awesome machine learning Python libraries. Updated weekly.JAXCVNLPGenerativeRLUnsupervisedAudioGraphSelf-SupervisedHealth" + }, + { + num: NumberInt("10"), + value: "FastPhotoStyle 10800A Closed-form Solution to Photorealistic Image Stylization\nPyTorchCV" + }, + { + num: NumberInt("11"), + value: "albumentations 10100Fast image augmentation library.\nPyTorchCV" + }, + { + num: NumberInt("12"), + value: "MathJax 8905Beautiful and accessible math in all browsersJAXNLPAudio" + }, + { + num: NumberInt("13"), + value: "maskrcnn-benchmark 8800Fast, modular reference implementation of Instance Segmentation and Object Detection algorithms in PyTorch.\nPyTorchCV" + }, + { + num: NumberInt("14"), + value: "vid2vid 8000Pytorch implementation of our method for high-resolution (e.g. 2048x1024) photorealistic video-to-video translation.\nPyTorchNLP" + }, + { + num: NumberInt("15"), + value: "annotated_deep_learning_paper_implementations 7994 50! Implementations/tutorials of deep learning papers with side-by-side notes ; including transformers (original, xl, switch, feedback, vit, ...), optimizers (adam, adabelief, ...), gans(cyclegan, stylegan2, ...), reinforcement learning (ppo, dqn), capsnet, distillation, ... PyTorchCVNLPGenerativeRLGraph" + }, + { + num: NumberInt("16"), + value: "tensorboard-pytorch 7300This module saves PyTorch tensors in tensorboard format for inspection. Currently supports scalar, image, audio, histogram features in tensorboard.\nPyTorchCVAudio" + }, + { + num: NumberInt("17"), + value: "deep-image-prior 7200Image restoration with neural networks but without learning.\nPyTorchCV" + }, + { + num: NumberInt("18"), + value: "DCGAN-tensorflow 7000Tensorflow implementation of Deep Convolutional Generative Adversarial Networks which is a stabilize Generative Adversarial Networks.\nTensorFlowGenerative" + }, + { + num: NumberInt("19"), + value: "trax 6985Trax Deep Learning with Clear Code and SpeedJAXNLPGenerative" + }, + { + num: NumberInt("20"), + value: "faster-rcnn.pytorch 6900This project is a faster faster R-CNN implementation, aimed to accelerating the training of faster R-CNN object detection models. \nPyTorchCV" + }, + { + num: NumberInt("21"), + value: "YOLO TensorFlow ++ 6000TensorFlow implementation of 'YOLO: Real-Time Object Detection', with training and an actual support for real-time running on mobile devices.\nTensorFlowCV" + }, + { + num: NumberInt("22"), + value: "TTS 5900Deep learning for Text2Speech\nPyTorchNLPAudio" + }, + { + num: NumberInt("23"), + value: "Progressive Growing of GANs for Improved Quality, Stability, and Variation 5800We describe a new training methodology for generative adversarial networks. The key idea is to grow both the generator and discriminator progressively: starting from a low resolution, we add new layers that model increasingly fine details as training progresses.\nTensorFlowGenerative" + }, + { + num: NumberInt("24"), + value: "pix2pixHD 5700Synthesizing and manipulating 2048x1024 images with conditional GANs tcwang0509.github.io/pix2pixHD \nPyTorchCVGenerative" + }, + { + num: NumberInt("25"), + value: "Open-source (MIT) Neural Machine Translation (NMT) System 5600This is a PytorchPyTorchNLP" + }, + { + num: NumberInt("26"), + value: "einops 5311Deep learning operations reinvented (for pytorch, tensorflow, jax and others)JAXCVNLPGenerative" + }, + { + num: NumberInt("27"), + value: "Deep Reinforcement Learning for Keras 5300Keras-rl implements some state-of-the art deep reinforcement learning algorithms in Python and seamlessly integrates with the deep learning library Keras.\nKerasRL" + }, + { + num: NumberInt("28"), + value: "Pytorch UNet 5285PyTorch implementation of the U-Net for image semantic segmentation with high quality imagesPyTorchCVHealth" + }, + { + num: NumberInt("29"), + value: "Wavenet 5200This is a TensorFlow implementation of the WaveNet generative neural network architecture for audio generation.\nTensorFlowAudio" + }, + { + num: NumberInt("30"), + value: "Yet Another EfficientDet Pytorch 5031The pytorch re-implement of the official efficientdet with SOTA performance in real time and pretrained weights.PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("31"), + value: "External Attention pytorch 5010 Pytorch implementation of various Attention Mechanisms, MLP, Re-parameter, Convolution, which is helpful to further understand papers.PyTorchCVGenerative" + }, + { + num: NumberInt("32"), + value: "stargan 5009StarGAN - Official PyTorch Implementation (CVPR 2018)PyTorchCVNLPGenerative" + }, + { + num: NumberInt("33"), + value: "StarGAN 5000StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Tranlsation.\nPyTorchCVGenerative" + }, + { + num: NumberInt("34"), + value: "espnet 5000End-to-End Speech Processing Toolkit espnet.github.io/espnet\nPyTorchNLPAudio" + }, + { + num: NumberInt("35"), + value: "Augmentor 4700Image augmentation library in Python for machine learning. http://augmentor.readthedocs.io\nPyTorchCV" + }, + { + num: NumberInt("36"), + value: "sketch code 4633Keras model to generate HTML code from hand-drawn website mockups. Implements an image captioning architecture to drawn source images.TensorFlowCVNLP" + }, + { + num: NumberInt("37"), + value: "semantic-segmentation-pytorch 4300Pytorch implementation for Semantic Segmentation/Scene Parsing on MIT ADE20K dataset\nPyTorchCV" + }, + { + num: NumberInt("38"), + value: "Deep-Reinforcement-Learning-Algorithms-with-PyTorch 4300This repository contains PyTorch implementations of deep reinforcement learning algorithms.\nPyTorchRL" + }, + { + num: NumberInt("39"), + value: "semantic segmentation pytorch 4294Pytorch implementation for Semantic Segmentation/Scene Parsing on MIT ADE20K datasetPyTorchCV" + }, + { + num: NumberInt("40"), + value: "pytorch YOLOv4 3939PyTorch ,ONNX and TensorRT implementation of YOLOv4PyTorchCVGenerative" + }, + { + num: NumberInt("41"), + value: "pytorch seq2seq 3762Tutorials on implementing a few sequence-to-sequence (seq2seq) models with PyTorch and TorchText.PyTorchNLPGenerative" + }, + { + num: NumberInt("42"), + value: "AnimeGAN 3710A Tensorflow implementation of AnimeGAN for fast photo animation ! This is the Open source of the paper AnimeGAN: a novel lightweight GAN for photo animation, which uses the GAN framwork to transform real-world photos into anime images.TensorFlowCVGenerative" + }, + { + num: NumberInt("43"), + value: "Colornet 3600Neural Network to colorize grayscale images\nTensorFlowCV" + }, + { + num: NumberInt("44"), + value: "MMSegmentation 3600MMSegmentation is a semantic segmentation toolbox and benchmark, a part of the OpenMMLab project.\nPyTorchCV" + }, + { + num: NumberInt("45"), + value: "Image analogies 3500Generate image analogies using neural matching and blending.\nKerasCV" + }, + { + num: NumberInt("46"), + value: "stable baselines3 3380PyTorch version of Stable Baselines, reliable implementations of reinforcement learning algorithms. PyTorchNLPGenerativeRL" + }, + { + num: NumberInt("47"), + value: "flax 3286Flax is a neural network library for JAX that is designed for flexibility.JAXCVNLPAudioGraph" + }, + { + num: NumberInt("48"), + value: "pytorch semseg 3218Semantic Segmentation Architectures Implemented in PyTorchPyTorchCVNLP" + }, + { + num: NumberInt("49"), + value: "Fully Convolutional Networks for Semantic Segmentation 3200This is the reference implementation of the models and code for the fully convolutional networks (FCNs) in the PAMI FCN and CVPR FCN papers:CaffeCV" + }, + { + num: NumberInt("50"), + value: "tensorwatch 3200Debugging, monitoring and visualization for Deep Learning and Reinforcement Learning from Microsoft Research.\nPyTorchRL" + }, + { + num: NumberInt("51"), + value: "PyTorch-VAE 3200A Collection of Variational Autoencoders (VAE) in PyTorch.\nPyTorchGenerative" + }, + { + num: NumberInt("52"), + value: "pytorch yolo v3 3177A PyTorch implementation of the YOLO v3 object detection algorithmPyTorchCVNLP" + }, + { + num: NumberInt("53"), + value: "immutables 3127Annotation processor to create immutable objects and builders. Feels like Guava's immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations includedJAXNLP" + }, + { + num: NumberInt("54"), + value: "MMEditing 3100MMEditing is a image and video editing toolbox, a part of the OpenMMLab project.\nPyTorchCV" + }, + { + num: NumberInt("55"), + value: "WassersteinGAN 3000WassersteinGAN in pytorch. \nPyTorchGenerative" + }, + { + num: NumberInt("56"), + value: "stylegan2 pytorch 2938Simplest working implementation of Stylegan2, state of the art generative adversarial network, in Pytorch. Enabling everyone to experience disentanglementPyTorchCVNLPGenerative" + }, + { + num: NumberInt("57"), + value: "Colorful Image Colorization 2900Colorful Image ColorizationCaffeCV" + }, + { + num: NumberInt("58"), + value: "MUSE 2900Multilingual Unsupervised and Supervised Embeddings\nPyTorchUnsupervised" + }, + { + num: NumberInt("59"), + value: "EAST 2866A tensorflow implementation of EAST text detectorTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("60"), + value: "stargan v2 2855StarGAN v2 - Official PyTorch Implementation (CVPR 2020)PyTorchCVNLPGenerative" + }, + { + num: NumberInt("61"), + value: "DeepNLP models Pytorch 2817Pytorch implementations of various Deep NLP models in cs-224n(Stanford Univ)PyTorchNLPGenerative" + }, + { + num: NumberInt("62"), + value: "Chatbot 2800Implementation of \"A neural conversational model\"\nTensorFlowNLP" + }, + { + num: NumberInt("63"), + value: "pytorch-a2c-ppo-acktr 2800PyTorch implementation of Advantage Actor Critic (A2C), Proximal Policy Optimization (PPO) and Scalable trust-region method for deep reinforcement learning using Kronecker-factored approximation (ACKTR).\nPyTorchRL" + }, + { + num: NumberInt("64"), + value: "tensorflow internals 2794It is open source ebook about TensorFlow kernel and implementation mechanism.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("65"), + value: "pytorch a2c ppo acktr gail 2783PyTorch implementation of Advantage Actor Critic (A2C), Proximal Policy Optimization (PPO), Scalable trust-region method for deep reinforcement learning using Kronecker-factored approximation (ACKTR) and Generative Adversarial Imitation Learning (GAIL).PyTorchCVNLPGenerativeRL" + }, + { + num: NumberInt("66"), + value: "Super SloMo 2777PyTorch implementation of Super SloMo by Jiang et al.PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("67"), + value: "alpha zero general 2775A clean implementation based on AlphaZero for any game in any framework + tutorial + Othello/Gobang/TicTacToe/Connect4 and morePyTorchGenerativeRL" + }, + { + num: NumberInt("68"), + value: "DeepRL 2732Modularized Implementation of Deep RL Algorithms in PyTorchPyTorchRL" + }, + { + num: NumberInt("69"), + value: "SRGAN 2700Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network\nTensorFlowCVGenerative" + }, + { + num: NumberInt("70"), + value: "AlphaZero_Gomoku 2669An implementation of the AlphaZero algorithm for Gomoku (also called Gobang or Five in a Row) PyTorchGenerativeRL" + }, + { + num: NumberInt("71"), + value: "PyTorch StudioGAN 2558StudioGAN is a Pytorch library providing implementations of representative Generative Adversarial Networks (GANs) for conditional/unconditional image generation.PyTorchCVGenerativeAudio" + }, + { + num: NumberInt("72"), + value: "BigGAN-PyTorch 2500The author's officially unofficial PyTorch BigGAN implementation.\nPyTorchGenerative" + }, + { + num: NumberInt("73"), + value: "image-classification-mobile 2500Collection of classification models pretrained on the ImageNet-1K.\nPyTorchCV" + }, + { + num: NumberInt("74"), + value: "Popular Image Segmentation Models 2500FCN, Segnet, U-Net etc. \nKerasCV" + }, + { + num: NumberInt("75"), + value: "Semantic Segmentation Suite 2434Semantic Segmentation Suite in TensorFlow. Implement, train, and test new Semantic Segmentation models easily!TensorFlowCVGenerative" + }, + { + num: NumberInt("76"), + value: "yolov3 tf2 2415YoloV3 Implemented in Tensorflow 2.0TensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("77"), + value: "Faster-RCNN 2400This is an experimental Tensorflow implementation of Faster RCNN - a convnet for object detection with a region proposal network. For details about R-CNN please refer to the paper Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks by Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun.\nTensorFlowCV" + }, + { + num: NumberInt("78"), + value: "CRAFT pytorch 2346Official implementation of Character Region Awareness for Text Detection (CRAFT)PyTorchCVNLP" + }, + { + num: NumberInt("79"), + value: "DQN-tensorflow 2300TensorFlow implementation of DeepMind's 'Human-Level Control through Deep Reinforcement Learning' with OpenAI Gym by Devsisters.com\nTensorFlowRL" + }, + { + num: NumberInt("80"), + value: "MMDetection3D 2300MMDetection3D is OpenMMLab's next-generation platform for general 3D object detection, a part of the OpenMMLab project.\nPyTorchCV" + }, + { + num: NumberInt("81"), + value: "VIBE 2241Official implementation of CVPR2020 paper \"VIBE: Video Inference for Human Body Pose and Shape Estimation\"PyTorchCVGraph" + }, + { + num: NumberInt("82"), + value: "pytorch-kaldi 2200Pytorch-kaldi is a project for developing state-of-the-art DNN/RNN hybrid speech recognition systems. The DNN part is managed by pytorch, while feature extraction, label computation, and decoding are performed with the kaldi toolkit.\nPyTorchNLPAudio" + }, + { + num: NumberInt("83"), + value: "DeepRL Agents 2169A set of Deep Reinforcement Learning Agents implemented in Tensorflow.TensorFlowGenerativeRL" + }, + { + num: NumberInt("84"), + value: "Deep reinforcement learning with pytorch 2140PyTorch implementation of DQN, AC, ACER, A2C, A3C, PG, DDPG, TRPO, PPO, SAC, TD3 and ....PyTorchGenerativeRL" + }, + { + num: NumberInt("85"), + value: "3DDFA_V2 2131The official PyTorch implementation of Towards Fast, Accurate and Stable 3D Dense Face Alignment, ECCV 2020.PyTorchCVGenerative" + }, + { + num: NumberInt("86"), + value: "DeblurGAN 2100Pytorch implementation of the paper DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks.\nPyTorchGenerative" + }, + { + num: NumberInt("87"), + value: "tensorflow yolov4 tflite 2049YOLOv4, YOLOv4-tiny, YOLOv3, YOLOv3-tiny Implemented in Tensorflow 2.0, Android. Convert YOLO v4 .weights tensorflow, tensorrt and tfliteTensorFlowCVGenerative" + }, + { + num: NumberInt("88"), + value: "Tacotron 2 2037DeepMind's Tacotron-2 Tensorflow implementationTensorFlowCVNLPGenerativeAudio" + }, + { + num: NumberInt("89"), + value: "UNet family 2032Paper and implementation of UNet-related model. PyTorchCVGenerativeGraphHealth" + }, + { + num: NumberInt("90"), + value: "dm haiku 2029JAX-based neural network libraryJAXCVNLPGenerativeRL" + }, + { + num: NumberInt("91"), + value: "pyGAT 2019Pytorch implementation of the Graph Attention Network model by Velikovi et. al (2017, https://arxiv.org/abs/1710.10903)PyTorchGenerativeGraph" + }, + { + num: NumberInt("92"), + value: "waveglow 2000A Flow-based Generative Network for Speech Synthesis.\nPyTorchNLPAudio" + }, + { + num: NumberInt("93"), + value: "rlpyt 2000Reinforcement Learning in PyTorch\nPyTorchRL" + }, + { + num: NumberInt("94"), + value: "senet.pytorch 1902PyTorch implementation of SENetPyTorchCVGenerative" + }, + { + num: NumberInt("95"), + value: "deepspeech2 1900Implementation of DeepSpeech2 using Baidu Warp-CTC. Creates a network based on the DeepSpeech2 architecture, trained with the CTC activation function.\nPyTorchNLPAudio" + }, + { + num: NumberInt("96"), + value: "EDSR-PyTorch 1900PyTorch version of the paper 'Enhanced Deep Residual Networks for Single Image Super-Resolution' (CVPRW 2017)\nPyTorchCV" + }, + { + num: NumberInt("97"), + value: "An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 1900This software implements the Convolutional Recurrent Neural Network (CRNN), a combination of CNN, RNN and CTC loss for image-based sequence recognition tasks, such as scene text recognition and OCR.PyTorchCV" + }, + { + num: NumberInt("98"), + value: "Chess Reinforcement Learning 1900Chess reinforcement learning by AlphaGo Zero methods.\nKerasRL" + }, + { + num: NumberInt("99"), + value: "lanenet lane detection 1850Unofficial implemention of lanenet model for real time lane detection using deep neural network model https://maybeshewill-cv.github.io/lanenet-lane-detection/TensorFlowCVGenerative" + }, + { + num: NumberInt("100"), + value: "Image Super Resolution via Iterative Refinement 1821Unofficial implementation of Image Super-Resolution via Iterative Refinement by PytorchPyTorchCVGenerative" + }, + { + num: NumberInt("101"), + value: "pytorch retinanet 1818Pytorch implementation of RetinaNet object detection.PyTorchCV" + }, + { + num: NumberInt("102"), + value: "UNIT 1800PyTorch Implementation of our Coupled VAE-GAN algorithm for Unsupervised Image-to-Image Translation\nPyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("103"), + value: "Neural Sequence labeling model 1800Sequence labeling models are quite popular in many NLP tasks, such as Named Entity Recognition (NER), part-of-speech (POS) tagging and word segmentation.PyTorchCVNLPAudio" + }, + { + num: NumberInt("104"), + value: "yolov7 1761Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectorsPyTorchCV" + }, + { + num: NumberInt("105"), + value: "Lip Reading 1700Cross Audio-Visual Recognition using 3D Architectures in TensorFlow\nTensorFlowAudio" + }, + { + num: NumberInt("106"), + value: "YOLO TensorFlow 1700Implementation of 'YOLO : Real-Time Object Detection'\nTensorFlowCV" + }, + { + num: NumberInt("107"), + value: "deepvoice3_pytorch 1700PyTorch implementation of convolutional networks-based text-to-speech synthesis models\nPyTorchNLPAudio" + }, + { + num: NumberInt("108"), + value: "audio 1700Simple audio I/O for pytorch.\nPyTorchAudio" + }, + { + num: NumberInt("109"), + value: "gandissect 1700Pytorch-based tools for visualizing and understanding the neurons of a GAN. gandissect.csail.mit.edu \nPyTorchGenerative" + }, + { + num: NumberInt("110"), + value: "tabnet 1679PyTorch implementation of TabNet paper : https://arxiv.org/pdf/1908.07442.pdfPyTorchNLPUnsupervisedSelf-Supervised" + }, + { + num: NumberInt("111"), + value: "capsule networks 1648A PyTorch implementation of the NIPS 2017 paper \"Dynamic Routing Between Capsules\".PyTorchGenerativeGraph" + }, + { + num: NumberInt("112"), + value: "impersonator 1637PyTorch implementation of our ICCV 2019 paper: Liquid Warping GAN: A Unified Framework for Human Motion Imitation, Appearance Transfer and Novel View SynthesisPyTorchCVNLPGenerative" + }, + { + num: NumberInt("113"), + value: "faster rcnn 1600This is a PyTorch implementation of Faster RCNN. This project is mainly based on py-faster-rcnn and TFFRCNN.For details about R-CNN please refer to the paper Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks by Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun. \nPyTorchCV" + }, + { + num: NumberInt("114"), + value: "pytorch-semantic-segmentation 1600PyTorch for Semantic Segmentation.\nPyTorchCV" + }, + { + num: NumberInt("115"), + value: "deep rl tensorflow 1568TensorFlow implementation of Deep Reinforcement Learning papersTensorFlowGenerativeRL" + }, + { + num: NumberInt("116"), + value: "yolor 1555implementation of paper - You Only Learn One Representation: Unified Network for Multiple Tasks (https://arxiv.org/abs/2105.04206)PyTorchCV" + }, + { + num: NumberInt("117"), + value: "Pointnet_Pointnet2_pytorch 1533PointNet and PointNet++ implemented by pytorch (pure python) and on ModelNet, ShapeNet and S3DIS.PyTorchCVGenerative" + }, + { + num: NumberInt("118"), + value: "YOLOv3_TensorFlow 1529Complete YOLO v3 TensorFlow implementation. Support training on your own dataset.TensorFlowCVGenerative" + }, + { + num: NumberInt("119"), + value: "lightweight human pose estimation.pytorch 1506Fast and accurate human pose estimation in PyTorch. Contains implementation of \"Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose\" paper.PyTorchCVGenerative" + }, + { + num: NumberInt("120"), + value: "pointnet.pytorch 1500Pytorch implementation for \"PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation\" https://arxiv.org/abs/1612.00593 \nPyTorchCV" + }, + { + num: NumberInt("121"), + value: "pyannote-audio 1500Neural building blocks for speaker diarization: speech activity detection, speaker change detection, speaker embedding\nPyTorchNLPAudio" + }, + { + num: NumberInt("122"), + value: "UnsupervisedMT 1500Phrase-Based & Neural Unsupervised Machine Translation.\nPyTorchNLPUnsupervised" + }, + { + num: NumberInt("123"), + value: "NVIDIA/semantic-segmentation 1500A PyTorch Implementation of Improving Semantic Segmentation via Video Propagation and Label Relaxation, In CVPR2019. \nPyTorchCV" + }, + { + num: NumberInt("124"), + value: "fast autoaugment 1482Official Implementation of 'Fast AutoAugment' in PyTorch.PyTorchCVNLPGenerativeRL" + }, + { + num: NumberInt("125"), + value: "GANotebooks 1460wgan, wgan2(improved, gp), infogan, and dcgan implementation in lasagne, keras, pytorchPyTorchCVGenerative" + }, + { + num: NumberInt("126"), + value: "SimpleHTR 1443Handwritten Text Recognition (HTR) system implemented with TensorFlow.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("127"), + value: "numpyro 1439Probabilistic programming with NumPy powered by JAX for autograd and JIT compilation to GPU/TPU/CPU.JAXNLPGenerativeGraph" + }, + { + num: NumberInt("128"), + value: "Non local_pytorch 1432Implementation of Non-local Block.PyTorchHealth" + }, + { + num: NumberInt("129"), + value: "EfficientDet.Pytorch 1427Implementation EfficientDet: Scalable and Efficient Object Detection in PyTorchPyTorchCV" + }, + { + num: NumberInt("130"), + value: "MathJax src 1426MathJax source code for version 3 and beyondJAXNLP" + }, + { + num: NumberInt("131"), + value: "pytorch-seq2seq 1400A framework for sequence-to-sequence (seq2seq) models implemented in PyTorch. \nPyTorchNLP" + }, + { + num: NumberInt("132"), + value: "ClassyVision 1400An end-to-end PyTorch framework for image and video classification.\nPyTorchCV" + }, + { + num: NumberInt("133"), + value: "SimCLR 1374PyTorch implementation of SimCLR: A Simple Framework for Contrastive Learning of Visual RepresentationsPyTorchNLPUnsupervisedSelf-Supervised" + }, + { + num: NumberInt("134"), + value: "knowledge distillation pytorch 1362A PyTorch implementation for exploring deep and shallow knowledge distillation (KD) experiments with flexibilityPyTorchGenerative" + }, + { + num: NumberInt("135"), + value: "big_transfer 1350Official repository for the \"Big Transfer (BiT): General Visual Representation Learning\" paper.JAXCVGenerative" + }, + { + num: NumberInt("136"), + value: "pytorch cpp 1327C++ Implementation of PyTorch Tutorials for EveryonePyTorchCVNLPGenerative" + }, + { + num: NumberInt("137"), + value: "DeepOSM 1300Train TensorFlow neural nets with OpenStreetMap features and satellite imagery.\nTensorFlowCV" + }, + { + num: NumberInt("138"), + value: "wgan-gp 1300A pytorch implementation of Paper \"Improved Training of Wasserstein GANs\".\nPyTorchGenerative" + }, + { + num: NumberInt("139"), + value: "Rainbow 1300Rainbow: Combining Improvements in Deep Reinforcement Learning \nPyTorchRL" + }, + { + num: NumberInt("140"), + value: "3d ken burns 1280an implementation of 3D Ken Burns Effect from a Single Image using PyTorchPyTorchCVGraph" + }, + { + num: NumberInt("141"), + value: "FCN.tensorflow 1264Tensorflow implementation of Fully Convolutional Networks for Semantic Segmentation (http://fcn.berkeleyvision.org)TensorFlowCVGenerative" + }, + { + num: NumberInt("142"), + value: "Bayesian Neural Networks 1262Pytorch implementations of Bayes By Backprop, MC Dropout, SGLD, the Local Reparametrization Trick, KF-Laplace, SG-HMC and morePyTorchGenerative" + }, + { + num: NumberInt("143"), + value: "SSD 1260High quality, fast, modular reference implementation of SSD in PyTorchPyTorchCV" + }, + { + num: NumberInt("144"), + value: "super resolution 1259Tensorflow 2.x based implementation of EDSR, WDSR and SRGAN for single image super-resolutionTensorFlowCVGenerative" + }, + { + num: NumberInt("145"), + value: "pytorch ssd 1252MobileNetV1, MobileNetV2, VGG based SSD/SSD-lite implementation in Pytorch 1.0 / Pytorch 0.4. Out-of-box support for retraining on Open Images dataset. ONNX and Caffe2 support. Experiment Ideas like CoordConv.PyTorchCV" + }, + { + num: NumberInt("146"), + value: "QRec 1236QRec: A Python Framework for quick implementation of recommender systems (TensorFlow Based)TensorFlowGenerativeGraphSelf-Supervised" + }, + { + num: NumberInt("147"), + value: "neuraltalk2-pytorch 1200Image captioning model in pytorch(finetunable cnn in branch with_finetune)\nPyTorchCVNLP" + }, + { + num: NumberInt("148"), + value: "AnimeGAN 1200A simple PyTorch Implementation of Generative Adversarial Networks, focusing on anime face drawing. \nPyTorchGenerative" + }, + { + num: NumberInt("149"), + value: "CycleGAN TensorFlow 1163An implementation of CycleGan using TensorFlowTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("150"), + value: "pytorch openpose 1161pytorch implementation of openpose including Hand and Body Pose Estimation.PyTorchCV" + }, + { + num: NumberInt("151"), + value: "one pixel attack keras 1148Keras implementation of \"One pixel attack for fooling deep neural networks\" using differential evolution on Cifar10 and ImageNetTensorFlowCVGenerative" + }, + { + num: NumberInt("152"), + value: "scenic 1134Scenic: A Jax Library for Computer Vision Research and BeyondJAXCVGenerativeAudioHealth" + }, + { + num: NumberInt("153"), + value: "Image OutPainting 1122 Keras Implementation of Painting outside the boxTensorFlowCV" + }, + { + num: NumberInt("154"), + value: "tensorflow fcn 1111An Implementation of Fully Convolutional Networks in Tensorflow.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("155"), + value: "SLM-Lab 1100Modular Deep Reinforcement Learning framework in PyTorch.\nPyTorchRL" + }, + { + num: NumberInt("156"), + value: "open_clip 1060An open source implementation of CLIP.PyTorchCVNLP" + }, + { + num: NumberInt("157"), + value: "pytorch_image_classification 1052PyTorch implementation of image classification models for CIFAR-10/CIFAR-100/MNIST/FashionMNIST/Kuzushiji-MNIST/ImageNetPyTorchCVGenerative" + }, + { + num: NumberInt("158"), + value: "functorch 1049functorch is JAX-like composable function transforms for PyTorch.JAXNLP" + }, + { + num: NumberInt("159"), + value: "Pointnet2_PyTorch 1047PyTorch implementation of Pointnet2/Pointnet++PyTorchCVGenerative" + }, + { + num: NumberInt("160"), + value: "Tensorflow Programs and Tutorials 1041Implementations of CNNs, RNNs, GANs, etcTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("161"), + value: "yolov4 deepsort 1015Object tracking implemented with YOLOv4, DeepSort, and TensorFlow.TensorFlowCVGenerative" + }, + { + num: NumberInt("162"), + value: "R-FCN 1000R-FCN: Object Detection via Region-based Fully Convolutional NetworksCaffeCV" + }, + { + num: NumberInt("163"), + value: "DiscoGAN 1000PyTorch implementation of \"Learning to Discover Cross-Domain Relations with Generative Adversarial Networks\" \nPyTorchGenerative" + }, + { + num: NumberInt("164"), + value: "sentiment-discovery 1000Unsupervised Language Modeling at scale for robust sentiment classification.\nPyTorchUnsupervised" + }, + { + num: NumberInt("165"), + value: "AdverTorch 1000A Toolbox for Adversarial Robustness (attack/defense/training) Research\nPyTorchGenerative" + }, + { + num: NumberInt("166"), + value: "async-RL 1000Tensorflow + Keras + OpenAI Gym implementation of 1-step Q Learning from \"Asynchronous Methods for Deep Reinforcement Learning\"\nKerasRL" + }, + { + num: NumberInt("167"), + value: "ChainerRL 1000ChainerRL is a deep reinforcement learning library built on top of Chainer.\nChainerRL" + }, + { + num: NumberInt("168"), + value: "Asynchronous Methods for Deep Reinforcement Learning 994This is a PyTorch implementation of Asynchronous Advantage Actor Critic (A3C) from \"Asynchronous Methods for Deep Reinforcement Learning\".PyTorchRL" + }, + { + num: NumberInt("169"), + value: "QANet 992A Tensorflow implementation of QANet for machine reading comprehensionTensorFlowCVGenerative" + }, + { + num: NumberInt("170"), + value: "sepconv slomo 975an implementation of Video Frame Interpolation via Adaptive Separable Convolution using PyTorchPyTorchCVGenerative" + }, + { + num: NumberInt("171"), + value: "Deep Learning TensorFlow 967Ready to use implementations of various Deep Learning algorithms using TensorFlow.TensorFlowNLPGenerativeRL" + }, + { + num: NumberInt("172"), + value: "variational autoencoder 967Variational autoencoder implemented in tensorflow and pytorch (including inverse autoregressive flow) PyTorchCVGenerative" + }, + { + num: NumberInt("173"), + value: "jraph 966A Graph Neural Network Library in JaxJAXNLPGenerativeGraph" + }, + { + num: NumberInt("174"), + value: "uncertainty baselines 955High-quality implementations of standard and SOTA methods on a variety of tasks.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("175"), + value: "pytorch pretrained BigGAN 935A PyTorch implementation of BigGAN with pretrained weights and conversion scripts.PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("176"), + value: "deeplab pytorch 934PyTorch implementation of DeepLab v2 on COCO-Stuff / PASCAL VOCPyTorchCV" + }, + { + num: NumberInt("177"), + value: "BiSeNet 933Add bisenetv2. My implementation of BiSeNetPyTorchCV" + }, + { + num: NumberInt("178"), + value: "SReC 924PyTorch Implementation of \"Lossless Image Compression through Super-Resolution\"PyTorchCVGenerative" + }, + { + num: NumberInt("179"), + value: "BEGAN tensorflow 923Tensorflow implementation of \"BEGAN: Boundary Equilibrium Generative Adversarial Networks\"TensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("180"), + value: "tf_ner 923Simple and Efficient Tensorflow implementations of NER models with tf.estimator and tf.dataTensorFlowGenerative" + }, + { + num: NumberInt("181"), + value: "Ultrasound nerve segmentation 914This tutorial shows how to use Keras library to build deep neural network for ultrasound image nerve segmentation.KerasCVAudio" + }, + { + num: NumberInt("182"), + value: "chainer-DCGAN 914Deep Convolutional Generative Adversarial Network (DCGAN)\nChainerGenerative" + }, + { + num: NumberInt("183"), + value: "spatial transformer network 911A Tensorflow implementation of Spatial Transformer NetworksTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("184"), + value: "TransformerTTS 911 Transformer TTS: Implementation of a non-autoregressive Transformer based neural network for text to speech.TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("185"), + value: "conv emotion 911This repo contains implementation of different architectures for emotion recognition in conversations.PyTorchNLPGenerativeAudioGraph" + }, + { + num: NumberInt("186"), + value: "show attend and tell 899TensorFlow Implementation of \"Show, Attend and Tell\" TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("187"), + value: "Res2Net PretrainedModels 898(ImageNet pretrained models) The official pytorch implemention of the TPAMI paper \"Res2Net: A New Multi-scale Backbone Architecture\"PyTorchCV" + }, + { + num: NumberInt("188"), + value: "Show, Attend and Tell 897Attention Based Image Caption Generator\nTensorFlowCVNLP" + }, + { + num: NumberInt("189"), + value: "espresso 890Espresso: A Fast End-to-End Neural Speech Recognition Toolkit\nPyTorchNLPAudio" + }, + { + num: NumberInt("190"), + value: "tensorflow yolo v3 889Implementation of YOLO v3 object detector in Tensorflow (TF-Slim)TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("191"), + value: "DeepRL Tutorials 885Contains high quality implementations of Deep Reinforcement Learning algorithms written in PyTorchPyTorchRL" + }, + { + num: NumberInt("192"), + value: "GAN_stability 876Code for paper \"Which Training Methods for GANs do actually Converge? (ICML 2018)\"\nPyTorchGenerative" + }, + { + num: NumberInt("193"), + value: "loop 875A method to generate speech across multiple speakers\nPyTorchNLPAudio" + }, + { + num: NumberInt("194"), + value: "adversarial attacks pytorch 872PyTorch implementation of adversarial attacks.PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("195"), + value: "CNNGestureRecognizer 867Gesture recognition via CNN. Implemented in Keras + Tensorflow/Theano + OpenCVTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("196"), + value: "domain transfer network 863TensorFlow Implementation of Unsupervised Cross-Domain Image Generation TensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("197"), + value: "Domain Transfer Network 859Implementation of Unsupervised Cross-Domain Image Generation\nTensorFlowCVUnsupervised" + }, + { + num: NumberInt("198"), + value: "PConv Keras 855Unofficial implementation of \"Image Inpainting for Irregular Holes Using Partial Convolutions\". Try at: www.fixmyphoto.aiTensorFlowCVGenerative" + }, + { + num: NumberInt("199"), + value: "self-critical.pytorch 853Unofficial pytorch implementation for Self-critical Sequence Training for Image Captioning. \nPyTorchCVNLP" + }, + { + num: NumberInt("200"), + value: "MixNMatch 845Pytorch implementation of MixNMatchPyTorchCVGenerative" + }, + { + num: NumberInt("201"), + value: "BERT keras 828Keras implementation of BERT with pre-trained weightsTensorFlowGenerative" + }, + { + num: NumberInt("202"), + value: "SRGAN 828A PyTorch implementation of SRGAN based on CVPR 2017 paper \"Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network\"PyTorchCVGenerative" + }, + { + num: NumberInt("203"), + value: "cleanrl 821High-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC)PyTorchNLPGenerativeRL" + }, + { + num: NumberInt("204"), + value: "keras vggface 812VGGFace implementation with Keras FrameworkTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("205"), + value: "PyTorch RL 811PyTorch implementation of Deep Reinforcement Learning: Policy Gradient methods (TRPO, PPO, A2C) and Generative Adversarial Imitation Learning (GAIL). Fast Fisher vector product TRPO.PyTorchGenerativeRL" + }, + { + num: NumberInt("206"), + value: "Seq2seq-Chatbot 805Chatbot in 200 lines of code\nTensorFlowNLP" + }, + { + num: NumberInt("207"), + value: "deeplab_v3 803Tensorflow Implementation of the Semantic Segmentation DeepLab_V3 CNNTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("208"), + value: "DEXTR-PyTorch 803Deep Extreme Cut http://www.vision.ee.ethz.ch/~cvlsegmentation/dextr\nPyTorchCV" + }, + { + num: NumberInt("209"), + value: "PyTorch CycleGAN 802A clean and readable Pytorch implementation of CycleGANPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("210"), + value: "jetson-reinforcement 799Deep reinforcement learning libraries for NVIDIA Jetson TX1/TX2 with PyTorch, OpenAI Gym, and Gazebo robotics simulator.\nPyTorchRL" + }, + { + num: NumberInt("211"), + value: "graph_nets 799PyTorch Implementation and Explanation of Graph Representation Learning papers: DeepWalk, GCN, GraphSAGE, ChebNet & GAT.PyTorchUnsupervisedGraph" + }, + { + num: NumberInt("212"), + value: "saliency 798Framework-agnostic implementation for state-of-the-art saliency methods (XRAI, BlurIG, SmoothGrad, and more).TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("213"), + value: "tps_stn_pytorch 797PyTorch implementation of Spatial Transformer Network (STN) with Thin Plate Spline (TPS)PyTorchCVNLP" + }, + { + num: NumberInt("214"), + value: "stackGAN-v2 792Pytorch implementation for reproducing StackGAN_v2 results in the paper StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks by Han Zhang, Tao Xu, Hongsheng Li, Shaoting Zhang, Xiaogang Wang, Xiaolei Huang, Dimitris Metaxas.\nPyTorchCVGenerative" + }, + { + num: NumberInt("215"), + value: "pytorch_resnet_cifar10 791Proper implementation of ResNet-s for CIFAR10/100 in pytorch that matches description of the original paper.PyTorchCV" + }, + { + num: NumberInt("216"), + value: "tf coriander 785OpenCL 1.2 implementation for TensorflowTensorFlowGenerative" + }, + { + num: NumberInt("217"), + value: "yolo_tensorflow 784Tensorflow implementation of YOLO, including training and test phase.TensorFlowGenerative" + }, + { + num: NumberInt("218"), + value: "tffm 783TensorFlow implementation of an arbitrary order Factorization MachineTensorFlowGenerative" + }, + { + num: NumberInt("219"), + value: "tensorflow yolo 780tensorflow implementation of 'YOLO : Real-Time Object Detection'(train and test)TensorFlowCVGenerative" + }, + { + num: NumberInt("220"), + value: "pytorch-rl 780Deep Reinforcement Learning with pytorch & visdom \nPyTorchRL" + }, + { + num: NumberInt("221"), + value: "optax 780Optax is a gradient processing and optimization library for JAX.JAXNLPGenerative" + }, + { + num: NumberInt("222"), + value: "athena 774an open-source implementation of sequence-to-sequence based speech processing engineTensorFlowNLPGenerativeUnsupervisedAudioGraphSelf-Supervised" + }, + { + num: NumberInt("223"), + value: "two stream action recognition 771Using two stream architecture to implement a classic action recognition method on UCF101 datasetPyTorchCVGenerative" + }, + { + num: NumberInt("224"), + value: "pytorch AdaIN 767Unofficial pytorch implementation of 'Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization' [Huang+, ICCV2017]PyTorchCV" + }, + { + num: NumberInt("225"), + value: "benchmark_VAE 767Unifying Generative Autoencoder implementations in PythonPyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("226"), + value: "bert for tf2 765A Keras TensorFlow 2.0 implementation of BERT, ALBERT and adapter-BERT.TensorFlowCVGenerativeSelf-Supervised" + }, + { + num: NumberInt("227"), + value: "SSD 765SSD is an unified framework for object detection with a single network.MXNetCV" + }, + { + num: NumberInt("228"), + value: "official DiscoGAN implementation 751Official implementation of \"Learning to Discover Cross-Domain Relations with Generative Adversarial Networks\". \nPyTorchGenerative" + }, + { + num: NumberInt("229"), + value: "FaderNetworks 750Fader Networks: Manipulating Images by Sliding Attributes - NIPS 2017\nPyTorchCV" + }, + { + num: NumberInt("230"), + value: "pggan pytorch 750:fire::fire: PyTorch implementation of \"Progressive growing of GANs (PGGAN)\" :fire::fire:PyTorchCVGenerative" + }, + { + num: NumberInt("231"), + value: "tf rnn attention 749Tensorflow implementation of attention mechanism for text classification tasks.TensorFlowNLPGenerative" + }, + { + num: NumberInt("232"), + value: "SENet Tensorflow 740Simple Tensorflow implementation of \"Squeeze and Excitation Networks\" using Cifar10 (ResNeXt, Inception-v4, Inception-resnet-v2)TensorFlowCVGenerative" + }, + { + num: NumberInt("233"), + value: "gangealing 740Official PyTorch Implementation of GAN-Supervised Dense Visual Alignment (CVPR 2022 Oral)PyTorchCVNLPGenerativeSelf-Supervised" + }, + { + num: NumberInt("234"), + value: "pytorch segmentation toolbox 736PyTorch Implementations for DeeplabV3 and PSPNetPyTorchCVGenerative" + }, + { + num: NumberInt("235"), + value: "swagger maven plugin 720JAX-RS & SpringMVC supported maven build plugin, helps you generate Swagger JSON and API document in build phase.JAXNLPGenerative" + }, + { + num: NumberInt("236"), + value: "grad cam pytorch 715PyTorch implementation of Grad-CAM, vanilla/guided backpropagation, deconvnet, and occlusion sensitivity mapsPyTorchCV" + }, + { + num: NumberInt("237"), + value: "pytorch lr finder 711A learning rate range test implementation in PyTorchPyTorchGraph" + }, + { + num: NumberInt("238"), + value: "CycleGAN tensorflow 701Tensorflow implementation for learning an image-to-image translation without input-output pairs. https://arxiv.org/pdf/1703.10593.pdfTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("239"), + value: "seq2seq 701This repository contains implementations of Sequence to Sequence (Seq2Seq) models in PyTorch \nPyTorchNLP" + }, + { + num: NumberInt("240"), + value: "FastSpeech 696The Implementation of FastSpeech based on pytorch.PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("241"), + value: "neural image assessment 686Implementation of NIMA: Neural Image Assessment in KerasTensorFlowCVGenerative" + }, + { + num: NumberInt("242"), + value: "PPO PyTorch 683Minimal implementation of clipped objective Proximal Policy Optimization (PPO) in PyTorchPyTorchCVGenerativeRLGraph" + }, + { + num: NumberInt("243"), + value: "torchdistill 682A coding-free framework built on PyTorch for reproducible deep learning studies. 20 knowledge distillation methods presented at CVPR, ICLR, ECCV, NeurIPS, ICCV, etc are implemented so far. Trained models, training logs and configurations are available for ensuring the reproducibiliy and benchmark.PyTorchCVNLPGenerativeSelf-Supervised" + }, + { + num: NumberInt("244"), + value: "RandWireNN 681Implementation of: \"Exploring Randomly Wired Neural Networks for Image Recognition\".\nPyTorchCV" + }, + { + num: NumberInt("245"), + value: "DBNet.pytorch 680A pytorch re-implementation of Real-time Scene Text Detection with Differentiable BinarizationPyTorchCV" + }, + { + num: NumberInt("246"), + value: "Faster RCNN 676Region Proposal Network solves object detection as a regression problem MXNetCV" + }, + { + num: NumberInt("247"), + value: "awesome jax 675JAX - A curated list of resources https://github.com/google/jaxJAXCVGenerativeRLUnsupervisedGraphSelf-SupervisedHealth" + }, + { + num: NumberInt("248"), + value: "Bert Multi Label Text Classification 672This repo contains a PyTorch implementation of a pretrained BERT model for multi-label text classification.PyTorchGenerative" + }, + { + num: NumberInt("249"), + value: "pytorch-maml-rl 669Reinforcement Learning with Model-Agnostic Meta-Learning in Pytorch. \nPyTorchRL" + }, + { + num: NumberInt("250"), + value: "Speech Transformer 669A PyTorch implementation of Speech Transformer, an End-to-End ASR with Transformer network on Mandarin Chinese.PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("251"), + value: "TensorSlow 667Re-implementation of TensorFlow in pure python, with an emphasis on code understandabilityTensorFlowGenerativeGraph" + }, + { + num: NumberInt("252"), + value: "semi-supervised-pytorch 662Implementations of different VAE-based semi-supervised and generative models in PyTorch. \nPyTorchGenerative" + }, + { + num: NumberInt("253"), + value: "DCSCN Super Resolution 661This is a tensorflow implementation of \"Fast and Accurate Image Super Resolution by Deep CNN with Skip Connection and Network in Network\", a deep learning based Single-Image Super-Resolution (SISR) model. \nTensorFlowCV" + }, + { + num: NumberInt("254"), + value: "sequence labeling BiLSTM CRF 658The classical BiLSTM-CRF model implemented in Tensorflow, for sequence labeling tasks. In Vex version, everything is configurable.TensorFlowCVNLPGenerativeAudio" + }, + { + num: NumberInt("255"), + value: "pytorch original transformer 655My implementation of the original transformer model (Vaswani et al.). I've additionally included the playground.py file for visualizing otherwise seemingly hard concepts. Currently included IWSLT pretrained models.PyTorchCVNLPGenerativeAudio" + }, + { + num: NumberInt("256"), + value: "rl book 650Source codes for the book \"Reinforcement Learning: Theory and Python Implementation\"PyTorchGenerativeRL" + }, + { + num: NumberInt("257"), + value: "uvadlc_notebooks 650Repository of Jupyter notebook tutorials for teaching the Deep Learning Course at the University of Amsterdam (MSc AI), Fall 2021/Spring 2022JAXCVNLPGenerativeGraphSelf-Supervised" + }, + { + num: NumberInt("258"), + value: "CIFAR ZOO 645PyTorch implementation of CNNs for CIFAR benchmarkPyTorchCV" + }, + { + num: NumberInt("259"), + value: "NATSpeech 644A Non-Autoregressive Text-to-Speech (NAR-TTS) framework, including official PyTorch implementation of PortaSpeech (NeurIPS 2021) and DiffSpeech (AAAI 2022)PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("260"), + value: "tensor sensor 642The goal of this library is to generate more helpful exception messages for matrix algebra expressions for numpy, pytorch, jax, tensorflow, keras, fastai. JAXCVGenerativeGraph" + }, + { + num: NumberInt("261"), + value: "Class balanced loss pytorch 633Pytorch implementation of the paper \"Class-Balanced Loss Based on Effective Number of Samples\"PyTorchGenerative" + }, + { + num: NumberInt("262"), + value: "deeplabv3 624PyTorch implementation of DeepLabV3, trained on the Cityscapes dataset.PyTorchCVNLP" + }, + { + num: NumberInt("263"), + value: "speech 621PyTorch ASR Implementation.\nPyTorchNLPAudio" + }, + { + num: NumberInt("264"), + value: "android-yolo 615Real-time object detection on Android using the YOLO network, powered by TensorFlow.\nTensorFlowCV" + }, + { + num: NumberInt("265"), + value: "score_sde 599Official code for Score-Based Generative Modeling through Stochastic Differential Equations (ICLR 2021, Oral)JAXCVGenerativeRL" + }, + { + num: NumberInt("266"), + value: "YOLOv3_PyTorch 596Full implementation of YOLOv3 in PyTorchPyTorchCV" + }, + { + num: NumberInt("267"), + value: "3DMPPE_POSENET_RELEASE 592Official PyTorch implementation of \"Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB Image\", ICCV 2019PyTorchCV" + }, + { + num: NumberInt("268"), + value: "TensorFlow VAE GAN DRAW 588A collection of generative methods implemented with TensorFlow (Deep Convolutional Generative Adversarial Networks (DCGAN), Variational Autoencoder (VAE) and DRAW: A Recurrent Neural Network For Image Generation).TensorFlowCVGenerative" + }, + { + num: NumberInt("269"), + value: "R Net 587Tensorflow Implementation of R-NetTensorFlowGenerative" + }, + { + num: NumberInt("270"), + value: "DNC tensorflow 585A TensorFlow implementation of DeepMind's Differential Neural Computers (DNC)TensorFlowNLPGenerativeGraph" + }, + { + num: NumberInt("271"), + value: "efficientdet 585(Pretrained weights provided) EfficientDet: Scalable and Efficient Object Detection implementation by Signatrix GmbHPyTorchCV" + }, + { + num: NumberInt("272"), + value: "text summarization tensorflow 584Tensorflow seq2seq Implementation of Text Summarization.TensorFlowNLPGenerativeRL" + }, + { + num: NumberInt("273"), + value: "WGAN tensorflow 583a tensorflow implementation of WGANTensorFlowCVGenerative" + }, + { + num: NumberInt("274"), + value: "mushroom 582Python library for Reinforcement Learning experiments.\nPyTorchRL" + }, + { + num: NumberInt("275"), + value: "densenet tensorflow 580DenseNet Implementation in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("276"), + value: "vnet.pytorch 577A Pytorch implementation for V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation. \nPyTorchCV" + }, + { + num: NumberInt("277"), + value: "keras mmoe 573A TensorFlow Keras implementation of \"Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts\" (KDD 2018)TensorFlowNLPGenerative" + }, + { + num: NumberInt("278"), + value: "pytorch image classification 571Tutorials on how to implement a few key architectures for image classification using PyTorch and TorchVision.PyTorchCVRL" + }, + { + num: NumberInt("279"), + value: "Hierarchical Attention Networks for Document Classification 568We know that documents have a hierarchical structure, words combine to form sentences and sentences combine to form documents.PyTorchNLP" + }, + { + num: NumberInt("280"), + value: "pytorch nested unet 568PyTorch implementation of UNet++ (Nested U-Net).PyTorchCV" + }, + { + num: NumberInt("281"), + value: "Pytorch SiamFC 562Pytorch implementation of \"Fully-Convolutional Siamese Networks for Object Tracking\"PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("282"), + value: "autonomous-learning-library 559A PyTorch library for building deep reinforcement learning agents.\nPyTorchRL" + }, + { + num: NumberInt("283"), + value: "n beats 559Keras/Pytorch implementation of N-BEATS: Neural basis expansion analysis for interpretable time series forecasting.PyTorchGenerativeGraph" + }, + { + num: NumberInt("284"), + value: "Detectron models for Object Detection 558(Disclaimer: this is work in progress and does not feature all the functionalities of detectron.PyTorchCV" + }, + { + num: NumberInt("285"), + value: "GAN-CLS 557This is an experimental tensorflow implementation of synthesizing images.TensorFlowCVGenerative" + }, + { + num: NumberInt("286"), + value: "AttGAN 556Tensorflow implementation of AttGAN - Arbitrary Facial Attribute Editing: Only Change What You Want\nTensorFlowGenerative" + }, + { + num: NumberInt("287"), + value: "PyTorch-progressive_growing_of_gans 554PyTorch implementation of Progressive Growing of GANs for Improved Quality, Stability, and Variation.\nPyTorchGenerative" + }, + { + num: NumberInt("288"), + value: "tensorflow value iteration networks 550TensorFlow implementation of the Value Iteration Networks (NIPS '16) paperTensorFlowGenerative" + }, + { + num: NumberInt("289"), + value: "detecto 549Detecto is a Python package that allows you to build fully-functioning computer vision and object detection models with just 5 lines of code.PyTorchCV" + }, + { + num: NumberInt("290"), + value: "Multilabel timeseries classification with LSTM 547 Tensorflow implementation of paper: Learning to Diagnose with LSTM Recurrent Neural Networks.TensorFlowGenerative" + }, + { + num: NumberInt("291"), + value: "SpecAugment 546A Implementation of SpecAugment with Tensorflow & Pytorch, introduced by Google BrainPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("292"), + value: "swin transformer pytorch 546Implementation of the Swin Transformer in PyTorch.PyTorchCV" + }, + { + num: NumberInt("293"), + value: "ConvCRF 544This repository contains the reference implementation for our proposed Convolutional CRFs.PyTorchCVGenerative" + }, + { + num: NumberInt("294"), + value: "neural_sp 543End-to-end ASR/LM implementation with PyTorchPyTorchNLPAudioGraph" + }, + { + num: NumberInt("295"), + value: "dropblock 543Implementation of DropBlock: A regularization method for convolutional networks in PyTorch.PyTorchCVGenerative" + }, + { + num: NumberInt("296"), + value: "reinforcement learning algorithms 543This repository contains most of pytorch implementation based classic deep reinforcement learning algorithms, including - DQN, DDQN, Dueling Network, DDPG, SAC, A2C, PPO, TRPO. (More algorithms are still in progress)PyTorchRL" + }, + { + num: NumberInt("297"), + value: "deep transfer learning 542A collection of implementations of deep domain adaptation algorithmsPyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("298"), + value: "DANN 538pytorch implementation of Domain-Adversarial Training of Neural NetworksPyTorchUnsupervised" + }, + { + num: NumberInt("299"), + value: "xlnet Pytorch 537Simple XLNet implementation with Pytorch WrapperPyTorchUnsupervised" + }, + { + num: NumberInt("300"), + value: "pytorch deform conv v2 531PyTorch implementation of Deformable ConvNets v2 (Modulated Deformable Convolution)PyTorchCV" + }, + { + num: NumberInt("301"), + value: "Sentence VAE 527PyTorch Re-Implementation of \"Generating Sentences from a Continuous Space\" by Bowman et al 2015 https://arxiv.org/abs/1511.06349PyTorchGenerativeGraph" + }, + { + num: NumberInt("302"), + value: "EAST 525This is a pytorch re-implementation of EAST: An Efficient and Accurate Scene Text Detector.PyTorchCVGenerative" + }, + { + num: NumberInt("303"), + value: "Deep Metric Learning Baselines 521PyTorch Implementation for Deep Metric Learning PipelinesPyTorchCVGraph" + }, + { + num: NumberInt("304"), + value: "rl_a3c_pytorch 519Reinforcement learning with implementation of A3C LSTM for Atari 2600. \nPyTorchRL" + }, + { + num: NumberInt("305"), + value: "indrnn 517TensorFlow implementation of Independently Recurrent Neural NetworksTensorFlowGenerative" + }, + { + num: NumberInt("306"), + value: "seq2seq.pytorch 517Sequence-to-Sequence learning using PyTorch\nPyTorchNLP" + }, + { + num: NumberInt("307"), + value: "pspnet-pytorch 516PyTorch implementation of PSPNet segmentation network\nPyTorchCV" + }, + { + num: NumberInt("308"), + value: "jaxopt 516Hardware accelerated, batchable and differentiable optimizers in JAX.JAXNLP" + }, + { + num: NumberInt("309"), + value: "how do vits work 510(ICLR 2022 Spotlight) Official PyTorch implementation of \"How Do Vision Transformers Work?\"PyTorchCV" + }, + { + num: NumberInt("310"), + value: "Neural Caption Generator 508Implementation of \"Show and Tell\"\nTensorFlowNLP" + }, + { + num: NumberInt("311"), + value: "T2F 507Text-to-Face generation using Deep Learning. This project combines two of the recent architectures StackGAN and ProGAN for synthesizing faces from textual descriptions.\nPyTorchGenerative" + }, + { + num: NumberInt("312"), + value: "Densenet Tensorflow 503Simple Tensorflow implementation of Densenet using Cifar10, MNISTTensorFlowCVGenerative" + }, + { + num: NumberInt("313"), + value: "Pytorch Medical Segmentation 501This repository is an unoffical PyTorch implementation of Medical segmentation in 2D and 3D.PyTorchCV" + }, + { + num: NumberInt("314"), + value: "pytorch inpainting with partial conv 501Unofficial pytorch implementation of 'Image Inpainting for Irregular Holes Using Partial Convolutions' [Liu+, ECCV2018]PyTorchCV" + }, + { + num: NumberInt("315"), + value: "BigGAN pytorch 500Pytorch implementation of LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS (BigGAN)PyTorchCVGenerative" + }, + { + num: NumberInt("316"), + value: "Transformer TTS 499A Pytorch Implementation of \"Neural Speech Synthesis with Transformer Network\"PyTorchNLPAudio" + }, + { + num: NumberInt("317"), + value: "PyTorch_Speaker_Verification 499PyTorch implementation of \"Generalized End-to-End Loss for Speaker Verification\" by Wan, Li et al. PyTorchNLPAudio" + }, + { + num: NumberInt("318"), + value: "brain-segmentation-pytorch 497U-Net implementation in PyTorch for FLAIR abnormality segmentation in brain MRI. \nPyTorchCV" + }, + { + num: NumberInt("319"), + value: "cnn-vis 496Inspired by Google's recent Inceptionism blog post, cnn-vis is an open-source tool that lets you use convolutional neural networks to generate images.CaffeCV" + }, + { + num: NumberInt("320"), + value: "tensorflow_PSENet 495This is a tensorflow re-implementation of PSENet: Shape Robust Text Detection with Progressive Scale Expansion Network.My blog:TensorFlowCVGenerative" + }, + { + num: NumberInt("321"), + value: "LPRNet_Pytorch 495Pytorch Implementation For LPRNet, A High Performance And Lightweight License Plate Recognition Framework. PyTorchCV" + }, + { + num: NumberInt("322"), + value: "mtan 495The implementation of \"End-to-End Multi-Task Learning with Attention\" [CVPR 2019].PyTorchCVNLP" + }, + { + num: NumberInt("323"), + value: "text classification models tf 493Tensorflow implementations of Text Classification Models.TensorFlowGenerative" + }, + { + num: NumberInt("324"), + value: "pytorch soft actor critic 493PyTorch implementation of soft actor criticPyTorchRL" + }, + { + num: NumberInt("325"), + value: "panoptic deeplab 491This is Pytorch re-implementation of our CVPR 2020 paper \"Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation\" (https://arxiv.org/abs/1911.10194)PyTorchCVGenerative" + }, + { + num: NumberInt("326"), + value: "FixMatch pytorch 490Unofficial PyTorch implementation of \"FixMatch: Simplifying Semi-Supervised Learning with Consistency and Confidence\"PyTorchCVGenerative" + }, + { + num: NumberInt("327"), + value: "DeepRL TensorFlow2 488 Simple implementations of various popular Deep Reinforcement Learning algorithms using TensorFlow2TensorFlowGenerativeRL" + }, + { + num: NumberInt("328"), + value: "yolov4 custom functions 488A Wide Range of Custom Functions for YOLOv4, YOLOv4-tiny, YOLOv3, and YOLOv3-tiny Implemented in TensorFlow, TFLite, and TensorRT.TensorFlowCVGenerative" + }, + { + num: NumberInt("329"), + value: "pro_gan_pytorch 486ProGAN package implemented as an extension of PyTorch nn.Module.\nPyTorchGenerative" + }, + { + num: NumberInt("330"), + value: "FloWaveNet 485A Pytorch implementation of \"FloWaveNet: A Generative Flow for Raw Audio\"PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("331"), + value: "tensorflow reinforce 483Implementations of Reinforcement Learning Models in TensorflowTensorFlowGenerativeRL" + }, + { + num: NumberInt("332"), + value: "two stream pytorch 482PyTorch implementation of two-stream networks for video action recognitionPyTorchCVGenerative" + }, + { + num: NumberInt("333"), + value: "Conditional PixelCNN decoder 481Tensorflow implementation of Gated Conditional Pixel Convolutional Neural NetworkTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("334"), + value: "rnn nlu 478A TensorFlow implementation of Recurrent Neural Networks for Sequence Classification and Sequence LabelingTensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("335"), + value: "tfoptflow 477Optical Flow Prediction with TensorFlow. Implements \"PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume,\" by Deqing Sun et al. (CVPR 2018)TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("336"), + value: "SimCLR 477PyTorch implementation of SimCLR: A Simple Framework for Contrastive Learning of Visual Representations by T. Chen et al.PyTorchCV" + }, + { + num: NumberInt("337"), + value: "Faster RCNN+Focal Loss 476The code is unofficial version for focal loss for Dense Object Detection.MXNetCV" + }, + { + num: NumberInt("338"), + value: "hourglasstensorlfow 474Tensorflow implementation of Stacked Hourglass Networks for Human Pose Estimation TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("339"), + value: "MonoDepth PyTorch 473Unofficial implementation of Unsupervised Monocular Depth Estimation neural network MonoDepth in PyTorchPyTorchCVUnsupervised" + }, + { + num: NumberInt("340"), + value: "tensorflow mnist VAE 472Tensorflow implementation of variational auto-encoder for MNISTTensorFlowCVGenerative" + }, + { + num: NumberInt("341"), + value: "tf.gans comparison 471Implementations of (theoretical) generative adversarial networks and comparison without cherry-pickingTensorFlowCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("342"), + value: "mac network 468Implementation for the paper \"Compositional Attention Networks for Machine Reasoning\" (Hudson and Manning, ICLR 2018)TensorFlowCVGenerative" + }, + { + num: NumberInt("343"), + value: "deepMOT 465Official Implementation of How To Train Your Deep Multi-Object TrackerPyTorchCVGenerative" + }, + { + num: NumberInt("344"), + value: "cuBERT 464Fast implementation of BERT inference directly on NVIDIA (CUDA, CUBLAS) and Intel MKLTensorFlowGenerative" + }, + { + num: NumberInt("345"), + value: "Deep SVDD PyTorch 463A PyTorch implementation of the Deep SVDD anomaly detection methodPyTorchCVGenerative" + }, + { + num: NumberInt("346"), + value: "Conv TasNet 462A PyTorch implementation of Conv-TasNet described in \"TasNet: Surpassing Ideal Time-Frequency Masking for Speech Separation\" with Permutation Invariant Training (PIT).PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("347"), + value: "glow pytorch 461pytorch implementation of openai paper \"Glow: Generative Flow with Invertible 11 Convolutions\"PyTorchCVGenerative" + }, + { + num: NumberInt("348"), + value: "pytorch_wavelets 461Pytorch implementation of 2D Discrete Wavelet (DWT) and Dual Tree Complex Wavelet Transforms (DTCWT) and a DTCWT based ScatterNetPyTorchCVNLP" + }, + { + num: NumberInt("349"), + value: "generative-models 460Annotated, understandable, and visually interpretable PyTorch implementations of: VAE, BIRVAE, NSGAN, MMGAN, WGAN, WGANGP, LSGAN, DRAGAN, BEGAN, RaGAN, InfoGAN, fGAN, FisherGAN. \nPyTorchGenerative" + }, + { + num: NumberInt("350"), + value: "vegans 460A library providing various existing GANs in PyTorch.\nPyTorchGenerative" + }, + { + num: NumberInt("351"), + value: "pytorch A3C 460Simple A3C implementation with pytorch + multiprocessingPyTorchGenerativeRL" + }, + { + num: NumberInt("352"), + value: "Few Shot Patch Based Training 460The official implementation of our SIGGRAPH 2020 paper Interactive Video Stylization Using Few-Shot Patch-Based TrainingPyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("353"), + value: "pytorch cpn 454A PyTorch re-implementation of CPN (Cascaded Pyramid Network for Multi-Person Pose Estimation)PyTorchCVGenerative" + }, + { + num: NumberInt("354"), + value: "TP GAN 453Official TP-GAN Tensorflow implementation for paper \"Beyond Face Rotation: Global and Local Perception GAN for Photorealistic and Identity Preserving Frontal View Synthesis\"TensorFlowCVGenerative" + }, + { + num: NumberInt("355"), + value: "PSENet.pytorch 451A pytorch re-implementation of PSENet: Shape Robust Text Detection with Progressive Scale Expansion NetworkPyTorchCVGenerative" + }, + { + num: NumberInt("356"), + value: "ganilla 446Official Pytorch implementation of GANILLAPyTorchCVNLPGenerative" + }, + { + num: NumberInt("357"), + value: "Multi Task Learning PyTorch 445PyTorch implementation of multi-task learning architectures, incl. MTI-Net (ECCV2020). PyTorchCVNLPGenerative" + }, + { + num: NumberInt("358"), + value: "recurrent visual attention 444A PyTorch Implementation of \"Recurrent Models of Visual Attention\"PyTorchCVRL" + }, + { + num: NumberInt("359"), + value: "pointer network tensorflow 442TensorFlow implementation of \"Pointer Networks\"TensorFlowGenerative" + }, + { + num: NumberInt("360"), + value: "libtorch yolov3 442A Libtorch implementation of the YOLO v3 object detection algorithmPyTorchCV" + }, + { + num: NumberInt("361"), + value: "rl_algorithms 442Structural implementation of RL key algorithmsPyTorchCVNLPGenerativeRL" + }, + { + num: NumberInt("362"), + value: "U-Net 441For Brain Tumor Segmentation\nTensorFlowCV" + }, + { + num: NumberInt("363"), + value: "faceshifter 441Unofficial PyTorch Implementation for FaceShifter (https://arxiv.org/abs/1912.13457)PyTorchCV" + }, + { + num: NumberInt("364"), + value: "long range arena 441Long Range Arena for Benchmarking Efficient TransformersJAXCVNLPGenerative" + }, + { + num: NumberInt("365"), + value: "deep_rl 440PyTorch implementations of deep reinforcement learning algorithmsPyTorchRLGraph" + }, + { + num: NumberInt("366"), + value: "TensorFlow White Paper Notes 437Annotated notes and summaries of the TensorFlow white paper, along with SVG figures and links to documentation\nTensorFlowNLP" + }, + { + num: NumberInt("367"), + value: "Human Segmentation PyTorch 437Human segmentation models, training/inference code, and trained weights, implemented in PyTorchPyTorchCV" + }, + { + num: NumberInt("368"), + value: "mixup 435Implementation of the mixup training methodPyTorchGenerative" + }, + { + num: NumberInt("369"), + value: "neural style audio tf 434TensorFlow implementation for audio neural style.TensorFlowCVGenerativeAudio" + }, + { + num: NumberInt("370"), + value: "tensorflow char rnn 430Char-RNN implemented using TensorFlow. TensorFlowGenerativeGraph" + }, + { + num: NumberInt("371"), + value: "MusicGenreClassification 426Academic research in the field of Deep Learning (Deep Neural Networks) and Sound Processing, Tel Aviv University.TensorFlowAudio" + }, + { + num: NumberInt("372"), + value: "mctx 426Monte Carlo tree search in JAXJAXRL" + }, + { + num: NumberInt("373"), + value: "joint-vae 425Pytorch implementation of JointVAE, a framework for disentangling continuous and discrete factors of variation star2\nPyTorchGenerative" + }, + { + num: NumberInt("374"), + value: "deep_learning_NLP 425Keras, PyTorch, and NumPy Implementations of Deep Learning Architectures for NLPPyTorchCVNLPGraph" + }, + { + num: NumberInt("375"), + value: "rexnet 425Official Pytorch implementation of ReXNet (Rank eXpansion Network) with pretrained modelsPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("376"), + value: "pytorch MNIST CelebA GAN DCGAN 424Pytorch implementation of Generative Adversarial Networks (GAN) and Deep Convolutional Generative Adversarial Networks (DCGAN) for MNIST and CelebA datasetsPyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("377"), + value: "pytorch-cpp-rl 423PyTorch C++ Reinforcement Learning\nPyTorchRL" + }, + { + num: NumberInt("378"), + value: "WassersteinGAN.tensorflow 418Tensorflow implementation of Wasserstein GAN - arxiv: https://arxiv.org/abs/1701.07875TensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("379"), + value: "ESPCN 418A PyTorch implementation of ESPCN based on CVPR 2016 paper \"Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network\"PyTorchCVGraph" + }, + { + num: NumberInt("380"), + value: "rnn from scratch 414Implementing Recurrent Neural Network from ScratchTensorFlowGraph" + }, + { + num: NumberInt("381"), + value: "/pytorch-SRResNet 414Pytorch implementation for Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network arXiv:1609.04802v2 \nPyTorchCVGenerative" + }, + { + num: NumberInt("382"), + value: "neural-combinatorial-rl-pytorch 407PyTorch implementation of Neural Combinatorial Optimization with Reinforcement Learning.\nPyTorchRL" + }, + { + num: NumberInt("383"), + value: "fast neural style 402 pytorch implementation of fast-neural-stylePyTorchCVGraph" + }, + { + num: NumberInt("384"), + value: "vedaseg 401A semantic segmentation framework by pyotrch\nPyTorchCV" + }, + { + num: NumberInt("385"), + value: "ggnn.pytorch 401A PyTorch Implementation of Gated Graph Sequence Neural Networks (GGNN)PyTorchGraph" + }, + { + num: NumberInt("386"), + value: "gan-lib 400Various GANs implementation\nChainerGenerative" + }, + { + num: NumberInt("387"), + value: "mnist-svhn-transfer 395PyTorch Implementation of CycleGAN and SGAN for Domain Transfer (Minimal).\nPyTorchGenerative" + }, + { + num: NumberInt("388"), + value: "nmtpytorch 395Neural Machine Translation Framework in PyTorch.\nPyTorchNLP" + }, + { + num: NumberInt("389"), + value: "Improved Training of Wasserstein GANs 393This is a Pytorch implementation of gan_64x64.py from Improved Training of Wasserstein GANs.PyTorchGenerative" + }, + { + num: NumberInt("390"), + value: "ARAE 392Code for the paper \"Adversarially Regularized Autoencoders for Generating Discrete Structures\" by Zhao, Kim, Zhang, Rush and LeCun.\nPyTorchGenerative" + }, + { + num: NumberInt("391"), + value: "Fast Pytorch 391Pytorch Tutorial, Pytorch with Google Colab, Pytorch Implementations: CNN, RNN, DCGAN, Transfer Learning, Chatbot, Pytorch Sample CodesPyTorchCVNLPGenerative" + }, + { + num: NumberInt("392"), + value: "pytorch adda 383A PyTorch implementation for Adversarial Discriminative Domain AdaptationPyTorchGenerative" + }, + { + num: NumberInt("393"), + value: "JAXL 382Asynchronous, non-blocking I/O, event based PHP library for writing custom TCP/IP client and server implementations. From it's previous versions, library inherits a full blown stable support for XMPP protocol stack. In v3.0, support for HTTP protocol stack was also added.JAXNLP" + }, + { + num: NumberInt("394"), + value: "conformer 381PyTorch implementation of \"Conformer: Convolution-augmented Transformer for Speech Recognition\" (INTERSPEECH 2020)PyTorchNLPAudio" + }, + { + num: NumberInt("395"), + value: "score_sde_pytorch 380PyTorch implementation for Score-Based Generative Modeling through Stochastic Differential Equations (ICLR 2021, Oral)PyTorchCVGenerativeRL" + }, + { + num: NumberInt("396"), + value: "SimCLR 378A PyTorch implementation of SimCLR based on ICML 2020 paper \"A Simple Framework for Contrastive Learning of Visual Representations\"PyTorchCV" + }, + { + num: NumberInt("397"), + value: "sparse to dense.pytorch 373ICRA 2018 \"Sparse-to-Dense: Depth Prediction from Sparse Depth Samples and a Single Image\" (PyTorch Implementation)PyTorchCVSelf-Supervised" + }, + { + num: NumberInt("398"), + value: "piwise 372Pixel-wise segmentation on VOC2012 dataset using pytorch. \nPyTorchCV" + }, + { + num: NumberInt("399"), + value: "3DMPPE_ROOTNET_RELEASE 372Official PyTorch implementation of \"Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB Image\", ICCV 2019PyTorchCV" + }, + { + num: NumberInt("400"), + value: "paragraph vectors 370:page_facing_up: A PyTorch implementation of Paragraph Vectors (doc2vec).PyTorchNLPGraph" + }, + { + num: NumberInt("401"), + value: "lagom 368Lagom: A light PyTorch infrastructure to quickly prototype reinforcement learning algorithms.\nPyTorchRL" + }, + { + num: NumberInt("402"), + value: "pytorch vdsr 367VDSR (CVPR2016) pytorch implementation PyTorchCV" + }, + { + num: NumberInt("403"), + value: "Neural-IMage-Assessment 366A PyTorch Implementation of Neural IMage Assessment. \nPyTorchCV" + }, + { + num: NumberInt("404"), + value: "Siamese RPN pytorch 362This is a re-implementation of Siamese-RPN with pytorch, which is CVPR2018 spotlight.PyTorchCVGenerative" + }, + { + num: NumberInt("405"), + value: "pytorch ddpg 362Implementation of the Deep Deterministic Policy Gradient (DDPG) using PyTorchPyTorchCVRL" + }, + { + num: NumberInt("406"), + value: "pix2pix-pytorch 359PyTorch implementation of \"Image-to-Image Translation Using Conditional Adversarial Networks\". \nPyTorchCVNLPGenerative" + }, + { + num: NumberInt("407"), + value: "One Shot Object Detection 359Implementation of One-Shot Object Detection with Co-Attention and Co-Excitation in PytorchPyTorchCV" + }, + { + num: NumberInt("408"), + value: "video caption.pytorch 359pytorch implementation of video captioningPyTorchCVNLPRL" + }, + { + num: NumberInt("409"), + value: "pytorch CortexNet 357PyTorch implementation of the CortexNet predictive modelPyTorchCVGraph" + }, + { + num: NumberInt("410"), + value: "dgcnn.pytorch 356A PyTorch implementation of Dynamic Graph CNN for Learning on Point Clouds (DGCNN)PyTorchCVGraph" + }, + { + num: NumberInt("411"), + value: "ADGAN 354The Implementation of paper \"Controllable Person Image Synthesis with Attribute-Decomposed GAN\" CVPR 2020 (Oral); Pose and Appearance Attributes Transfer;PyTorchCVGenerative" + }, + { + num: NumberInt("412"), + value: "TTNet Real time Analysis System for Table Tennis Pytorch 354Unofficial implementation of \"TTNet: Real-time temporal and spatial video analysis of table tennis\" (CVPR 2020)PyTorchCV" + }, + { + num: NumberInt("413"), + value: "DeepSIM 353Official PyTorch implementation of the paper: \"DeepSIM: Image Shape Manipulation from a Single Augmented Training Sample\" (ICCV 2021 Oral)PyTorchCV" + }, + { + num: NumberInt("414"), + value: "opencv_transforms 350OpenCV implementation of Torchvision's image augmentations\nPyTorchCV" + }, + { + num: NumberInt("415"), + value: "pytorch_RVAE 348Recurrent Variational Autoencoder that generates sequential data implemented in pytorch. \nPyTorchGenerative" + }, + { + num: NumberInt("416"), + value: "pytorch_RVAE 348Recurrent Variational Autoencoder that generates sequential data implemented with pytorchPyTorchGenerative" + }, + { + num: NumberInt("417"), + value: "pytorch MNIST CelebA cGAN cDCGAN 346Pytorch implementation of conditional Generative Adversarial Networks (cGAN) and conditional Deep Convolutional Generative Adversarial Networks (cDCGAN) for MNIST datasetPyTorchCVNLPGenerative" + }, + { + num: NumberInt("418"), + value: "PyTorch BYOL 346PyTorch implementation of Bootstrap Your Own Latent: A New Approach to Self-Supervised LearningPyTorchUnsupervisedSelf-Supervised" + }, + { + num: NumberInt("419"), + value: "pytorch-trpo(Hessian-vector product version) 344This is a PyTorch implementation of \"Trust Region Policy Optimization (TRPO)\" with exact Hessian-vector product instead of finite differences approximation.\nPyTorchRL" + }, + { + num: NumberInt("420"), + value: "Text to Image Synthesis 344Pytorch implementation of Generative Adversarial Text-to-Image Synthesis paperPyTorchCVGenerative" + }, + { + num: NumberInt("421"), + value: "pytorch faster rcnn 344pytorch based implementation faster rcnnPyTorchCV" + }, + { + num: NumberInt("422"), + value: "pytorch segmentation 343PyTorch implementation for semantic segmentation (DeepLabV3+, UNet, etc.)PyTorchCVGenerative" + }, + { + num: NumberInt("423"), + value: "TokenLabeling 342Pytorch implementation of \"All Tokens Matter: Token Labeling for Training Better Vision Transformers\"PyTorchCV" + }, + { + num: NumberInt("424"), + value: "Pytorch Correlation extension 341Custom implementation of Corrleation ModulePyTorchGenerative" + }, + { + num: NumberInt("425"), + value: "adversarial examples pytorch 339Implementation of Papers on Adversarial ExamplesPyTorchCVGenerative" + }, + { + num: NumberInt("426"), + value: "capsule_net_pytorch 339Readable implementation of a Capsule Network as described in \"Dynamic Routing Between Capsules\" [Hinton et. al.]PyTorchCV" + }, + { + num: NumberInt("427"), + value: "SDEdit 338PyTorch implementation for SDEdit: Image Synthesis and Editing with Stochastic Differential EquationsPyTorchCVGenerative" + }, + { + num: NumberInt("428"), + value: "jaxrl 338JAX (Flax) implementation of algorithms for Deep Reinforcement Learning with continuous action spaces. JAXCVNLPRL" + }, + { + num: NumberInt("429"), + value: "GGHL 337This is the implementation of GGHL (A General Gaussian Heatmap Label Assignment for Arbitrary-Oriented Object Detection)PyTorchCVNLPGenerativeAudio" + }, + { + num: NumberInt("430"), + value: "img_classification_pk_pytorch 336Quickly comparing your image classification models with the state-of-the-art models (such as DenseNet, ResNet, ...)\nPyTorchCV" + }, + { + num: NumberInt("431"), + value: "pytorch softdtw cuda 334Fast CUDA implementation of (differentiable) soft dynamic time warping for PyTorch using NumbaPyTorchNLPGenerative" + }, + { + num: NumberInt("432"), + value: "transformer 334Implementation of \"Attention Is All You Need\" using pytorchPyTorchNLP" + }, + { + num: NumberInt("433"), + value: "Attention_ocr.pytorch 334This repository implements the the encoder and decoder model with attention model for OCRPyTorchCVNLP" + }, + { + num: NumberInt("434"), + value: "Revisiting_Single_Depth_Estimation 333official implementation of \"Revisiting Single Image Depth Estimation: Toward Higher Resolution Maps with Accurate Object Boundaries\"PyTorchCV" + }, + { + num: NumberInt("435"), + value: "MS G3D 333[CVPR 2020 Oral] PyTorch implementation of \"Disentangling and Unifying Graph Convolutions for Skeleton-Based Action Recognition\"PyTorchGraph" + }, + { + num: NumberInt("436"), + value: "pytorch DRL 331PyTorch implementations of various Deep Reinforcement Learning (DRL) algorithms for both single agent and multi-agent.PyTorchRL" + }, + { + num: NumberInt("437"), + value: "Deep Neural Networks are Easily Fooled 327High Confidence Predictions for Unrecognizable Images\nPyTorchCV" + }, + { + num: NumberInt("438"), + value: "shapenet 327PyTorch implementation of \"Super-Realtime Facial Landmark Detection and Shape Fitting by Deep Regression of Shape Model Parameters\" predicting facial landmarks with up to 400 FPSPyTorchCV" + }, + { + num: NumberInt("439"), + value: "DeconvNet 323Learning Deconvolution Network for Semantic Segmentation\nCaffeCV" + }, + { + num: NumberInt("440"), + value: "Speech Recognition 323Speech Recognition with the caffe deep learning frameworkCaffeNLPAudio" + }, + { + num: NumberInt("441"), + value: "PyTorch SRGAN 323A modern PyTorch implementation of SRGANPyTorchCVGenerative" + }, + { + num: NumberInt("442"), + value: "prog_gans_pytorch_inference 320PyTorch inference for \"Progressive Growing of GANs\" with CelebA snapshot.\nPyTorchGenerative" + }, + { + num: NumberInt("443"), + value: "torch ngp 320A pytorch CUDA extension implementation of instant-ngp (sdf and nerf), with a GUI.PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("444"), + value: "RobustBench 316A collection of robust models for RobustBench: a standardized adversarial robustness benchmark\nPyTorchGenerative" + }, + { + num: NumberInt("445"), + value: "pytorch GANs 315My implementation of various GAN (generative adversarial networks) architectures like vanilla GAN (Goodfellow et al.), cGAN (Mirza et al.), DCGAN (Radford et al.), etc.PyTorchCVGenerative" + }, + { + num: NumberInt("446"), + value: "**Faster_RCNN_for_DOTA** 315This is the official repo of paper _DOTA: A Large-scale Dataset for Object Detection in Aerial Images_.MXNetCV" + }, + { + num: NumberInt("447"), + value: "PyTorch ENet 314PyTorch implementation of ENetPyTorchCV" + }, + { + num: NumberInt("448"), + value: "PNASNet.pytorch 313PyTorch implementation of PNASNet-5 on ImageNet. \nPyTorchCV" + }, + { + num: NumberInt("449"), + value: "nfnets pytorch 312NFNets and Adaptive Gradient Clipping for SGD implemented in PyTorch. Find explanation at tourdeml.github.io/blog/PyTorchCV" + }, + { + num: NumberInt("450"), + value: "machin 312Reinforcement learning library(framework) designed for PyTorch, implements DQN, DDPG, A2C, PPO, SAC, MADDPG, A3C, APEX, IMPALA ...PyTorchNLPGenerativeRLGraph" + }, + { + num: NumberInt("451"), + value: "pytorch vq vae 309PyTorch implementation of VQ-VAE by Aron van den Oord et al.PyTorchGenerative" + }, + { + num: NumberInt("452"), + value: "SelecSLS Pytorch 308Reference ImageNet implementation of SelecSLS CNN architecture proposed in the SIGGRAPH 2020 paper \"XNect: Real-time Multi-Person 3D Motion Capture with a Single RGB Camera\". The repository also includes code for pruning the model based on implicit sparsity emerging from adaptive gradient descent methods, as detailed in the CVPR 2019 paper \"On implicit filter level sparsity in Convolutional Neural Networks\".PyTorchCVGraph" + }, + { + num: NumberInt("453"), + value: "VQ VAE 307Minimalist implementation of VQ-VAE in PytorchPyTorchCVGenerative" + }, + { + num: NumberInt("454"), + value: "PointRend PyTorch 305A PyTorch implementation of PointRend: Image Segmentation as RenderingPyTorchCV" + }, + { + num: NumberInt("455"), + value: "DCGAN 304Deep Convolutional Generative Adversarial Networks\nTensorFlowGenerative" + }, + { + num: NumberInt("456"), + value: "softmax splatting 302an implementation of softmax splatting for differentiable forward warping using PyTorchPyTorchCVNLPGenerative" + }, + { + num: NumberInt("457"), + value: "Fast SCNN pytorch 302A PyTorch Implementation of Fast-SCNN: Fast Semantic Segmentation NetworkPyTorchCV" + }, + { + num: NumberInt("458"), + value: "dd3d 302Official PyTorch implementation of DD3D: Is Pseudo-Lidar needed for Monocular 3D Object detection? (ICCV 2021), Dennis Park*, Rares Ambrus*, Vitor Guizilini, Jie Li, and Adrien Gaidon.PyTorchCVGenerative" + }, + { + num: NumberInt("459"), + value: "FMix 301Official implementation of 'FMix: Enhancing Mixed Sample Data Augmentation'PyTorchCVGenerative" + }, + { + num: NumberInt("460"), + value: "Seg-Uncertainty 299Unsupervised Scene Adaptation with Memory Regularization in vivo, In IJCAI 2020.\nPyTorchUnsupervised" + }, + { + num: NumberInt("461"), + value: "mot_neural_solver 299Official PyTorch implementation of \"Learning a Neural Solver for Multiple Object Tracking\" (CVPR 2020 Oral).PyTorchCVNLPGenerative" + }, + { + num: NumberInt("462"), + value: "DeLF pytorch 298PyTorch Implementation of \"Large-Scale Image Retrieval with Attentive Deep Local Features\"PyTorchCV" + }, + { + num: NumberInt("463"), + value: "Total3DUnderstanding 297Implementation of CVPR'20 Oral: Total3DUnderstanding: Joint Layout, Object Pose and Mesh Reconstruction for Indoor Scenes from a Single ImagePyTorchCV" + }, + { + num: NumberInt("464"), + value: "AI Art 296PyTorch (and PyTorch Lightning) implementation of Neural Style Transfer, Pix2Pix, CycleGAN, and Deep Dream!PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("465"), + value: "ESRNN GPU 295PyTorch GPU implementation of the ES-RNN model for time series forecastingPyTorchGenerative" + }, + { + num: NumberInt("466"), + value: "Loss_ToolBox PyTorch 294PyTorch Implementation of Focal Loss and Lovasz-Softmax LossPyTorchCV" + }, + { + num: NumberInt("467"), + value: "Score CAM 292PyTorch implementation of Score-CAMPyTorchGenerative" + }, + { + num: NumberInt("468"), + value: "s vae pytorch 291Pytorch implementation of Hyperspherical Variational Auto-EncodersPyTorchGenerative" + }, + { + num: NumberInt("469"), + value: "get started with JAX 288The purpose of this repo is to make it easy to get started with JAX, Flax, and Haiku. It contains my \"Machine Learning with JAX\" series of tutorials (YouTube videos and Jupyter Notebooks) as well as the content I found useful while learning about the JAX ecosystem.JAXCVGenerative" + }, + { + num: NumberInt("470"), + value: "FLAME_PyTorch 287This is a implementation of the 3D FLAME model in PyTorchPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("471"), + value: "pytorch ddpg naf 285Implementation of algorithms for continuous control (DDPG and NAF).PyTorchRL" + }, + { + num: NumberInt("472"), + value: "PytorchWaveNetVocoder 283WaveNet-Vocoder implementation with pytorch.PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("473"), + value: "pytorch_simple_CenterNet_45 282A simple pytorch implementation of CenterNet (Objects as Points)PyTorchCV" + }, + { + num: NumberInt("474"), + value: "3D BoundingBox 281PyTorch implementation for 3D Bounding Box Estimation Using Deep Learning and GeometryPyTorchCV" + }, + { + num: NumberInt("475"), + value: "DANN_py3 281python 3 pytorch implementation of DANNPyTorchCVUnsupervised" + }, + { + num: NumberInt("476"), + value: "AGE 280Code for paper \"Adversarial Generator-Encoder Networks\" by Dmitry Ulyanov, Andrea Vedaldi and Victor Lempitsky which can be found here \nPyTorchGenerative" + }, + { + num: NumberInt("477"), + value: "Learning to Communicate with Deep Multi-Agent Reinforcement Learning 280Pytorch implementation of Learning to Communicate with Deep Multi-Agent Reinforcement Learning paper.\nPyTorchRL" + }, + { + num: NumberInt("478"), + value: "GAN Tutorial 280Simple Implementation of many GAN models with PyTorch.PyTorchGenerative" + }, + { + num: NumberInt("479"), + value: "PyTorch Beam Search Decoding 279PyTorch implementation of beam search decoding for seq2seq modelsPyTorchNLP" + }, + { + num: NumberInt("480"), + value: "Coupled Face Generation 274This is the open source repository for the Coupled Generative Adversarial Network (CoupledGAN or CoGAN) work.CaffeGenerative" + }, + { + num: NumberInt("481"), + value: "Neural-IMage-Assessment 2 272A PyTorch Implementation of Neural IMage Assessment.\nPyTorchCV" + }, + { + num: NumberInt("482"), + value: "fastseg 272 PyTorch implementation of MobileNetV3 for real-time semantic segmentation, with pretrained weights & state-of-the-art performancePyTorchCVNLP" + }, + { + num: NumberInt("483"), + value: "FullSubNet 271PyTorch implementation of \"FullSubNet: A Full-Band and Sub-Band Fusion Model for Real-Time Single-Channel Speech Enhancement.\"PyTorchNLPAudio" + }, + { + num: NumberInt("484"), + value: "tacotron_pytorch 270PyTorch implementation of Tacotron speech synthesis model. \nPyTorchNLPAudio" + }, + { + num: NumberInt("485"), + value: "Wasserstein AutoEncoders 269PyTorch implementation of Wasserstein Auto-EncodersPyTorchCVGenerative" + }, + { + num: NumberInt("486"), + value: "incremental_learning.pytorch 269A collection of incremental learning paper implementations including PODNet (ECCV20) and Ghost (CVPR-W21).PyTorchCV" + }, + { + num: NumberInt("487"), + value: "MobileNetV3 Pytorch 267Implementing Searching for MobileNetV3 paper using PytorchPyTorchCVGraph" + }, + { + num: NumberInt("488"), + value: "MnasNet PyTorch 266A PyTorch implementation of Mnasnet: MnasNet: Platform-Aware Neural Architecture Search for Mobile.PyTorchCV" + }, + { + num: NumberInt("489"), + value: "social lstm 265Social LSTM implementation in PyTorchPyTorchNLP" + }, + { + num: NumberInt("490"), + value: "high fidelity generative compression 263Pytorch implementation of High-Fidelity Generative Image Compression + Routines for neural image compressionPyTorchCVNLPGenerative" + }, + { + num: NumberInt("491"), + value: "StyleGAN.pytorch 263A PyTorch implementation for StyleGAN with full features.PyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("492"), + value: "pytorch unet 262Tunable U-Net implementation in PyTorchPyTorchCVNLPHealth" + }, + { + num: NumberInt("493"), + value: "RTM3D 261Unofficial PyTorch implementation of \"RTM3D: Real-time Monocular 3D Detection from Object Keypoints for Autonomous Driving\" (ECCV 2020)PyTorchCV" + }, + { + num: NumberInt("494"), + value: "deform_conv_pytorch 260PyTorch Implementation of Deformable ConvolutionPyTorchGenerative" + }, + { + num: NumberInt("495"), + value: "NeuralCompression 260A collection of tools for neural compression enthusiasts.JAXCVGenerative" + }, + { + num: NumberInt("496"), + value: "BEGAN-pytorch 259PyTorch implementation of BEGAN: Boundary Equilibrium Generative Adversarial Networks. \nPyTorchGenerative" + }, + { + num: NumberInt("497"), + value: "DORN_pytorch 257PyTorch implementation of Deep Ordinal Regression Network for Monocular Depth EstimationPyTorchCV" + }, + { + num: NumberInt("498"), + value: "InfoGAN PyTorch 257PyTorch Implementation of InfoGANPyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("499"), + value: "rl_games 257RL implementationsPyTorchNLPGenerativeRL" + }, + { + num: NumberInt("500"), + value: "Proxy Anchor CVPR2020 255Official PyTorch Implementation of Proxy Anchor Loss for Deep Metric Learning, CVPR 2020PyTorchCVGenerative" + }, + { + num: NumberInt("501"), + value: "Text Summarizer Pytorch 255Pytorch implementation of \"A Deep Reinforced Model for Abstractive Summarization\" paper and pointer generator networkPyTorchGenerativeRL" + }, + { + num: NumberInt("502"), + value: "SuperGo 255A student implementation of Alpha Go ZeroPyTorchNLPGenerative" + }, + { + num: NumberInt("503"), + value: "Video Dataset Loading Pytorch 255Generic PyTorch dataset implementation to load and augment VIDEOS for deep learning training loops.PyTorchCVGenerative" + }, + { + num: NumberInt("504"), + value: "pna 254Implementation of Principal Neighbourhood Aggregation for Graph Neural Networks in PyTorch, DGL and PyTorch GeometricPyTorchGenerativeGraph" + }, + { + num: NumberInt("505"), + value: "DFL CNN 253This is a pytorch re-implementation of Learning a Discriminative Filter Bank Within a CNN for Fine-Grained RecognitionPyTorchCV" + }, + { + num: NumberInt("506"), + value: "CNN-LSTM-CTC 253I realize three different models for text recognition, and all of them consist of CTC loss layer to realize no segmentation for text images.MXNetCV" + }, + { + num: NumberInt("507"), + value: "pytorch LapSRN 252Pytorch implementation for LapSRN (CVPR2017)PyTorchCVGenerative" + }, + { + num: NumberInt("508"), + value: "samplernn-pytorch 250PyTorch implementation of SampleRNN: An Unconditional End-to-End Neural Audio Generation Model. \nPyTorchAudio" + }, + { + num: NumberInt("509"), + value: "prototypical network pytorch 250A re-implementation of \"Prototypical Networks for Few-shot Learning\"PyTorchCV" + }, + { + num: NumberInt("510"), + value: "siren 248PyTorch implementation of Sinusodial Representation networks (SIREN)PyTorchCV" + }, + { + num: NumberInt("511"), + value: "nonauto-nmt 247PyTorch Implementation of \"Non-Autoregressive Neural Machine Translation\"\nPyTorchNLP" + }, + { + num: NumberInt("512"), + value: "wildcat.pytorch 247PyTorch implementation of \"WILDCAT: Weakly Supervised Learning of Deep ConvNets for Image Classification, Pointwise Localization and Segmentation\", CVPR 2017PyTorchCV" + }, + { + num: NumberInt("513"), + value: "Neural machine translation between the writings of Shakespeare and modern English using TensorFlow 245This performs a monolingual translation, going from modern English to Shakespeare and vice-versa.\nTensorFlowNLP" + }, + { + num: NumberInt("514"), + value: "GST Tacotron 245 A PyTorch implementation of Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech SynthesisPyTorchNLPUnsupervisedAudio" + }, + { + num: NumberInt("515"), + value: "StyleCariGAN 245[SIGGRAPH 2021] Official implementation of \"StyleCariGAN: Caricature Generation via StyleGAN Feature Map Modulation\"PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("516"), + value: "pyhpc benchmarks 245A suite of benchmarks for CPU and GPU performance of the most popular high-performance libraries for Python :rocket:JAXGenerative" + }, + { + num: NumberInt("517"), + value: "RankSRGAN 244ICCV 2019 (oral) RankSRGAN: Generative Adversarial Networks with Ranker for Image Super-Resolution. PyTorch implementationPyTorchCVGenerative" + }, + { + num: NumberInt("518"), + value: "ImageNet 244This implements training of popular model architectures, such as AlexNet, ResNet and VGG on the ImageNet dataset(Now we supported alexnet, vgg, resnet, squeezenet, densenet)PyTorchCV" + }, + { + num: NumberInt("519"), + value: "PyTorch Image Retrieval 241A PyTorch framework for an image retrieval task including implementation of N-pair Loss (NIPS 2016) and Angular Loss (ICCV 2017).PyTorchCVGenerative" + }, + { + num: NumberInt("520"), + value: "pytorch deepdream 240PyTorch implementation of DeepDream algorithm (Mordvintsev et al.). Additionally I've included playground.py to help you better understand basic concepts behind the algo.PyTorchCVNLP" + }, + { + num: NumberInt("521"), + value: "SSD variants 240PyTorch implementation of several SSD based object detection algorithms.PyTorchCV" + }, + { + num: NumberInt("522"), + value: "mandarin tts 240Chinese Mandarin tts text-to-speech () , by fastspeech 2 , implemented in pytorch, using waveglow as vocoder, with biaobei and aishell3 datasetsPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("523"), + value: "unet pytorch 239U-Net implementation for PyTorch based on https://arxiv.org/abs/1505.04597PyTorchCV" + }, + { + num: NumberInt("524"), + value: "R C3D.pytorch 239R-C3D pytorch implementationPyTorchCVGenerative" + }, + { + num: NumberInt("525"), + value: "adversarial-autoencoder 239Adversarial-autoencoder\nChainerGenerative" + }, + { + num: NumberInt("526"), + value: "my awesome AI bookmarks 238Curated list of my reads, implementations and core concepts of Artificial Intelligence, Deep Learning, Machine Learning by best folk in the world.PyTorchCVNLPGenerativeRLUnsupervisedAudioGraph" + }, + { + num: NumberInt("527"), + value: "pytorch_graph rel 237A PyTorch implementation of GraphRelPyTorchGraph" + }, + { + num: NumberInt("528"), + value: "Deep SAD PyTorch 237A PyTorch implementation of Deep SAD, a deep Semi-supervised Anomaly Detection method.PyTorchCVUnsupervised" + }, + { + num: NumberInt("529"), + value: "mixture of experts 237PyTorch Re-Implementation of \"The Sparsely-Gated Mixture-of-Experts Layer\" by Noam Shazeer et al. https://arxiv.org/abs/1701.06538PyTorchGenerative" + }, + { + num: NumberInt("530"), + value: "transformer pytorch 236Transformer implementation in PyTorch.PyTorchNLPGenerative" + }, + { + num: NumberInt("531"), + value: "DeepLabv3.pytorch 235PyTorch implementation of DeepLabv3PyTorchCVGenerative" + }, + { + num: NumberInt("532"), + value: "universal-triggers 230Universal Adversarial Triggers for Attacking and Analyzing NLP (EMNLP 2019)\nPyTorchGenerative" + }, + { + num: NumberInt("533"), + value: "timeseries_fastai 230fastai V2 implementation of Timeseries classification papers.PyTorchCVNLPAudio" + }, + { + num: NumberInt("534"), + value: "PortaSpeech 230PyTorch Implementation of PortaSpeech: Portable and High-Quality Generative Text-to-SpeechPyTorchNLPGenerativeAudioGraph" + }, + { + num: NumberInt("535"), + value: "pytorch_mpiigaze 229A PyTorch implementation of MPIIGaze and MPIIFaceGazePyTorchGenerative" + }, + { + num: NumberInt("536"), + value: "fast neural style pytorch 227Fast Neural Style Transfer implementation in PyTorch :art: :art: :art:PyTorchCVGenerativeAudioGraph" + }, + { + num: NumberInt("537"), + value: "DETReg 227Official implementation of the CVPR 2022 paper \"DETReg: Unsupervised Pretraining with Region Priors for Object Detection\".PyTorchCVGenerativeRLUnsupervisedAudioSelf-Supervised" + }, + { + num: NumberInt("538"), + value: "pointMLP pytorch 227[ICLR 2022 poster] Official PyTorch implementation of \"Rethinking Network Design and Local Geometry in Point Cloud: A Simple Residual MLP Framework\"PyTorchCVAudio" + }, + { + num: NumberInt("539"), + value: "routing transformer 226Fully featured implementation of Routing TransformerPyTorchSelf-Supervised" + }, + { + num: NumberInt("540"), + value: "UniversalVocoding 226A PyTorch implementation of \"Robust Universal Neural Vocoding\"PyTorchNLPAudio" + }, + { + num: NumberInt("541"), + value: "3DUNet Pytorch 2253DUNet implemented with pytorchPyTorchCV" + }, + { + num: NumberInt("542"), + value: "VQ VAE Speech 225PyTorch implementation of VQ-VAE + WaveNet by [Chorowski et al., 2019] and VQ-VAE on speech signals by [van den Oord et al., 2017]PyTorchNLPGenerativeUnsupervisedAudio" + }, + { + num: NumberInt("543"), + value: "Lottery Ticket Hypothesis in Pytorch 225This repository contains a Pytorch implementation of the paper \"The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks\" by Jonathan Frankle and Michael Carbin that can be easily adapted to any model/dataset.PyTorchGraph" + }, + { + num: NumberInt("544"), + value: "SN GAN 224pyTorch implementation of Spectral Normalization for Generative Adversarial NetworksPyTorchCVGenerative" + }, + { + num: NumberInt("545"), + value: "RetinaNet 224Focal loss for Dense Object DetectionMXNetCV" + }, + { + num: NumberInt("546"), + value: "pytorch question answering 223Important paper implementations for Question Answering using PyTorchPyTorchGenerativeGraph" + }, + { + num: NumberInt("547"), + value: "easy neural ode 223Code for the paper \"Learning Differential Equations that are Easy to Solve\"JAXGenerative" + }, + { + num: NumberInt("548"), + value: "stitchfix/fauxtograph 222Variational Auto-Encoder (VAE), Generative Adversarial Nets (GAN), VAE-GAN\nChainerGenerative" + }, + { + num: NumberInt("549"), + value: "Open Source Chatbot with PyTorch 220Aim to build a Marvelous ChatBotPyTorchNLP" + }, + { + num: NumberInt("550"), + value: "D3Feat 219[TensorFlow] Official implementation of CVPR'20 oral paper - D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features https://arxiv.org/abs/2003.03164TensorFlowNLPGenerativeSelf-Supervised" + }, + { + num: NumberInt("551"), + value: "tensorflow deeplab lfov 218DeepLab-LargeFOV implemented in tensorflowTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("552"), + value: "GAN Sandbox 218Vanilla GAN implemented on top of keras/tensorflow enabling rapid experimentation & research. Branches correspond to implementations of stable GAN variations (i.e. ACGan, InfoGAN) and other promising variations of GANs like conditional and Wasserstein.TensorFlowCVNLPGenerativeHealth" + }, + { + num: NumberInt("553"), + value: "OpenVINO YOLOV4 218This is implementation of YOLOv4,YOLOv4-relu,YOLOv4-tiny,YOLOv4-tiny-3l,Scaled-YOLOv4 and INT8 Quantization in OpenVINO2021.3TensorFlowCVGenerative" + }, + { + num: NumberInt("554"), + value: "Cross Lingual Voice Cloning 218Tacotron 2 - PyTorch implementation with faster-than-realtime inference modified to enable cross lingual voice cloning.PyTorchCVNLPGenerativeAudio" + }, + { + num: NumberInt("555"), + value: "PPO for Beginners 218A simple and well styled PPO implementation. Based on my Medium series: https://medium.com/@eyyu/coding-ppo-from-scratch-with-pytorch-part-1-4-613dfc1b14c8.PyTorchNLPGenerativeRLGraph" + }, + { + num: NumberInt("556"), + value: "Holocron 218PyTorch implementations of recent Computer Vision tricks (ReXNet, RepVGG, Unet3p, YOLOv4, CIoU loss, AdaBelief, PolyLoss)PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("557"), + value: "Sketch Generation with Drawing Process Guided by Vector Flow and Grayscale 218This is the official implementation of the AAAI 2021 accepted paper \"Sketch Generation with Drawing Process Guided by Vector Flow and Grayscale\"PyTorchCVGenerative" + }, + { + num: NumberInt("558"), + value: "Conv TasNet 218Conv-TasNet: Surpassing Ideal Time-Frequency Magnitude Masking for Speech Separation Pytorch's ImplementPyTorchCVNLPAudio" + }, + { + num: NumberInt("559"), + value: "FaceRec 217A Tensorflow implementation of Facial Recognition in PythonTensorFlowCVGenerative" + }, + { + num: NumberInt("560"), + value: "MagnetLoss PyTorch 216PyTorch implementation of a deep metric learning technique called \"Magnet Loss\" from Facebook AI Research (FAIR) in ICLR 2016.PyTorchCV" + }, + { + num: NumberInt("561"), + value: "tfwss 215Weakly Supervised Segmentation with Tensorflow. Implements instance segmentation as described in Simple Does It: Weakly Supervised Instance and Semantic Segmentation, by Khoreva et al. (CVPR 2017).TensorFlowCVGenerative" + }, + { + num: NumberInt("562"), + value: "HAWQ 215Quantization library for PyTorch. Support low-precision and mixed-precision quantization, with hardware implementation through TVM.PyTorchCV" + }, + { + num: NumberInt("563"), + value: "SinGAN 215Pytorch implementation of \"SinGAN: Learning a Generative Model from a Single Natural Image\"PyTorchCVNLPGenerative" + }, + { + num: NumberInt("564"), + value: "Very Deep Convolutional Networks for Large-Scale Image Recognition 214Some scripts to convert the VGG-16PyTorchCV" + }, + { + num: NumberInt("565"), + value: "noise2noise pytorch 214PyTorch Implementation of Noise2Noise (Lehtinen et al., 2018)PyTorchCVGenerative" + }, + { + num: NumberInt("566"), + value: "siamese pytorch 213Implementation of Siamese Networks for image one-shot learning by PyTorch, train and test model on dataset Omniglot PyTorchCV" + }, + { + num: NumberInt("567"), + value: "CycleMLP 213[ICLR'22 Oral] Implementation of \"CycleMLP: A MLP-like Architecture for Dense Prediction\"PyTorchCV" + }, + { + num: NumberInt("568"), + value: "gpt 2 tensorflow2.0 212OpenAI GPT2 pre-training and sequence prediction implementation in Tensorflow 2.0 TensorFlowGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("569"), + value: "s vae tf 211Tensorflow implementation of Hyperspherical Variational Auto-EncodersTensorFlowGenerative" + }, + { + num: NumberInt("570"), + value: "mobilenetv3 tensorflow 210Unofficial implementation of MobileNetV3 architecture described in paper Searching for MobileNetV3. TensorFlowGenerativeGraph" + }, + { + num: NumberInt("571"), + value: "nsfw resnet 210NSFW implement in pytorch&PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("572"), + value: "jax flows 210Normalizing Flows in JAX JAXNLPGenerative" + }, + { + num: NumberInt("573"), + value: "deepmask pytorch 209PyTorch re-implementation of DeepMaskPyTorchCV" + }, + { + num: NumberInt("574"), + value: "MobileNet V2 209A Complete and Simple Implementation of MobileNet-V2 in PyTorchPyTorchCVGenerative" + }, + { + num: NumberInt("575"), + value: "lightweight_openpose 206A tensorflow implementation of Arxiv Paper \"Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose \"(https://arxiv.org/abs/1811.12004) TensorFlowCVGenerative" + }, + { + num: NumberInt("576"), + value: "torch_waveglow 205A PyTorch implementation of the WaveGlow: A Flow-based Generative Network for Speech Synthesis. \nPyTorchNLPAudio" + }, + { + num: NumberInt("577"), + value: "GLCIC PyTorch 205A High-Quality PyTorch Implementation of \"Globally and Locally Consistent Image Completion\".PyTorchCV" + }, + { + num: NumberInt("578"), + value: "pyhf 205pure-Python HistFactory implementation with tensors and autodiffPyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("579"), + value: "Music Dance Video Synthesis 205[ACM MM 20 Oral] PyTorch implementation of Self-supervised Dance Video Synthesis Conditioned on Music PyTorchSelf-Supervised" + }, + { + num: NumberInt("580"), + value: "arcface tf2 204ArcFace unofficial Implemented in Tensorflow 2.0+ (ResNet50, MobileNetV2). \"ArcFace: Additive Angular Margin Loss for Deep Face Recognition\" Published in CVPR 2019. With Colab.TensorFlowCVGenerative" + }, + { + num: NumberInt("581"), + value: "OASIS 204Official implementation of the paper \"You Only Need Adversarial Supervision for Semantic Image Synthesis\" (ICLR 2021)PyTorchCVGenerative" + }, + { + num: NumberInt("582"), + value: "TENet 203Official Pytorch Implementation for Rethinking the Pipeline of Demosaicing, Denoising and Super-Resolution PyTorchCVGenerative" + }, + { + num: NumberInt("583"), + value: "extending jax 203Extending JAX with custom C++ and CUDA codeJAXNLPGenerativeGraph" + }, + { + num: NumberInt("584"), + value: "paac 201Open source implementation of the PAAC algorithm presented in Efficient Parallel Methods for Deep Reinforcement LearningTensorFlowCVGenerativeRL" + }, + { + num: NumberInt("585"), + value: "tf2 yolov4 201A TensorFlow 2.0 implementation of YOLOv4: Optimal Speed and Accuracy of Object DetectionTensorFlowCVGenerative" + }, + { + num: NumberInt("586"), + value: "sinkhorn transformer 201Sinkhorn Transformer - Practical implementation of Sparse Sinkhorn AttentionPyTorchSelf-Supervised" + }, + { + num: NumberInt("587"), + value: "SVHNClassifier 200A TensorFlow implementation of Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks (http://arxiv.org/pdf/1312.6082.pdf)TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("588"), + value: "tf insightface 200A better tensorflow implementation of deepinsight, aiming at smoothly production ready for cross-platforms. Currently only with inference, training code later.TensorFlowGenerative" + }, + { + num: NumberInt("589"), + value: "Tacotron-pytorch 198Tacotron: Towards End-to-End Speech Synthesis.\nPyTorchNLPAudio" + }, + { + num: NumberInt("590"), + value: "ARFlow 198The official PyTorch implementation of the paper \"Learning by Analogy: Reliable Supervision from Transformations for Unsupervised Optical Flow Estimation\".PyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("591"), + value: "yolo tf 197TensorFlow implementation of the YOLO (You Only Look Once)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("592"), + value: "ddpg 197TensorFlow implementation of the DDPG algorithm from the paper Continuous Control with Deep Reinforcement Learning (ICLR 2016)TensorFlowGenerativeRL" + }, + { + num: NumberInt("593"), + value: "tfdiffeq 197Tensorflow implementation of Ordinary Differential Equation Solvers with full GPU supportTensorFlowGenerative" + }, + { + num: NumberInt("594"), + value: "DiffAI 197A provable defense against adversarial examples and library for building compatible PyTorch models.\nPyTorchGenerative" + }, + { + num: NumberInt("595"), + value: "treex 197A Pytree Module system for Deep Learning in JAXJAXNLPGenerative" + }, + { + num: NumberInt("596"), + value: "MultiPoseNet.pytorch 196pytorch implementation of MultiPoseNet (ECCV 2018, Muhammed Kocabas et al.)PyTorchCV" + }, + { + num: NumberInt("597"), + value: "NICE GAN pytorch 195Official PyTorch implementation of NICE-GAN: Reusing Discriminators for Encoding: Towards Unsupervised Image-to-Image TranslationPyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("598"), + value: "gymnax 195RL Environments in JAX JAXNLPRL" + }, + { + num: NumberInt("599"), + value: "TensorFlow Xception 194TensorFlow implementation of the Xception Model by Franois CholletTensorFlowGenerativeGraph" + }, + { + num: NumberInt("600"), + value: "funsor 194Functional tensors for probabilistic programmingJAXNLPGenerative" + }, + { + num: NumberInt("601"), + value: "deep graph matching consensus 193Implementation of \"Deep Graph Matching Consensus\" in PyTorchPyTorchNLPGraph" + }, + { + num: NumberInt("602"), + value: "Self Attentive tensorflow 192Tensorflow implementation of \"A Structured Self-Attentive Sentence Embedding\"TensorFlowGenerative" + }, + { + num: NumberInt("603"), + value: "bayesian neural network pytorch 192PyTorch implementation of bayesian neural network.PyTorchGenerative" + }, + { + num: NumberInt("604"), + value: "gail tf 191Tensorflow implementation of generative adversarial imitation learningTensorFlowGenerativeRL" + }, + { + num: NumberInt("605"), + value: "unet 191Generic U-Net Tensorflow 2 implementation for semantic segmentationTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("606"), + value: "tensorflow mnist cnn 189MNIST classification using Convolutional NeuralNetwork. Various techniques such as data augmentation, dropout, batchnormalization, etc are implemented. TensorFlowCVGenerative" + }, + { + num: NumberInt("607"), + value: "Yolact_minimal 189Minimal PyTorch implementation of YOLACT.PyTorchCV" + }, + { + num: NumberInt("608"), + value: "Hierarchical Actor Critic HAC PyTorch 189PyTorch implementation of Hierarchical Actor Critic (HAC) for OpenAI gym environmentsPyTorchGenerativeRL" + }, + { + num: NumberInt("609"), + value: "osgi jax rs connector 189An OSGi - JAX-RS 2.0 Connector, software repository available on the link belowJAXNLP" + }, + { + num: NumberInt("610"), + value: "DeepMask object segmentation 188This is a Keras-based Python implementation of DeepMask- a complex deep neural network for learning object segmentation masks.KerasCV" + }, + { + num: NumberInt("611"), + value: "robot grasp detection 187Detecting robot grasping positions with deep neural networks. The model is trained on Cornell Grasping Dataset. This is an implementation mainly based on the paper 'Real-Time Grasp Detection Using Convolutional Neural Networks' from Redmon and Angelova.TensorFlowCVGenerative" + }, + { + num: NumberInt("612"), + value: "deep_image_prior 187An implementation of image reconstruction methods from Deep Image Prior (Ulyanov et al., 2017) in PyTorch.\nPyTorchCV" + }, + { + num: NumberInt("613"), + value: "Bilinear CNN TensorFlow 186This is an implementation of Bilinear CNN for fine grained visual recognition using TensorFlow.TensorFlowCVGenerative" + }, + { + num: NumberInt("614"), + value: "pt dec 185PyTorch implementation of DEC (Deep Embedding Clustering)PyTorchUnsupervised" + }, + { + num: NumberInt("615"), + value: "BERT4Rec VAE Pytorch 185Pytorch implementation of BERT4Rec and Netflix VAE.PyTorchGenerativeGraph" + }, + { + num: NumberInt("616"), + value: "DistanceGAN 183Pytorch implementation of \"One-Sided Unsupervised Domain Mapping\" NIPS 2017PyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("617"), + value: "cp vton plus 183Official implementation for \"CP-VTON+: Clothing Shape and Texture Preserving Image-Based Virtual Try-On\", CVPRW 2020PyTorchCVGraph" + }, + { + num: NumberInt("618"), + value: "MuZero 182A structured implementation of MuZeroTensorFlowCVNLPGenerativeRL" + }, + { + num: NumberInt("619"), + value: "GAN-weight-norm 182Code for \"On the Effects of Batch and Weight Normalization in Generative Adversarial Networks\"\nPyTorchGenerative" + }, + { + num: NumberInt("620"), + value: "SceneChangeDet 182pytorch implementation of scene change detectionPyTorchCV" + }, + { + num: NumberInt("621"), + value: "MIMO UNet 182MIMO-UNet - Official Pytorch ImplementationPyTorchCV" + }, + { + num: NumberInt("622"), + value: "ott 182Optimal Transport tools implemented with the JAX framework, to get auto-diff, parallel and jit-able computations.JAXNLP" + }, + { + num: NumberInt("623"), + value: "snli entailment 181attention model for entailment on SNLI corpus implemented in Tensorflow and KerasTensorFlowGenerative" + }, + { + num: NumberInt("624"), + value: "FOTS_TF 181This an implementation of FOTS with tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("625"), + value: "scene_generation 181A PyTorch implementation of the paper: Specifying Object Attributes and Relations in Interactive Scene GenerationPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("626"), + value: "attentions 180PyTorch implementation of some attentions for Deep Learning Researchers. PyTorchCVNLPAudio" + }, + { + num: NumberInt("627"), + value: "jaxnet 180Concise deep learning for JAXJAXGenerativeRLGraph" + }, + { + num: NumberInt("628"), + value: "Active Contour Loss 179Implementation of active contour loss functionTensorFlowCVGenerative" + }, + { + num: NumberInt("629"), + value: "attention is all you need paper 179Implementation of Vaswani, Ashish, et al. \"Attention is all you need.\" Advances in neural information processing systems. 2017.PyTorchCVNLP" + }, + { + num: NumberInt("630"), + value: "prompt tuning 179Original Implementation of Prompt Tuning from Lester, et al, 2021JAXGenerative" + }, + { + num: NumberInt("631"), + value: "tensorflow_stacked_denoising_autoencoder 178Implementation of the stacked denoising autoencoder in TensorflowTensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("632"), + value: "vision transformer 178Tensorflow implementation of the Vision Transformer (An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale)TensorFlowCVGenerative" + }, + { + num: NumberInt("633"), + value: "keras lmu 177Keras implementation of Legendre Memory UnitsTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("634"), + value: "CLUENER2020 177A PyTorch implementation of a BiLSTM\\BERT\\Roberta(+CRF) model for Named Entity Recognition.PyTorchGenerative" + }, + { + num: NumberInt("635"), + value: "facenet pytorch glint360k 177A PyTorch implementation of the 'FaceNet' paper for training a facial recognition model with Triplet Loss using the glint360k dataset. A pre-trained model using Triplet Loss is available for download.PyTorchCVGraph" + }, + { + num: NumberInt("636"), + value: "V2V PoseNet pytorch 176PyTorch implementation of V2V-PoseNet with IntegralPose/PoseFix lossPyTorchCVGraph" + }, + { + num: NumberInt("637"), + value: "Deeplab v2 ResNet 101 Tensorflow 175An (re-)implementation of DeepLab v2 (ResNet-101) in TensorFlow for semantic image segmentation on the PASCAL VOC 2012 dataset.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("638"), + value: "adv_attack_capsnet 175Tensorflow Implementation of Adversarial Attack to Capsule NetworksTensorFlowCVNLPGenerativeAudio" + }, + { + num: NumberInt("639"), + value: "6DRepNet 175Official Pytorch implementation of 6DRepNet: 6D Rotation representation for unconstrained head pose estimation.PyTorchCV" + }, + { + num: NumberInt("640"), + value: "tensorflow rl 174Implementations of deep RL papers and random experimentationTensorFlowCVGenerativeRLUnsupervised" + }, + { + num: NumberInt("641"), + value: "ntm 174TensorFlow implementation of Neural Turing Machines (NTM), with its application on one-shot learning (MANN)TensorFlowCVGenerative" + }, + { + num: NumberInt("642"), + value: "pytorch classification uncertainty 174This repo contains a PyTorch implementation of the paper: \"Evidential Deep Learning to Quantify Classification Uncertainty\"PyTorchCVGenerative" + }, + { + num: NumberInt("643"), + value: "few_shot_meta_learning 174Implementations of many meta-learning algorithms to solve the few-shot learning problem in PytorchPyTorchCVNLPGenerative" + }, + { + num: NumberInt("644"), + value: "tensorflow MNIST GAN DCGAN 173Tensorflow implementation of Generative Adversarial Networks (GAN) and Deep Convolutional Generative Adversarial Netwokrs for MNIST dataset.TensorFlowCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("645"), + value: "A Convolutional Recurrent Neural Network for Real Time Speech Enhancement 173A minimum unofficial implementation of the \"A Convolutional Recurrent Neural Network for Real-Time Speech Enhancement\" (CRN) using PyTorchPyTorchNLPAudio" + }, + { + num: NumberInt("646"), + value: "faststyle 172Tensorflow implementation of fast neural style transfer.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("647"), + value: "multihead siamese nets 172Implementation of Siamese Neural Networks built upon multihead attention mechanism for text semantic similarity task. TensorFlowGenerativeGraph" + }, + { + num: NumberInt("648"), + value: "conv tasnet 172A PyTorch implementation of \"TasNet: Surpassing Ideal Time-Frequency Masking for Speech Separation\" (see recipes in aps framework https://github.com/funcwj/aps)PyTorchNLPAudio" + }, + { + num: NumberInt("649"), + value: "SVHNClassifier 171A PyTorch implementation of Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks. \nPyTorchCV" + }, + { + num: NumberInt("650"), + value: "vgae_pytorch 171This repository implements variational graph auto encoder by Thomas Kipf. PyTorchGenerativeGraph" + }, + { + num: NumberInt("651"), + value: "AdaFM 171CVPR2019 (oral) Modulating Image Restoration with Continual Levels via Adaptive Feature Modification Layers (AdaFM). PyTorch implementationPyTorchCV" + }, + { + num: NumberInt("652"), + value: "pytorch gan collections 171PyTorch implementation of DCGAN, WGAN-GP and SNGAN. PyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("653"), + value: "GMVAE 171Implementation of Gaussian Mixture Variational Autoencoder (GMVAE) for Unsupervised ClusteringPyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("654"), + value: "pytorch_deephash 171Pytorch implementation of Deep Learning of Binary Hash Codes for Fast Image Retrieval, CVPRW 2015PyTorchCV" + }, + { + num: NumberInt("655"), + value: "Pro GNN 171Implementation of the KDD 2020 paper \"Graph Structure Learning for Robust Graph Neural Networks\"PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("656"), + value: "tf Faster RCNN 170TensorFlow implementation of Faster R-CNNTensorFlowCVGenerative" + }, + { + num: NumberInt("657"), + value: "fast weights 170Implementation of the paper [Using Fast Weights to Attend to the Recent Past](https://arxiv.org/abs/1610.06258)TensorFlowGenerativeGraph" + }, + { + num: NumberInt("658"), + value: "Eye Tracker 170Implemented and improved the iTracker model proposed in the paper \"Eye Tracking for Everyone\"TensorFlowCV" + }, + { + num: NumberInt("659"), + value: "capsnet traffic sign classifier 169A Tensorflow implementation of CapsNet(Capsules Net) apply on german traffic sign datasetTensorFlowGenerative" + }, + { + num: NumberInt("660"), + value: "VDCNN 169Implementation of Very Deep Convolutional Neural Network for Text ClassificationTensorFlowGenerativeGraph" + }, + { + num: NumberInt("661"), + value: "VITON HD 169Official PyTorch implementation of \"VITON-HD: High-Resolution Virtual Try-On via Misalignment-Aware Normalization\" (CVPR 2021)PyTorchCV" + }, + { + num: NumberInt("662"), + value: "Mask_Guided_Portrait_Editing 169pytorch implementation of \"Mask-Guided Portrait Editing with Conditional GANs\"PyTorchCVGenerative" + }, + { + num: NumberInt("663"), + value: "DSS pytorch 169:star: PyTorch implement of Deeply Supervised Salient Object Detection with Short ConnectionPyTorchCV" + }, + { + num: NumberInt("664"), + value: "generative_adversarial_networks_101 168Keras implementations of Generative Adversarial Networks. GANs, DCGAN, CGAN, CCGAN, WGAN and LSGAN models with MNIST and CIFAR-10 datasets.TensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("665"), + value: "PKD for BERT Model Compression 168pytorch implementation for Patient Knowledge Distillation for BERT Model CompressionPyTorchGenerative" + }, + { + num: NumberInt("666"), + value: "PercepNet 167(Work In Progress) Unofficial implementation of PercepNet: A Perceptually-Motivated Approach for Low-Complexity, Real-Time Enhancement of Fullband SpeechPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("667"), + value: "reptile pytorch 167A PyTorch implementation of OpenAI's REPTILE algorithmPyTorchCVGenerative" + }, + { + num: NumberInt("668"), + value: "Pix2Pix Film 166An implementation of Pix2Pix in Tensorflow for use with frames from filmsTensorFlowGenerative" + }, + { + num: NumberInt("669"), + value: "instance segmentation with discriminative loss tensorflow 166Tensorflow implementation of \"Semantic Instance Segmentation with a Discriminative Loss Function\"TensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("670"), + value: "MAML TensorFlow 166Faster and elegant TensorFlow Implementation of paper: Model-Agnostic Meta-Learning for Fast Adaptation of Deep NetworksTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("671"), + value: "Palette Image to Image Diffusion Models 166Unofficial implementation of Palette: Image-to-Image Diffusion Models by PytorchPyTorchCVGenerative" + }, + { + num: NumberInt("672"), + value: "visual interaction networks pytorch 165This's an implementation of deepmind Visual Interaction Networks paper using pytorchPyTorchGenerative" + }, + { + num: NumberInt("673"), + value: "neural processes 164Pytorch implementation of Neural Processes for functions and images :fireworks:PyTorchCVGenerative" + }, + { + num: NumberInt("674"), + value: "imagenet 163TensorFlow implementation of AlexNet and its training and testing on ImageNet ILSVRC 2012 datasetTensorFlowCVGenerative" + }, + { + num: NumberInt("675"), + value: "Deep-Image-Analogy-PyTorch 163A python implementation of Deep-Image-Analogy based on pytorch.\nPyTorchCV" + }, + { + num: NumberInt("676"), + value: "Listen Attend Spell 163A PyTorch implementation of Listen, Attend and Spell (LAS), an End-to-End ASR framework.PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("677"), + value: "lsoftmax pytorch 163The Pytorch Implementation of L-SoftmaxPyTorchGenerative" + }, + { + num: NumberInt("678"), + value: "keras_unet_plus_plus 163keras implementation of unet plus plusPyTorchCV" + }, + { + num: NumberInt("679"), + value: "capsule net pytorch 163[NO MAINTENANCE INTENDED] A PyTorch implementation of CapsNet architecture in the NIPS 2017 paper \"Dynamic Routing Between Capsules\".PyTorchCVNLPGenerative" + }, + { + num: NumberInt("680"), + value: "jaxon 163Streaming JSON parser for ElixirJAXNLP" + }, + { + num: NumberInt("681"), + value: "ShuffleNetV2 pytorch 162Implementation of ShuffleNetV2 for pytorchPyTorchCV" + }, + { + num: NumberInt("682"), + value: "KerasPersonLab 161Keras-tensorflow implementation of PersonLab (https://arxiv.org/abs/1803.08225)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("683"), + value: "keras adamw 161Keras/TF implementation of AdamW, SGDW, NadamW, Warm Restarts, and Learning Rate multipliersTensorFlowGenerative" + }, + { + num: NumberInt("684"), + value: "wgan gp 161Pytorch implementation of Wasserstein GANs with Gradient PenaltyPyTorchCVGenerative" + }, + { + num: NumberInt("685"), + value: "FQ GAN 161Official implementation of FQ-GANPyTorchCVNLPGenerative" + }, + { + num: NumberInt("686"), + value: "Fast RCNN 160My implementation of Fast-RCNN tensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("687"), + value: "CCNet Pure Pytorch 160Criss-Cross Attention (2d&3d) for Semantic Segmentation in pure Pytorch with a faster and more precise implementation.PyTorchCVGenerative" + }, + { + num: NumberInt("688"), + value: "mdistiller 160A Knowledge Distillation Toolbox. The official implementation of https://arxiv.org/abs/2203.08679PyTorchCV" + }, + { + num: NumberInt("689"), + value: "GradCache 160Run Effective Large Batch Contrastive Learning Beyond GPU/TPU Memory ConstraintJAXGraph" + }, + { + num: NumberInt("690"), + value: "pytorch-seq2seq-intent-parsing 159Intent parsing and slot filling in PyTorch with seq2seq + attention\nPyTorchNLP" + }, + { + num: NumberInt("691"), + value: "DNN based_source_separation 159A PyTorch implementation of DNN-based source separation.PyTorchCVNLPRLAudio" + }, + { + num: NumberInt("692"), + value: "LeNet 5 159PyTorch implementation of LeNet-5 with live visualizationPyTorchNLPGraph" + }, + { + num: NumberInt("693"), + value: "Hash Embeddings 159PyTorch implementation of Hash Embeddings (NIPS 2017). Submission to the NIPS Implementation Challenge.PyTorchHealth" + }, + { + num: NumberInt("694"), + value: "easy faster rcnn.pytorch 159An easy implementation of Faster R-CNN (https://arxiv.org/pdf/1506.01497.pdf) in PyTorch.PyTorchCV" + }, + { + num: NumberInt("695"), + value: "regnet 159Pytorch implementation of network design paradigm described in the paper \"Designing Network Design Spaces\"PyTorchCV" + }, + { + num: NumberInt("696"), + value: "pix2pixBEGAN.pytorch 159A pytorch implementation of pix2pix + BEGAN (Boundary Equilibrium Generative Adversarial Networks)PyTorchCVNLPGenerative" + }, + { + num: NumberInt("697"), + value: "Soft Actor Critic and Extensions 159PyTorch implementation of Soft-Actor-Critic and Prioritized Experience Replay (PER) + Emphasizing Recent Experience (ERE) + Munchausen RL + D2RL and parallel Environments. PyTorchRL" + }, + { + num: NumberInt("698"), + value: "tf dcgan 158DCGAN implementation by TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("699"), + value: "Pytorch-DPPO 158Pytorch implementation of Distributed Proximal Policy Optimization: arxiv.org/abs/1707.02286\nPyTorchRL" + }, + { + num: NumberInt("700"), + value: "TDNN 158Time delay neural network (TDNN) implementation in Pytorch using unfold methodPyTorchNLPAudio" + }, + { + num: NumberInt("701"), + value: "DTA.pytorch 158Official implementation of Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adaptation presented at ICCV 2019.PyTorchUnsupervised" + }, + { + num: NumberInt("702"), + value: "adversarial-patch 156PyTorch implementation of adversarial patch. \nPyTorchGenerative" + }, + { + num: NumberInt("703"), + value: "Complex YOLOv3 156PyTorch implementation of Complex-YOLO paper with YoloV3PyTorchCV" + }, + { + num: NumberInt("704"), + value: "FastSpeech2 156PyTorch Implementation of FastSpeech 2 : Fast and High-Quality End-to-End Text to SpeechPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("705"), + value: "INQ pytorch 156A PyTorch implementation of \"Incremental Network Quantization: Towards Lossless CNNs with Low-Precision Weights\"PyTorchCV" + }, + { + num: NumberInt("706"), + value: "mildlyoverfitted 155Paper implementations from scratch and machine learning tutorialsPyTorchGenerative" + }, + { + num: NumberInt("707"), + value: "pytorch dual learning 155Implementation of Dual Learning NMT on PyTorchPyTorchNLPRL" + }, + { + num: NumberInt("708"), + value: "multidim positional encoding 155An implementation of 1D, 2D, and 3D positional encoding in Pytorch and TensorFlowPyTorchCVGenerative" + }, + { + num: NumberInt("709"), + value: "Interaction networks_tensorflow 154Tensorflow Implementation of Interaction Networks for Learning about Objects, Relations and PhysicsTensorFlowGenerativeGraph" + }, + { + num: NumberInt("710"), + value: "tfvos 154Semi-Supervised Video Object Segmentation (VOS) with Tensorflow. Includes implementation of *MaskRNN: Instance Level Video Object Segmentation (NIPS 2017)* as part of the NIPS Paper Implementation Challenge. TensorFlowCVGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("711"), + value: "xcenternet 154Fast anchor free Object Detection based on CenterNet (Objects As Points) and TTFNet (Training-Time-Friendly Network). Implemented in TensorFlow 2.4+.TensorFlowCVGenerativeGraphHealth" + }, + { + num: NumberInt("712"), + value: "pytorch layoutnet 154Pytorch implementation of LayoutNet.PyTorchCV" + }, + { + num: NumberInt("713"), + value: "houghnet 153[ECCV-20] Official PyTorch implementation of HoughNet, a voting-based object detector.PyTorchCVGenerative" + }, + { + num: NumberInt("714"), + value: "Adversarial Semisupervised Semantic Segmentation 153Pytorch Implementation of \"Adversarial Learning For Semi-Supervised Semantic Segmentation\" for ICLR 2018 Reproducibility ChallengePyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("715"), + value: "UFO 153Official PyTorch implementation of the A Unified Transformer Framework for Co-Segmentation, Co-Saliency Detection and Video Salient Object Detection.PyTorchCVNLPGenerative" + }, + { + num: NumberInt("716"), + value: "progressive_growing_of_gans_tensorflow 152Tensorflow implementation of PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATIONTensorFlowGenerative" + }, + { + num: NumberInt("717"), + value: "Faster RCNN_Tensorflow 152This is a tensorflow re-implementation of Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks.TensorFlowCVGenerative" + }, + { + num: NumberInt("718"), + value: "pytorch image comp rnn 152PyTorch implementation of Full Resolution Image Compression with Recurrent Neural NetworksPyTorchCVGenerative" + }, + { + num: NumberInt("719"), + value: "NGCF PyTorch 151PyTorch Implementation for Neural Graph Collaborative FilteringPyTorchGenerativeGraph" + }, + { + num: NumberInt("720"), + value: "meta learning lstm pytorch 151pytorch implementation of Optimization as a Model for Few-shot LearningPyTorchCVGraph" + }, + { + num: NumberInt("721"), + value: "IR Net 151This project is the PyTorch implementation of our accepted CVPR 2020 paper : forward and backward information retention for accurate binary neural networks.PyTorchCV" + }, + { + num: NumberInt("722"), + value: "focal loss 150TensorFlow implementation of focal lossTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("723"), + value: "torchcrepe 150Pytorch implementation of the CREPE pitch trackerPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("724"), + value: "soft intro vae pytorch 150[CVPR 2021 Oral] Official PyTorch implementation of Soft-IntroVAE from the paper \"Soft-IntroVAE: Analyzing and Improving Introspective Variational Autoencoders\"PyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("725"), + value: "role2vec 150A scalable Gensim implementation of \"Learning Role-based Graph Embeddings\" (IJCAI 2018).PyTorchGraph" + }, + { + num: NumberInt("726"), + value: "unsupervised depth completion visual inertial odometry 149Tensorflow implementation of Unsupervised Depth Completion from Visual Inertial Odometry (in RA-L January 2020 & ICRA 2020)TensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("727"), + value: "twitter sentiment cnn 149An implementation in TensorFlow of a convolutional neural network (CNN) to perform sentiment classification on tweets.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("728"), + value: "sunets 149PyTorch Implementation of Stacked U-Nets (SUNets)PyTorchCV" + }, + { + num: NumberInt("729"), + value: "AlphaGAN Matting 149This project is an unofficial implementation of AlphaGAN: Generative adversarial networks for natural image matting published at the BMVC 2018PyTorchCVGenerative" + }, + { + num: NumberInt("730"), + value: "hififace 148Unofficial PyTorch Implementation for HifiFace (https://arxiv.org/abs/2106.09965)PyTorchCVGenerative" + }, + { + num: NumberInt("731"), + value: "pytorch pos tagging 148A tutorial on how to implement models for part-of-speech tagging using PyTorch and TorchText.PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("732"), + value: "tensorflow mnist CVAE 147Tensorflow implementation of conditional variational auto-encoder for MNISTTensorFlowCVGenerative" + }, + { + num: NumberInt("733"), + value: "video2tfrecord 147Easily convert RGB video data (e.g. .avi) to the TensorFlow tfrecords file format for training e.g. a NN in TensorFlow. This implementation allows to limit the number of frames per video to be stored in the tfrecords.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("734"), + value: "video super resolution 147 a collection of classic tensorflow & pytorch cnn models' implementationPyTorchCVGenerative" + }, + { + num: NumberInt("735"), + value: "phasen 147A unofficial Pytorch implementation of Microsoft's PHASENPyTorchNLPAudio" + }, + { + num: NumberInt("736"), + value: "DBCNN PyTorch 147An experimental Pytorch implementation of Blind Image Quality Assessment Using A Deep Bilinear Convolutional Neural NetworkPyTorchCV" + }, + { + num: NumberInt("737"), + value: "perceiver io 147A PyTorch implementation of DeepMind's Perceiver IO with PyTorch Lightning scripts for distributed trainingPyTorchCVNLP" + }, + { + num: NumberInt("738"), + value: "DAGAN 146Fast Compressed Sensing MRI Reconstruction\nTensorFlowGenerative" + }, + { + num: NumberInt("739"), + value: "rcnn text classification 146Tensorflow Implementation of \"Recurrent Convolutional Neural Network for Text Classification\" (AAAI 2015)TensorFlowGenerative" + }, + { + num: NumberInt("740"), + value: "Semantic Image Synthesis via Adversarial Learning 146A PyTorch implementation of the paper \"Semantic Image Synthesis via Adversarial Learning\" in ICCV 2017. \nPyTorchCVGenerative" + }, + { + num: NumberInt("741"), + value: "CapsNet 146A PyTorch implementation of CapsNet based on NIPS 2017 paper \"Dynamic Routing Between Capsules\"PyTorchGenerativeGraph" + }, + { + num: NumberInt("742"), + value: "RfDNet 146Implementation of CVPR'21: RfD-Net: Point Scene Understanding by Semantic Instance ReconstructionPyTorchCV" + }, + { + num: NumberInt("743"), + value: "pointnet 146PyTorch implementation of \"PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation\" https://arxiv.org/abs/1612.00593PyTorchCV" + }, + { + num: NumberInt("744"), + value: "protest detection violence estimation 146Implementation of the model used in the paper Protest Activity Detection and Perceived Violence Estimation from Social Media Images (ACM Multimedia 2017)PyTorchCV" + }, + { + num: NumberInt("745"), + value: "RDN TensorFlow 145A TensorFlow implementation of CVPR 2018 paper \"Residual Dense Network for Image Super-Resolution\".TensorFlowCVGenerative" + }, + { + num: NumberInt("746"), + value: "DeepLab v3 plus cityscapes 145mIOU=80.02 on cityscapes. My implementation of deeplabv3+ (also know as 'Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation' based on the dataset of cityscapes).PyTorchCV" + }, + { + num: NumberInt("747"), + value: "keras coordconv 144Keras implementation of CoordConv for all Convolution layersTensorFlowCVGenerative" + }, + { + num: NumberInt("748"), + value: "conversation tensorflow 144TensorFlow implementation of Conversation ModelsTensorFlowNLPGenerativeGraphHealth" + }, + { + num: NumberInt("749"), + value: "graph2vec_tf 144This repository contains the \"tensorflow\" implementation of our paper \"graph2vec: Learning distributed representations of graphs\".TensorFlowGenerativeGraphHealth" + }, + { + num: NumberInt("750"), + value: "tensorflow yolo3 143tensorflow implementation of yolov3TensorFlowCVGenerative" + }, + { + num: NumberInt("751"), + value: "SRGAN PyTorch 143A simple and complete implementation of super-resolution paper.PyTorchCVGenerative" + }, + { + num: NumberInt("752"), + value: "tensorflow pix2pix 142A lightweight pix2pix Tensorflow implementation.TensorFlowGenerative" + }, + { + num: NumberInt("753"), + value: "maxl 142The implementation of \"Self-Supervised Generalisation with Meta Auxiliary Learning\" [NeurIPS 2019].PyTorchCVSelf-Supervised" + }, + { + num: NumberInt("754"), + value: "Aspect-level-sentiment 141Code and dataset for ACL2018 paper \"Exploiting Document Knowledge for Aspect-level Sentiment Classification\"\nPyTorchNLP" + }, + { + num: NumberInt("755"), + value: "CodeSLAM 141Implementation of CodeSLAM Learning a Compact, Optimisable Representation for Dense Visual SLAM paper (https://arxiv.org/pdf/1804.00874.pdf)PyTorchCV" + }, + { + num: NumberInt("756"), + value: "SAM DETR 140Official PyTorch Implementation of SAM-DETR (CVPR 2022)PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("757"), + value: "pytorch_sac_ae 140PyTorch implementation of Soft Actor-Critic + Autoencoder(SAC+AE) PyTorchCVRL" + }, + { + num: NumberInt("758"), + value: "LipNet PyTorch 140The state-of-art PyTorch implementation of the method described in the paper \"LipNet: End-to-End Sentence-level Lipreading\" (https://arxiv.org/abs/1611.01599)PyTorchCV" + }, + { + num: NumberInt("759"), + value: "GraphRec_PyTorch 140A PyTorch implementation of Graph Neural Networks for Social Recommendation (GraphRec)PyTorchGraph" + }, + { + num: NumberInt("760"), + value: "jaxlie 140Rigid transforms via Lie groups, in JAX!JAXNLP" + }, + { + num: NumberInt("761"), + value: "SoundNet tensorflow 139TensorFlow implementation of \"SoundNet\".TensorFlowGenerativeAudio" + }, + { + num: NumberInt("762"), + value: "NeuralPull 139Implementation of ICML'2021:Neural-Pull: Learning Signed Distance Functions from Point Clouds by Learning to Pull Space onto SurfacesTensorFlowCVGenerative" + }, + { + num: NumberInt("763"), + value: "OneShotTranslation 139Pytorch implementation of \"One-Shot Unsupervised Cross Domain Translation\" NIPS 2018PyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("764"), + value: "DeepLabv3_MobileNetv2_PyTorch 139A PyTorch Implementation of MobileNetv2+DeepLabv3PyTorchCVGenerativeRL" + }, + { + num: NumberInt("765"), + value: "UCTransNet 139Implementation of our AAAI'22 work: 'UCTransNet: Rethinking the Skip Connections in U-Net from a Channel-wise Perspective with Transformer'.PyTorchCV" + }, + { + num: NumberInt("766"), + value: "flax 139general purpose programming language, in the vein of C++JAXNLP" + }, + { + num: NumberInt("767"), + value: "reinforcement_learning 138Implementation of selected reinforcement learning algorithms in Tensorflow. A3C, DDPG, REINFORCE, DQN, etc.TensorFlowGenerativeRL" + }, + { + num: NumberInt("768"), + value: "rest.vertx 138A JAX-RS like annotation processor for vert.x verticals and moreJAXGenerative" + }, + { + num: NumberInt("769"), + value: "SampleRNN 137Tensorflow implementation of SampleRNNTensorFlowGenerativeAudio" + }, + { + num: NumberInt("770"), + value: "Fast Transformer 137An implementation of Fastformer: Additive Attention Can Be All You Need, a Transformer Variant in TensorFlowTensorFlowGenerative" + }, + { + num: NumberInt("771"), + value: "deep clustering 136A tensorflow implementation for Deep clustering: Discriminative embeddings for segmentation and separation TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("772"), + value: "Keras_insightface 136Insightface Keras implementationTensorFlowCVNLPGenerativeRL" + }, + { + num: NumberInt("773"), + value: "Parallel Tacotron2 136PyTorch Implementation of Google's Parallel Tacotron 2: A Non-Autoregressive Neural TTS Model with Differentiable Duration ModelingPyTorchNLPUnsupervisedAudioGraph" + }, + { + num: NumberInt("774"), + value: "bert relation classification 136A pytorch implementation of BERT-based relation classificationPyTorchGenerative" + }, + { + num: NumberInt("775"), + value: "visual attribution 136Pytorch Implementation of recent visual attribution methods for model interpretabilityPyTorchCV" + }, + { + num: NumberInt("776"), + value: "BVAE TTS 136Official implementation of BVAE-TTSPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("777"), + value: "MnemonicReader 136A PyTorch implementation of Mnemonic Reader for the Machine Comprehension taskPyTorchNLP" + }, + { + num: NumberInt("778"), + value: "maskgit 136Official Jax Implementation of MaskGITJAXCV" + }, + { + num: NumberInt("779"), + value: "dilation tensorflow 135A native Tensorflow implementation of semantic segmentation according to Multi-Scale Context Aggregation by Dilated Convolutions (2016). Optionally uses the pretrained weights by the authors.TensorFlowCVGenerative" + }, + { + num: NumberInt("780"), + value: "pytorch cutpaste 135unoffical and work in progress PyTorch implementation of CutPastePyTorchCVNLPGenerativeAudioSelf-Supervised" + }, + { + num: NumberInt("781"), + value: "pytorch smoothgrad 135SmoothGrad implementation in PyTorch PyTorchCV" + }, + { + num: NumberInt("782"), + value: "snail pytorch 134Implementation of \"A Simple Neural Attentive Meta-Learner\" (SNAIL, https://arxiv.org/pdf/1707.03141.pdf) in PyTorchPyTorchCV" + }, + { + num: NumberInt("783"), + value: "GDWCT 133Official PyTorch implementation of GDWCT (CVPR 2019, oral)PyTorchCVNLPGenerative" + }, + { + num: NumberInt("784"), + value: "deep auto punctuation 133a pytorch implementation of auto-punctuation learned character by characterPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("785"), + value: "SSD pytorch 133SSD: Single Shot MultiBox Detector pytorch implementation focusing on simplicityPyTorchCV" + }, + { + num: NumberInt("786"), + value: "Feature Selective Anchor Free Module for Single Shot Object Detection 133A PyTorch Implementation of Feature Selective Anchor-Free Module for Single-Shot Object Detection (CVPR'19)PyTorchCVGenerative" + }, + { + num: NumberInt("787"), + value: "Medical Report Generation 133A pytorch implementation of On the Automatic Generation of Medical Imaging Reports.PyTorchCVNLP" + }, + { + num: NumberInt("788"), + value: "360SD Net 132Pytorch implementation of ICRA 2020 paper \"360 Stereo Depth Estimation with Learnable Cost Volume\"PyTorchCV" + }, + { + num: NumberInt("789"), + value: "**MobileNetV2**(TVM Supported) 132This is a MXNet implementation of MobileNetV2 architecture as described in the paper Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation.MXNetCV" + }, + { + num: NumberInt("790"), + value: "InvDN 130Implementation for the paper: Invertible Denoising Network: A Light Solution for Real Noise Removal (CVPR2021).PyTorchCV" + }, + { + num: NumberInt("791"), + value: "WS_DAN_PyTorch 130PyTorch Implementation Of WS-DAN(See Better Before Looking Closer: Weakly Supervised Data Augmentation Network for Fine-Grained Visual Classification)PyTorchCVGenerative" + }, + { + num: NumberInt("792"), + value: "adamwr 130Implements https://arxiv.org/abs/1711.05101 AdamW optimizer, cosine learning rate scheduler and \"Cyclical Learning Rates for Training Neural Networks\" https://arxiv.org/abs/1506.01186 for PyTorch frameworkPyTorchRL" + }, + { + num: NumberInt("793"), + value: "bandit-nmt 129This is code repo for our EMNLP 2017 paper \"Reinforcement Learning for Bandit Neural Machine Translation with Simulated Human Feedback\", which implements the A2C algorithm on top of a neural encoder-decoder model and benchmarks the combination under simulated noisy rewards.\nPyTorchNLPRL" + }, + { + num: NumberInt("794"), + value: "deeplearning.ai pytorch 129PyTorch Implementations of Coursera's Deep Learning(deeplearning.ai) SpecializationPyTorchGenerative" + }, + { + num: NumberInt("795"), + value: "normalizing flows 129PyTorch implementation of normalizing flow modelsPyTorchGenerative" + }, + { + num: NumberInt("796"), + value: "PyTorch Pyramid Feature Attention Network for Saliency Detection 129 PyTorch implementation of the CVPR 2019 paper Pyramid Feature Attention Network for Saliency DetectionPyTorchCV" + }, + { + num: NumberInt("797"), + value: "IFAN 129[CVPR 2021] Official PyTorch Implementation for \"Iterative Filter Adaptive Network for Single Image Defocus Deblurring\"PyTorchCV" + }, + { + num: NumberInt("798"), + value: "neuron-selectivity-transfer 129This code is a re-implementation of the imagenet classification experiments in the paper Like What You Like: Knowledge Distill via Neuron Selectivity TransferMXNetCV" + }, + { + num: NumberInt("799"), + value: "rebias 128Official Pytorch implementation of ReBias (Learning De-biased Representations with Biased Representations), ICML 2020PyTorchCVNLPGenerative" + }, + { + num: NumberInt("800"), + value: "StarGAN Voice Conversion 2 128A pytorch implementation of StarGAN-VC2PyTorchGenerative" + }, + { + num: NumberInt("801"), + value: "MFF pytorch 128Motion Fused Frames implementation in PyTorch, codes and pretrained models.PyTorchCVGenerative" + }, + { + num: NumberInt("802"), + value: "EEGNet 128[Old version] PyTorch implementation of EEGNet: A Compact Convolutional Network for EEG-based Brain-Computer Interfaces - https://arxiv.org/pdf/1611.08024.pdfPyTorchNLP" + }, + { + num: NumberInt("803"), + value: "AUNets 128Pytorch implementation of Multi-View Dynamic Facial Action Unit Detection, Image and Vision Computing (2018)PyTorchCVGenerativeHealth" + }, + { + num: NumberInt("804"), + value: "Factorized TDNN 128PyTorch implementation of the Factorized TDNN (TDNN-F) from \"Semi-Orthogonal Low-Rank Matrix Factorization for Deep Neural Networks\" and KaldiPyTorchNLPAudio" + }, + { + num: NumberInt("805"), + value: "moco 126Unofficial implementation with pytorch DistributedDataParallel for \"MoCo: Momentum Contrast for Unsupervised Visual Representation Learning\"PyTorchCVUnsupervised" + }, + { + num: NumberInt("806"), + value: "torch ac 126Recurrent and multi-process PyTorch implementation of deep reinforcement Actor-Critic algorithms A2C and PPOPyTorchCVRL" + }, + { + num: NumberInt("807"), + value: "pygoturn 126PyTorch implementation of GOTURN object tracker: Learning to Track at 100 FPS with Deep Regression Networks (ECCV 2016)PyTorchCVNLP" + }, + { + num: NumberInt("808"), + value: "EveryPixelMatters 126Implementation of ECCV 2020 paper \"Every Pixel Matters: Center-aware Feature Alignment for Domain Adaptive Object Detector\"PyTorchCV" + }, + { + num: NumberInt("809"), + value: "flaxmodels 126Pretrained models for Jax/Flax: StyleGAN2, GPT2, VGG, ResNet, etc.JAXCVNLPGenerativeGraph" + }, + { + num: NumberInt("810"), + value: "Siam NestedUNet 125The pytorch implementation for \"SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images\"PyTorchCVNLPGenerative" + }, + { + num: NumberInt("811"), + value: "Hierarchical Attention Network 125Implementation of Hierarchical Attention Networks in PyTorchPyTorchNLP" + }, + { + num: NumberInt("812"), + value: "RecSys_PyTorch 125PyTorch implementations of Top-N recommendation, collaborative filtering recommenders.PyTorchGenerativeGraph" + }, + { + num: NumberInt("813"), + value: "Single Human Parsing LIP 125PSPNet implemented in PyTorch for single-person human parsing task, evaluating on Look Into Person (LIP) dataset.PyTorchCVGenerative" + }, + { + num: NumberInt("814"), + value: "mtad gat pytorch 125PyTorch implementation of MTAD-GAT (Multivariate Time-Series Anomaly Detection via Graph Attention Networks) by Zhao et. al (2020, https://arxiv.org/abs/2009.02040).PyTorchGenerativeGraph" + }, + { + num: NumberInt("815"), + value: "Bert_OCR.pytorch 124Unofficial PyTorch implementation of 2D Attentional Irregular Scene Text RecognizerPyTorchCV" + }, + { + num: NumberInt("816"), + value: "RepSurf 124[CVPR 2022 Oral] Official implementation for \"Surface Representation for Point Clouds\"PyTorchCV" + }, + { + num: NumberInt("817"), + value: "CBAM tensorflow 123CBAM implementation on TensowFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("818"), + value: "pytorch_spline_conv 123Implementation of the Spline-Based Convolution Operator of SplineCNN in PyTorchPyTorchGenerativeGraph" + }, + { + num: NumberInt("819"), + value: "ViewAL 123[CVPR'20] Implementation for the paper \"ViewAL: Active Learning with Viewpoint Entropy for Semantic Segmentation\"PyTorchCV" + }, + { + num: NumberInt("820"), + value: "tree math 123Mathematical operations for JAX pytreesJAXGenerative" + }, + { + num: NumberInt("821"), + value: "SASRec.pytorch 122PyTorch(1.6+) implementation of https://github.com/kang205/SASRecPyTorchGenerative" + }, + { + num: NumberInt("822"), + value: "MXNMT 122This is an implementation of seq2seq with attention for neural machine translation with MXNet.MXNetNLP" + }, + { + num: NumberInt("823"), + value: "Mnemonic Descent Method 121Tensorflow implementation of \"Mnemonic Descent Method: A recurrent process applied for end-to-end face alignment\"\nTensorFlowNLP" + }, + { + num: NumberInt("824"), + value: "OpenAI CLIP 121Simple implementation of OpenAI CLIP model in PyTorch.PyTorchCVNLPGraph" + }, + { + num: NumberInt("825"), + value: "chainer_examples 121Machine Translation, word segmentation, and language model\nChainerCVNLP" + }, + { + num: NumberInt("826"), + value: "CipherGAN 120TensorFlow implementation of CipherGANTensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("827"), + value: "captionGen 120Generate captions for an image using PyTorch. \nPyTorchCVNLP" + }, + { + num: NumberInt("828"), + value: "Visualizing CNNs for monocular depth estimation 119official implementation of \"Visualization of Convolutional Neural Networks for Monocular Depth Estimation\"PyTorchCV" + }, + { + num: NumberInt("829"), + value: "latent pose reenactment 119The authors' implementation of the \"Neural Head Reenactment with Latent Pose Descriptors\" (CVPR 2020) paper.PyTorchCVGenerative" + }, + { + num: NumberInt("830"), + value: "sightseq 119Computer vision tools for fairseq, containing PyTorch implementation of text recognition and object detectionPyTorchCVNLP" + }, + { + num: NumberInt("831"), + value: "jaxfg 119Factor graphs and nonlinear optimization for JAXJAXGenerativeGraphHealth" + }, + { + num: NumberInt("832"), + value: "deeply recursive cnn tf 118Test implementation of Deeply-Recursive Convolutional Network for Image Super-ResolutionTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("833"), + value: "FaceDetector 118A re-implementation of mtcnn. Joint training, tutorial and deployment together.PyTorchCV" + }, + { + num: NumberInt("834"), + value: "PerceptualGAN 118Pytorch implementation of Image Manipulation with Perceptual Discriminators paperPyTorchCVNLPGenerative" + }, + { + num: NumberInt("835"), + value: "Keras OneClassAnomalyDetection 118[5 FPS - 150 FPS] Learning Deep Features for One-Class Classification (AnomalyDetection). Corresponds RaspberryPi3. Convert to Tensorflow, ONNX, Caffe, PyTorch. Implementation by Python + OpenVINO/Tensorflow Lite.PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("836"), + value: "Carla_iLQR_MPC 118Implementation of the real-time MPC based on iLQR in Carla simulatorJAXCVNLP" + }, + { + num: NumberInt("837"), + value: "DRIT Tensorflow 117Simple Tensorflow implementation of \"Diverse Image-to-Image Translation via Disentangled Representations\" (ECCV 2018 Oral)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("838"), + value: "rnn text classification tf 117Tensorflow Implementation of Recurrent Neural Network (Vanilla, LSTM, GRU) for Text ClassificationTensorFlowNLPGenerative" + }, + { + num: NumberInt("839"), + value: "M NMF 117An implementation of \"Community Preserving Network Embedding\" (AAAI 2017)TensorFlowGenerativeGraph" + }, + { + num: NumberInt("840"), + value: "virtual adversarial training 117Pytorch implementation of Virtual Adversarial TrainingPyTorchGenerative" + }, + { + num: NumberInt("841"), + value: "univnet 117Unofficial PyTorch Implementation of UnivNet Vocoder (https://arxiv.org/abs/2106.07889)PyTorchNLPGenerativeAudioGraph" + }, + { + num: NumberInt("842"), + value: "MaskTrack 117Implementation of MaskTrack method which is the baseline of several state-of-the-art video object segmentation methods in PytorchPyTorchCV" + }, + { + num: NumberInt("843"), + value: "MuseMorphose 117PyTorch implementation of MuseMorphose, a Transformer-based model for music style transfer.PyTorchGenerative" + }, + { + num: NumberInt("844"), + value: "WaDIQaM 117[unofficial] Pytorch implementation of WaDIQaM in TIP2018, Bosse S. et al. (Deep neural networks for no-reference and full-reference image quality assessment)PyTorchCVNLP" + }, + { + num: NumberInt("845"), + value: "minDiffusion 117Self-contained, minimalistic implementation of diffusion models with Pytorch.PyTorchCVGenerative" + }, + { + num: NumberInt("846"), + value: "bayeSDE 117Code for \"Infinitely Deep Bayesian Neural Networks with Stochastic Differential Equations\"JAXCVNLP" + }, + { + num: NumberInt("847"), + value: "pyg_autoscale 116Implementation of \"GNNAutoScale: Scalable and Expressive Graph Neural Networks via Historical Embeddings\" in PyTorchPyTorchGraph" + }, + { + num: NumberInt("848"), + value: "StreamingSpeakerDiarization 116Lightweight python library for speaker diarization in real time implemented in pytorchPyTorchCVNLPAudio" + }, + { + num: NumberInt("849"), + value: "l2p 116Learning to Prompt (L2P) for Continual Learning @ CVPR22JAXCV" + }, + { + num: NumberInt("850"), + value: "DCNets 115 Implementation for in CVPR'18.TensorFlowCVGenerative" + }, + { + num: NumberInt("851"), + value: "person reid 115Tensorflow implementation of \"An Improved Deep Learning Architecture for Person Re-Identification\"TensorFlowCVGenerative" + }, + { + num: NumberInt("852"), + value: "DSFD tensorflow 115a tensorflow implement dsfd face detectorTensorFlowCVGenerative" + }, + { + num: NumberInt("853"), + value: "WaveVAE 115A Pytorch implementation of WaveVAE (\"Parallel Neural Text-to-Speech\")PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("854"), + value: "image similarity using deep ranking 115 PyTorch implementation of \"Learning Fine-grained Image Similarity with Deep Ranking\" (arXiv:1404.4661)PyTorchCV" + }, + { + num: NumberInt("855"), + value: "FasterRCNN pytorch 115FasterRCNN is implemented in VGG, ResNet and FPN base. PyTorchCV" + }, + { + num: NumberInt("856"), + value: "DR GAN by pytorch 115An implement of Disentangled Representation Learning GAN for Pose-Invariant Face RecognitionPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("857"), + value: "famos 114Pytorch implementation of the paper \"Copy the Old or Paint Anew? An Adversarial Framework for (non-) Parametric Image Stylization\" available at http://arxiv.org/abs/1811.09236.\nPyTorchCVGenerative" + }, + { + num: NumberInt("858"), + value: "Tacotron2 PyTorch 114Yet another PyTorch implementation of Tacotron 2 with reduction factor and faster training speed.PyTorchCVNLPGenerativeAudio" + }, + { + num: NumberInt("859"), + value: "tf layer norm 113TensorFlow implementation of normalizations such as Layer Normalization, HyperNetworks.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("860"), + value: "paysage 113Unsupervised learning and generative models in python/pytorch.\nPyTorchUnsupervised" + }, + { + num: NumberInt("861"), + value: "pytorch psetae 113PyTorch implementation of the model presented in \"Satellite Image Time Series Classification with Pixel-Set Encoders and Temporal Self-Attention\"PyTorchCV" + }, + { + num: NumberInt("862"), + value: "DocEE 112 A toolkit for document-level event extraction, containing some SOTA model implementations.PyTorchNLPGenerativeGraph" + }, + { + num: NumberInt("863"), + value: "efficientnet jax 112EfficientNet, MobileNetV3, MobileNetV2, MixNet, etc in JAX w/ Flax Linen and ObjaxJAXCVGenerative" + }, + { + num: NumberInt("864"), + value: "portrait matting unet flask 111Portrait Mating implementation in UNet with PyTorch.PyTorchCV" + }, + { + num: NumberInt("865"), + value: "ChangeFormer 111Official PyTorch implementation of our IGARSS'22 paper: A Transformer-Based Siamese Network for Change DetectionPyTorchCVNLPRLAudio" + }, + { + num: NumberInt("866"), + value: "3D BoundingBox 111PyTorch implementation for 3D Bounding Box Estimation Using Deep Learning and GeometryPyTorchGenerative" + }, + { + num: NumberInt("867"), + value: "indrnn pytorch 111pytorch implementation of Independently Recurrent Neural Networks https://arxiv.org/abs/1803.04831PyTorchGenerative" + }, + { + num: NumberInt("868"), + value: "Deep Alignment Network tensorflow 110A re-implementation of Deep-Alignment-Network using TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("869"), + value: "back2future.pytorch 110This is a Pytorch implementation of Janai, J., Güney, F., Ranjan, A., Black, M. and Geiger, A., Unsupervised Learning of Multi-Frame Optical Flow with Occlusions. ECCV 2018.\nPyTorchUnsupervised" + }, + { + num: NumberInt("870"), + value: "WaveFlow 110A PyTorch implementation of \"WaveFlow: A Compact Flow-based Model for Raw Audio\"PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("871"), + value: "multi person tracker 110Simple Multi Person Tracker implementation in PyTorchPyTorchCV" + }, + { + num: NumberInt("872"), + value: "MANO 110A PyTorch Implementation of MANO hand model.PyTorchCVNLPGraph" + }, + { + num: NumberInt("873"), + value: "dialogue understanding 110This repository contains PyTorch implementation for the baseline models from the paper Utterance-level Dialogue Understanding: An Empirical StudyPyTorchCV" + }, + { + num: NumberInt("874"), + value: "Image Embedding Learning (Gluon:star 110Apache MXNet (incubating) is a deep learning framework designed for both efficiency and flexibility.MXNetCV" + }, + { + num: NumberInt("875"), + value: "pytorch detect to track 109A pytorch implementation of Detect and Track (https://arxiv.org/abs/1710.03958)PyTorchCVGenerative" + }, + { + num: NumberInt("876"), + value: "AgentFormer 109[ICCV 2021] Official PyTorch Implementation of \"AgentFormer: Agent-Aware Transformers for Socio-Temporal Multi-Agent Forecasting\".PyTorchGenerative" + }, + { + num: NumberInt("877"), + value: "QATM_pytorch 109Pytorch Implementation of QATM:Quality-Aware Template Matching For Deep LearningPyTorchCVGenerative" + }, + { + num: NumberInt("878"), + value: "Efficient VDVAE 109Official Pytorch and JAX implementation of \"Efficient-VDVAE: Less is more\"PyTorchCVNLPGenerative" + }, + { + num: NumberInt("879"), + value: "A Convolutional Neural Network Cascade for Face Detection 108TensorFlow implementation of \"A Convolutional Neural Network Cascade for Face Detection\", CVPR 2015TensorFlowGenerative" + }, + { + num: NumberInt("880"), + value: "BSConv 108Reference implementation for Blueprint Separable Convolutions (CVPR 2020)PyTorchCV" + }, + { + num: NumberInt("881"), + value: "Samsung DRL Code 108A repository for implementation of deep reinforcement learning lectured at SamsungPyTorchRL" + }, + { + num: NumberInt("882"), + value: "Restoring Extremely Dark Images In Real Time 108The project is the official implementation of our CVPR 2021 paper, \"Restoring Extremely Dark Images in Real Time\"PyTorchCV" + }, + { + num: NumberInt("883"), + value: "pytorch lightning gans 108Collection of PyTorch Lightning implementations of Generative Adversarial Network varieties presented in research papers.PyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("884"), + value: "yolo v4 tf.keras 107A simple tf.keras implementation of YOLO v4TensorFlowCVGenerative" + }, + { + num: NumberInt("885"), + value: "torch_backbones 107Unofficial implementations of some classical CNN backbones with pytorchPyTorchGenerative" + }, + { + num: NumberInt("886"), + value: "RGCN 107Pytorch implementation of a RGCN Link Prediction ModelPyTorchGenerativeGraph" + }, + { + num: NumberInt("887"), + value: "pytorch_shake_shake 107A PyTorch implementation of shake-shakePyTorchCV" + }, + { + num: NumberInt("888"), + value: "Tacotron pytorch 107A Pytorch Implementation of Tacotron: End-to-end Text-to-speech Deep-Learning ModelPyTorchCVNLPAudio" + }, + { + num: NumberInt("889"), + value: "StyleSpeech 107PyTorch Implementation of Meta-StyleSpeech : Multi-Speaker Adaptive Text-to-Speech GenerationPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("890"), + value: "ViTGAN 107A PyTorch implementation of ViTGAN based on paper ViTGAN: Training GANs with Vision Transformers.PyTorchGenerative" + }, + { + num: NumberInt("891"), + value: "jax_cosmo 107A differentiable cosmology library in JAXJAXNLPGenerative" + }, + { + num: NumberInt("892"), + value: "evaluating_bdl 106Official implementation of \"Evaluating Scalable Bayesian Deep Learning Methods for Robust Computer Vision\", CVPR Workshops 2020.PyTorchCVNLPSelf-Supervised" + }, + { + num: NumberInt("893"), + value: "Pytorch Image Translation GANs 106Pytorch implementations of most popular image-translation GANs, including Pixel2Pixel, CycleGAN and StarGAN.PyTorchCVNLPGenerative" + }, + { + num: NumberInt("894"), + value: "lffont 106Official PyTorch implementation of LF-Font (Few-shot Font Generation with Localized Style Representations and Factorization) AAAI 2021PyTorchCVNLP" + }, + { + num: NumberInt("895"), + value: "jax_verify 106Neural network verification in JAXJAXNLP" + }, + { + num: NumberInt("896"), + value: "VSR DUF Reimplement 105It is a re-implementation of paper named \"Deep Video Super-Resolution Network Using Dynamic Upsampling Filters Without Explicit Motion Compensation\" called VSR-DUF model. There are both training codes and test codes about VSR-DUF based tensorflow.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("897"), + value: "CBAM tensorflow slim 105CBAM implementation on TensorFlow SlimTensorFlowCVGenerative" + }, + { + num: NumberInt("898"), + value: "DSQ 105pytorch implementation of \"Differentiable Soft Quantization: Bridging Full-Precision and Low-Bit Neural Networks\"PyTorchCV" + }, + { + num: NumberInt("899"), + value: "stagewise knowledge distillation 105Code implementation of Data Efficient Stagewise Knowledge Distillation paper.PyTorchCVNLP" + }, + { + num: NumberInt("900"), + value: "CapsNet_guide_PyTorch 105A tutorial-style implementation of CapsNet in PyTorchPyTorchCV" + }, + { + num: NumberInt("901"), + value: "DDC transfer learning 105A simple implementation of Deep Domain Confusion: Maximizing for Domain InvariancePyTorchGenerative" + }, + { + num: NumberInt("902"), + value: "personlab tf 104implementation of PersonLab(https://arxiv.org/abs/1803.08225) using TF-slimTensorFlowCVGenerative" + }, + { + num: NumberInt("903"), + value: "unified gan tensorflow 104A Tensorflow implementation of GAN, WGAN and WGAN with gradient penalty.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("904"), + value: "Recursive CNNs 104Implementation of my paper \"Real-time Document Localization in Natural Images by Recursive Application of a CNN.\"PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("905"), + value: "Cost Aggregation transformers 104Official implementation of CATsPyTorchCVAudio" + }, + { + num: NumberInt("906"), + value: "local relational nets 104A Pytorch implementation for the paper Local Relational Networks for Image Recognition (https://arxiv.org/pdf/1904.11491.pdf)PyTorchCVGenerative" + }, + { + num: NumberInt("907"), + value: "StereoNet 103A customized implementation of the paper \"StereoNet: guided hierarchical refinement for real-time edge-aware depth prediction\"PyTorchCVGenerative" + }, + { + num: NumberInt("908"), + value: "Neural Process Family 103Code for the Neural Processes website and replication of 4 papers on NPs. Pytorch implementation. PyTorchCV" + }, + { + num: NumberInt("909"), + value: "pytorch polygon rnn 103Pytorch implementation of Polygon-RNN(http://www.cs.toronto.edu/polyrnn/poly_cvpr17/)PyTorchCVNLPGenerative" + }, + { + num: NumberInt("910"), + value: "AutoEncoder Based Communication System 102Tensorflow Implementation and result of Auto-encoder Based Communication System From Research Paper : \"An Introduction to Deep Learning for the Physical Layer\" http://ieeexplore.ieee.org/document/8054694/TensorFlowNLPGenerative" + }, + { + num: NumberInt("911"), + value: "VIB pytorch 102Pytorch implementation of Deep Variational Information BottleneckPyTorchGenerative" + }, + { + num: NumberInt("912"), + value: "DST CBC 102Implementation of our paper \"DMT: Dynamic Mutual Training for Semi-Supervised Learning\"PyTorchCVGraph" + }, + { + num: NumberInt("913"), + value: "movenet.pytorch 102 A Pytorch implementation of MoveNet from Google. Include training code and pre-trained model.PyTorchGenerative" + }, + { + num: NumberInt("914"), + value: "panoptic reconstruction 102Official implementation of the NeurIPS 2021 paper \"Panoptic 3D Scene Reconstruction from a Single RGB Image\"PyTorchCVGenerative" + }, + { + num: NumberInt("915"), + value: "PNASNet.TF 101TensorFlow implementation of PNASNet-5 on ImageNetTensorFlowCVGenerative" + }, + { + num: NumberInt("916"), + value: "CoGAN tensorflow 101Implement Coupled Generative Adversarial Networks in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("917"), + value: "MNasNet Keras Tensorflow 101A Tensorflow Keras implementation (Graph and eager execution) of Mnasnet: MnasNet: Platform-Aware Neural Architecture Search for Mobile. TensorFlowCVGenerative" + }, + { + num: NumberInt("918"), + value: "pytorch_DoReFaNet 101A pytorch implementation of DoReFa-NetPyTorchCV" + }, + { + num: NumberInt("919"), + value: "pytorch_pose_proposal_networks 101Pytorch implementation of pose proposal networksPyTorchCVGenerative" + }, + { + num: NumberInt("920"), + value: "Zero DCE 101Pytorch implementation of paper \"Zero Reference low-light image enhancement\"PyTorchCV" + }, + { + num: NumberInt("921"), + value: "yolov5_deepsort_tensorrt 101This repo uses YOLOv5 and DeepSORT to implement object tracking algorithm. Also using TensorRTX to transform model to engine, and deploying all code on the NVIDIA Xavier with TensorRT further.PyTorchCVAudio" + }, + { + num: NumberInt("922"), + value: "pytorch_mppi 101Model Predictive Path Integral (MPPI) with approximate dynamics implemented in pytorchPyTorchNLPRL" + }, + { + num: NumberInt("923"), + value: "TensorFlow NEAT 100TensorFlow Eager implementation of NEAT and Adaptive HyperNEATTensorFlowGenerativeGraph" + }, + { + num: NumberInt("924"), + value: "pytorch_image_classifier 100Minimal But Practical Image Classifier Pipline Using Pytorch, Finetune on ResNet18, Got 99% Accuracy on Own Small Datasets. \nPyTorchCV" + }, + { + num: NumberInt("925"), + value: "CorrPM 100Pytorch implementation of CVPR2020 paper \"Correlating Edge, Pose with Parsing\"PyTorchCV" + }, + { + num: NumberInt("926"), + value: "Pytorch Basic GANs 100Simple Pytorch implementations of most used Generative Adversarial Network (GAN) varieties.PyTorchGenerative" + }, + { + num: NumberInt("927"), + value: "jackson jaxrs providers 100Multi-module project that contains Jackson-based \"old\" JAX-RS (ones under `javax.ws.rs`) providers for JSON, XML, YAML, Smile, CBOR formatsJAXNLPGenerativeHealth" + }, + { + num: NumberInt("928"), + value: "segmentation 99Tensorflow implementation : U-net and FCN with global convolution TensorFlowCVGenerative" + }, + { + num: NumberInt("929"), + value: "ppo 99Proximal Policy Optimization implementation with TensorFlowTensorFlowGenerativeRL" + }, + { + num: NumberInt("930"), + value: "pytorch PCN 99Pytorch implementation of PCNPyTorchCV" + }, + { + num: NumberInt("931"), + value: "SEGAN 99A PyTorch implementation of SEGAN based on INTERSPEECH 2017 paper \"SEGAN: Speech Enhancement Generative Adversarial Network\"PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("932"), + value: "D3Feat.pytorch 99[PyTorch] Official Implementation of CVPR'20 oral paper - D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features https://arxiv.org/abs/2003.03164PyTorchGenerativeSelf-Supervised" + }, + { + num: NumberInt("933"), + value: "DiffGAN TTS 99PyTorch Implementation of DiffGAN-TTS: High-Fidelity and Efficient Text-to-Speech with Denoising Diffusion GANsPyTorchNLPGenerativeAudioGraph" + }, + { + num: NumberInt("934"), + value: "TF SegNet 98SegNet-like network implemented in TensorFlow to use for segmenting aerial imagesTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("935"), + value: "BicycleGAN pytorch 98Pytorch implementation of BicycleGAN with implementation detailsPyTorchCVNLPGenerative" + }, + { + num: NumberInt("936"), + value: "pytorch dann 98A PyTorch implementation for Unsupervised Domain Adaptation by BackpropagationPyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("937"), + value: "incremental learning 98Pytorch implementation of ACCV18 paper \"Revisiting Distillation and Incremental Classifier Learning.\" PyTorchGenerative" + }, + { + num: NumberInt("938"), + value: "RFC 98[NeurIPS 2020] Official PyTorch Implementation of \"Residual Force Control for Agile Human Behavior Imitation and Extended Motion Synthesis\". NeurIPS 2020.PyTorchRL" + }, + { + num: NumberInt("939"), + value: "ICNet pytorch 98ICNet implemented by pytorch, for real-time semantic segmentation on high-resolution images, mIOU=71.0 on cityscapes, single inference time is 19ms, FPS is 52.6.PyTorchCV" + }, + { + num: NumberInt("940"), + value: "tf_texture_net 97TensorFlow implementation of DmitryUlyanov/texture_netsTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("941"), + value: "DiffSinger 97PyTorch implementation of DiffSinger: Singing Voice Synthesis via Shallow Diffusion Mechanism (focused on DiffSpeech)PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("942"), + value: "Jittor MLP 97Unofficial Implementation of MLP-Mixer, gMLP, resMLP, Vision Permutator, S2MLP, S2MLPv2, RaftMLP, HireMLP, ConvMLP, AS-MLP, SparseMLP, ConvMixer, SwinMLP, RepMLPNet, WaveMLP, MorphMLP, DynaMixer, MS-MLP, Sequencer2D in Jittor and PyTorch! Now, Rearrange and Reduce in einops.layers.jittor are support!! trunc_normal_ is supported for Jittor!! MLP Paper is uploaded!PyTorchCV" + }, + { + num: NumberInt("943"), + value: "rl examples 96Examples of published reinforcement learning algorithms in recent literature implemented in TensorFlowTensorFlowGenerativeRL" + }, + { + num: NumberInt("944"), + value: "insightface 96implementation of insightface by using TensorflowTensorFlowGenerative" + }, + { + num: NumberInt("945"), + value: "dialog nlu 96Tensorflow and Keras implementation of the state of the art researches in Dialog System NLUTensorFlowGenerative" + }, + { + num: NumberInt("946"), + value: "Categorical DQN 96A PyTorch Implementation of Categorical DQN from A Distributional Perspective on Reinforcement Learning.\nPyTorchRL" + }, + { + num: NumberInt("947"), + value: "efficientnet pytorch 96A PyTorch implementation of \"EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks\".PyTorchGenerative" + }, + { + num: NumberInt("948"), + value: "pytorch res2net 96PyTorch implementation of Res2NetPyTorchCV" + }, + { + num: NumberInt("949"), + value: "Tacotron 96A PyTorch implementation of Location-Relative Attention Mechanisms For Robust Long-Form Speech SynthesisPyTorchNLPAudio" + }, + { + num: NumberInt("950"), + value: "100 Days of ML Code 96A 100 Day ML Challenge to learn and implement ML/DL concepts ranging from the basics of Machine Learning to advanced Deep Learning.PyTorchCVNLPGenerativeRLUnsupervisedGraphHealth" + }, + { + num: NumberInt("951"), + value: "tfvaegan 96[ECCV 2020] Official Pytorch implementation for \"Latent Embedding Feedback and Discriminative Features for Zero-Shot Classification\". SOTA results for ZSL and GZSLPyTorchCVGenerative" + }, + { + num: NumberInt("952"), + value: "pytorch_violet 96A PyTorch implementation of VIOLETPyTorchCVNLPGenerative" + }, + { + num: NumberInt("953"), + value: "swagger gradle plugin 96JAX-RS & SpringMVC supported gradle build plugin to generate Swagger documentationJAXNLPGenerative" + }, + { + num: NumberInt("954"), + value: "jaxb xew plugin 96JAXB @XmlElementWrapper PluginJAXNLPGenerativeRL" + }, + { + num: NumberInt("955"), + value: "NVIDIA/unsupervised-video-interpolation 95A PyTorch Implementation of Unsupervised Video Interpolation Using Cycle Consistency, In ICCV 2019. \nPyTorchUnsupervised" + }, + { + num: NumberInt("956"), + value: "GPT2 95PyTorch Implementation of OpenAI GPT-2PyTorchNLPUnsupervisedGraph" + }, + { + num: NumberInt("957"), + value: "segan pytorch 95SEGAN pytorch implementation https://arxiv.org/abs/1703.09452PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("958"), + value: "SpineNet Pytorch 95This project is a kind of implementation of SpineNet(CVPR 2020) using mmdetection.PyTorchCVNLPGenerative" + }, + { + num: NumberInt("959"), + value: "wasserstein-gan 95WGAN\nChainerGenerative" + }, + { + num: NumberInt("960"), + value: "seq2seq chatbot 94A sequence2sequence chatbot implementation with TensorFlow.TensorFlowNLPGenerativeGraph" + }, + { + num: NumberInt("961"), + value: "OrganSegRSTN_PyTorch 94PyTorch implementation of OrganSegRSTN - CVPR 2018PyTorchCVGenerative" + }, + { + num: NumberInt("962"), + value: "Pytorch_AdaIN 94Pytorch implementation from scratch of [Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization [Huang+, ICCV2017]]PyTorchCV" + }, + { + num: NumberInt("963"), + value: "PyTorch Darknet53 94PyTorch implementation of Darknet53PyTorchCV" + }, + { + num: NumberInt("964"), + value: "distbelief 94Implementing Google's DistBelief paperPyTorchGraph" + }, + { + num: NumberInt("965"), + value: "MEVA 94Official implementation of ACCV 2020 paper \"3D Human Motion Estimation via Motion Compression and Refinement\" (Identical repo to https://github.com/KlabCMU/MEVA, will be kept in sync)PyTorchGenerative" + }, + { + num: NumberInt("966"), + value: "Visual-Feature-Attribution-Using-Wasserstein-GANs-Pytorch 93Implementation of Visual Feature Attribution using Wasserstein GANs (arxiv.org/abs/1711.08998) in PyTorch.\nPyTorchGenerative" + }, + { + num: NumberInt("967"), + value: "ge2e speaker verification 93Pytorch implementation of \"Generalized End-to-End Loss for Speaker Verification\"PyTorchNLPAudio" + }, + { + num: NumberInt("968"), + value: "speaker recognition papers 92Share some recent speaker recognition papers and their implementations.TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("969"), + value: "C2AE Multilabel Classification 92Tensorflow implementation for the paper 'Learning Deep Latent Spaces for Multi-Label Classfications' in AAAI 2017TensorFlowGenerative" + }, + { + num: NumberInt("970"), + value: "biogans 92Implementation supporting the ICCV 2017 paper \"GANs for Biological Image Synthesis\". \nPyTorchCVGenerative" + }, + { + num: NumberInt("971"), + value: "pytorch pix2pix 92Pytorch implementation of pix2pix for various datasets.PyTorchCVNLPGenerative" + }, + { + num: NumberInt("972"), + value: "easy fpn.pytorch 92An easy implementation of FPN (https://arxiv.org/pdf/1612.03144.pdf) in PyTorch.PyTorchCV" + }, + { + num: NumberInt("973"), + value: "simclr pytorch 92PyTorch implementation of SimCLR: supports multi-GPU training and closely reproduces resultsPyTorchCVSelf-Supervised" + }, + { + num: NumberInt("974"), + value: "jaxb2 basics 92Useful plugins and tools for JAXB2.JAXNLP" + }, + { + num: NumberInt("975"), + value: "fast wavenet.pytorch 91A PyTorch implementation of fast-wavenetPyTorchGenerative" + }, + { + num: NumberInt("976"), + value: "metrics 91IS, FID score Pytorch and TF implementation, TF implementation is a wrapper of the official ones.PyTorchCVGenerative" + }, + { + num: NumberInt("977"), + value: "DBnet lite.pytorch 91A pytorch re-implementation of Real-time Scene Text Detection with Differentiable BinarizationPyTorchCV" + }, + { + num: NumberInt("978"), + value: "MDVC 91PyTorch implementation of Multi-modal Dense Video Captioning (CVPR 2020 Workshops)PyTorchNLPAudio" + }, + { + num: NumberInt("979"), + value: "shiro jersey 91Support for securing Jersey JAX-RS applications with Apache Shiro.JAXNLP" + }, + { + num: NumberInt("980"), + value: "tensorflow cifar 10 90Cifar-10 CNN implementation using TensorFlow library with 20% error.TensorFlowCVGenerative" + }, + { + num: NumberInt("981"), + value: "STResNet 90A TensorFlow Implementation of Deep Spatio-Temporal Residual Networks (ST-ResNet): https://arxiv.org/abs/1610.00081TensorFlowGenerativeGraph" + }, + { + num: NumberInt("982"), + value: "Voice synthesis 90This repository is an implementation of Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis (SV2TTS) with a vocoder that works in real-time. SV2TTS is a three-stage deep learning framework that allows to create a numerical representation of a voice from a few seconds of audio, and to use it to condition a text-to-speech model trained to generalize to new voices.TensorFlowNLPAudio" + }, + { + num: NumberInt("983"), + value: "Color_Transfer_Histogram_Analogy 90[CGI 2020] The Official PyTorch Implementation for \"Deep Color Transfer using Histogram Analogy\"PyTorchCV" + }, + { + num: NumberInt("984"), + value: "Pruning_filters_for_efficient_convnets 90PyTorch implementation of \"Pruning Filters For Efficient ConvNets\"PyTorchGraph" + }, + { + num: NumberInt("985"), + value: "overlapping community detection 90Implementation of \"Overlapping Community Detection with Graph Neural Networks\" PyTorchGenerativeGraph" + }, + { + num: NumberInt("986"), + value: "gpt2 dialogue generation pytorch 90The PyTorch implementation of fine-tuning the GPT-2(Generative Pre-Training 2) for dialogue generation.PyTorchNLPUnsupervised" + }, + { + num: NumberInt("987"), + value: "dmfont 90Official PyTorch implementation of DM-Font (ECCV 2020)PyTorchCVNLP" + }, + { + num: NumberInt("988"), + value: "viton gan 90Original implementation of the paper \"VITON-GAN: Virtual Try-on Image Generator Trained with Adversarial Loss\" by Shion Honda.PyTorchCVGenerativeGraphSelf-Supervised" + }, + { + num: NumberInt("989"), + value: "PyTorchDiscreteFlows 90Discrete Normalizing Flows implemented in PyTorchPyTorchGenerative" + }, + { + num: NumberInt("990"), + value: "magi 90Reinforcement learning library in JAX.JAXNLPGenerative" + }, + { + num: NumberInt("991"), + value: "Improved CycleGAN 89Unpaired Image to Image Translation\nTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("992"), + value: "tf recsys 89tf-recsys contains collaborative filtering (CF) model based on famous SVD and SVD++ algorithm. Both of them are implemented by tensorflow in order to utilize GPU acceleration.TensorFlowGenerative" + }, + { + num: NumberInt("993"), + value: "text gan tensorflow 89TensorFlow GAN implementation using Gumbel SoftmaxTensorFlowGenerativeRL" + }, + { + num: NumberInt("994"), + value: "Generating Devanagari Using DRAW 89PyTorch implementation of DRAW: A Recurrent Neural Network For Image Generation trained on Devanagari dataset.PyTorchCV" + }, + { + num: NumberInt("995"), + value: "MR GAN 89Official PyTorch implementation of Harmonizing Maximum Likelihood with GANs for Multimodal Conditional Generation (ICLR 2019)PyTorchGenerative" + }, + { + num: NumberInt("996"), + value: "eigenvectors from eigenvalues 89PyTorch implementation comparison of old and new method of determining eigenvectors from eigenvalues.PyTorchGenerative" + }, + { + num: NumberInt("997"), + value: "rax 89Rax is a Learning-to-Rank library written in JAX.JAXNLP" + }, + { + num: NumberInt("998"), + value: "TensorFlow MIL 88TF Implementation of Multiple Instance Learning FCN.TensorFlowCVGenerative" + }, + { + num: NumberInt("999"), + value: "tensorflow mnist AAE 88Tensorflow implementation of adversarial auto-encoder for MNISTTensorFlowCVGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("1000"), + value: "listen attend and spell 88Tensorflow implementation of \"Listen, Attend and Spell\" authored by William Chan. This project utilizes input pipeline and estimator API of Tensorflow, which makes the training and evaluation truly end-to-end.TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1001"), + value: "d4pg pytorch 88PyTorch implementation of Distributed Distributional Deterministic Policy Gradients (https://arxiv.org/abs/1804.08617)PyTorchRL" + }, + { + num: NumberInt("1002"), + value: "R YOLOv4 88This is a PyTorch-based R-YOLOv4 implementation which combines YOLOv4 model and loss function from R3Det for arbitrary oriented object detection.PyTorchCVAudio" + }, + { + num: NumberInt("1003"), + value: "SQDDPG 88This is a framework for the research on multi-agent reinforcement learning and the implementation of the experiments in the paper titled by ''Shapley Q-value: A Local Reward Approach to Solve Global Reward Games''.PyTorchNLPGenerativeRL" + }, + { + num: NumberInt("1004"), + value: "zoo 87Reference implementations of popular Binarized Neural NetworksTensorFlowGenerative" + }, + { + num: NumberInt("1005"), + value: "sc2aibot 87Implementing reinforcement-learning algorithms for pysc2 -environmentTensorFlowNLPGenerativeRLGraph" + }, + { + num: NumberInt("1006"), + value: "d2l java 87The Java implementation of Dive into Deep Learning (D2L.ai)PyTorchNLPGenerative" + }, + { + num: NumberInt("1007"), + value: "BERT chinese text classification pytorch 87This repo contains a PyTorch implementation of a pretrained BERT model for text classification.PyTorchGenerative" + }, + { + num: NumberInt("1008"), + value: "CNNIQAplusplus 87[unofficial] PyTorch Implementation of image quality assessment methods: IQA-CNN++ in ICIP2015 and IQA-CNN in CVPR2014PyTorchCVNLPGenerative" + }, + { + num: NumberInt("1009"), + value: "Keras ICNet 86Keras implementation of Real-Time Semantic Segmentation on High-Resolution ImagesTensorFlowCVGenerative" + }, + { + num: NumberInt("1010"), + value: "inpainting gmcnn keras 86Keras implementation of \"Image Inpainting via Generative Multi-column Convolutional Neural Networks\" paper published at NIPS 2018 TensorFlowCVGenerative" + }, + { + num: NumberInt("1011"), + value: "Recurrent Independent Mechanisms 86Implementation of the paper Recurrent Independent Mechanisms (https://arxiv.org/pdf/1909.10893.pdf)PyTorchCVNLP" + }, + { + num: NumberInt("1012"), + value: "imitation_learning 86PyTorch implementation of some reinforcement learning algorithms: A2C, PPO, Behavioral Cloning from Observation (BCO), GAIL.PyTorchCVGenerativeRL" + }, + { + num: NumberInt("1013"), + value: "multitask CycleGAN 86Pytorch implementation of multitask CycleGAN with auxiliary classification lossPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1014"), + value: "TMNet 86The official pytorch implemention of the CVPR paper \"Temporal Modulation Network for Controllable Space-Time Video Super-Resolution\".PyTorchGenerative" + }, + { + num: NumberInt("1015"), + value: "quickNAT_pytorch 86PyTorch Implementation of QuickNAT and Bayesian QuickNAT, a fast brain MRI segmentation framework with segmentation Quality control using structure-wise uncertaintyPyTorchCV" + }, + { + num: NumberInt("1016"), + value: "jax unirep 86Reimplementation of the UniRep protein featurization model.JAXNLPGenerativeHealth" + }, + { + num: NumberInt("1017"), + value: "jax models 86Unofficial JAX implementations of deep learning research papersJAXCV" + }, + { + num: NumberInt("1018"), + value: "ENAS Keras 85Keras implementation of Efficient Neural Architecture SearchTensorFlowCVGenerativeRL" + }, + { + num: NumberInt("1019"), + value: "bert in production 85A collection of resources on using BERT (https://arxiv.org/abs/1810.04805 ) and related Language Models in production environments.TensorFlowNLPGenerativeSelf-Supervised" + }, + { + num: NumberInt("1020"), + value: "notebooks 85Implement, demonstrate, reproduce and extend the results of the Risk articles 'Differential Machine Learning' (2020) and 'PCA with a Difference' (2021) by Huge and Savine, and cover implementation details left out from the papers.TensorFlowGenerative" + }, + { + num: NumberInt("1021"), + value: "Matrix Capsules EM PyTorch 85A PyTorch Implementation of Matrix Capsules with EM RoutingPyTorchCVGenerative" + }, + { + num: NumberInt("1022"), + value: "Pytorch conditional GANs 85Implementation of Conditional Generative Adversarial Networks in PyTorchPyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("1023"), + value: "swae pytorch 85Implementation of the Sliced Wasserstein Autoencoder using PyTorchPyTorchGenerative" + }, + { + num: NumberInt("1024"), + value: "DeepLab_v3_plus 85This is an ongoing re-implementation of DeepLab_v3_plus on pytorch which is trained on VOC2012 and use ResNet101 for backbone. PyTorchCV" + }, + { + num: NumberInt("1025"), + value: "upt 85Official PyTorch implementation for CVPR2022 paper \"Efficient Two-Stage Detection of HumanObject Interactions with a Novel UnaryPairwise Transformer\"PyTorchCVGraph" + }, + { + num: NumberInt("1026"), + value: "simple equivariant gnn 85A short and easy PyTorch implementation of E(n) Equivariant Graph Neural NetworksPyTorchGraph" + }, + { + num: NumberInt("1027"), + value: "MobileNetV2(Gluon:star 85This is a Gluon implementation of MobileNetV2 architecture as described in the paper Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation.MXNetCV" + }, + { + num: NumberInt("1028"), + value: "koclip 85KoCLIP: Korean port of OpenAI CLIP, in FlaxJAXCVNLPGenerativeSelf-Supervised" + }, + { + num: NumberInt("1029"), + value: "pytorch UNet 842D and 3D UNet implementation in PyTorch.PyTorchCVGenerative" + }, + { + num: NumberInt("1030"), + value: "face_parsing 84Official Pytorch implementation of 'RoI Tanh-polar Transformer Network for Face Parsing in the Wild.'PyTorchCV" + }, + { + num: NumberInt("1031"), + value: "max deeplab 84Unofficial implementation of MaX-DeepLab for Instance SegmentationPyTorchCV" + }, + { + num: NumberInt("1032"), + value: "ppdet 84[BMVC-20] Official PyTorch implementation of PPDet.PyTorchCV" + }, + { + num: NumberInt("1033"), + value: "TransCenter 84This is the official implementation of TransCenter. The code and pretrained models are now available here: https://gitlab.inria.fr/yixu/TransCenter_official.PyTorchCVGenerative" + }, + { + num: NumberInt("1034"), + value: "SCOT 84CVPR 2020, Semantic Correspondence as an Optimal Transport Problem, Pytorch Implementation. PyTorchCV" + }, + { + num: NumberInt("1035"), + value: "sparse-structure-selection 84This code is a re-implementation of the imagenet classification experiments in the paper Data-Driven Sparse Structure Selection for Deep Neural NetworksMXNetCV" + }, + { + num: NumberInt("1036"), + value: "Unsupervised Object Counting 83Implementation of \"Attend, Infer, Repeat\"\nTensorFlowUnsupervised" + }, + { + num: NumberInt("1037"), + value: "TextBoxes_plusplus_Tensorflow 83Textboxes_plusplus implementation with Tensorflow (python)TensorFlowCVGenerative" + }, + { + num: NumberInt("1038"), + value: "SAR_TF 83This is an implementation of Show, Attend and Read with tensorflowTensorFlowCV" + }, + { + num: NumberInt("1039"), + value: "MobileNetV3 pytorch 83Implementation of MobileNetV3 in pytorchPyTorchCVGenerative" + }, + { + num: NumberInt("1040"), + value: "mlp singer 83Official implementation of MLP Singer: Towards Rapid Parallel Korean Singing Voice Synthesis (IEEE MLSP 2021)PyTorchCVGenerativeAudio" + }, + { + num: NumberInt("1041"), + value: "KFAC Pytorch 83Pytorch implementation of KFAC and E-KFAC (Natural Gradient).PyTorchGenerative" + }, + { + num: NumberInt("1042"), + value: "FFTNet 83FFTNet vocoder implementationPyTorchNLPAudio" + }, + { + num: NumberInt("1043"), + value: "mxfont 83Official PyTorch implementation of MX-Font (Multiple Heads are Better than One: Few-shot Font Generation with Multiple Localized Experts) ICCV 2021PyTorchCVNLPGenerativeGraph" + }, + { + num: NumberInt("1044"), + value: "PVDNet 83[TOG 2021] Official PyTorch Implementation for \"Recurrent Video Deblurring with Blur-Invariant Motion Estimation and Pixel Volumes\"PyTorchCVNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1045"), + value: "spectral density 83Hessian spectral density estimation in TF and JaxJAXGenerative" + }, + { + num: NumberInt("1046"), + value: "MIRNet 82Tensorflow implementation of MIRNet for Low-light image enhancementTensorFlowCVGenerative" + }, + { + num: NumberInt("1047"), + value: "YOLO_v2 82The implementation of YOLO v2 with TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("1048"), + value: "srntt pytorch 82A PyTorch implementation of SRNTT, which is a novel RefSR method.PyTorchCVGenerative" + }, + { + num: NumberInt("1049"), + value: "DCMH 82PyTorch implementation for paper \"Deep Cross-Modal Hashing\"PyTorchCVGenerative" + }, + { + num: NumberInt("1050"), + value: "DGN 82Implementation of Directional Graph Networks in PyTorch and DGLPyTorchGenerativeGraph" + }, + { + num: NumberInt("1051"), + value: "yolox pytorch 82a Pytorch easy re-implement of \"YOLOX: Exceeding YOLO Series in 2021\"PyTorchCV" + }, + { + num: NumberInt("1052"), + value: "**deepspeech** 82This example based on DeepSpeech2 of Baidu helps you to build Speech-To-Text (STT) models at scale usingMXNetNLPAudio" + }, + { + num: NumberInt("1053"), + value: "DiscoGAN Tensorflow 81An implementation of DiscoGAN in tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1054"), + value: "neural processes 81PyTorch implementation of Neural ProcessesPyTorchCVGenerative" + }, + { + num: NumberInt("1055"), + value: "MixNet PyTorch 81A PyTorch Implementation of MixNetPyTorchCV" + }, + { + num: NumberInt("1056"), + value: "TRACER 81TRACER: Extreme Attention Guided Salient Object Tracing Network (AAAI 2022) implementation in PyTorchPyTorchCV" + }, + { + num: NumberInt("1057"), + value: "Deep Learning 80Study and implementation about deep learning models, architectures, applications and frameworksTensorFlowGenerative" + }, + { + num: NumberInt("1058"), + value: "hierarchical attention networks 80 TensorFlow implementation of the paper \"Hierarchical Attention Networks for Document Classification\"TensorFlowNLPGenerative" + }, + { + num: NumberInt("1059"), + value: "imitation learning 80Autonomous driving: Tensorflow implementation of the paper \"End-to-end Driving via Conditional Imitation Learning\"TensorFlowCVGenerative" + }, + { + num: NumberInt("1060"), + value: "CogDL TensorFlow 80CogDL-TensorFlow: The TensorFlow Implementation of CogDL. With Support from Professor Jie Tang.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1061"), + value: "Feed Forward Style Transfer 80TensorFlow implementation of real-time style transfer using feed-forward generation. This builds on the original style-transfer algorithm and allows for common personal computers to transform images.TensorFlowCVGenerative" + }, + { + num: NumberInt("1062"), + value: "TensorFlow2.0_SSD 80A tensorflow_2.0 implementation of SSD (Single Shot MultiBox Detector) .TensorFlowCVGenerative" + }, + { + num: NumberInt("1063"), + value: "tf dropblock 80TensorFlow implementation of DropBlockTensorFlowGenerativeGraph" + }, + { + num: NumberInt("1064"), + value: "Fast Neural Style for Image Style Transform by Pytorch 80Fast Neural Style for Image Style Transform by Pytorch .\nPyTorchCV" + }, + { + num: NumberInt("1065"), + value: "Pytorch Poetry Generation 80is a repurposing of http://pytorch.org/: an early release beta software (developed by a consortium led by Facebook and NIVIDIA), a deep learning software that puts Python first.PyTorchNLP" + }, + { + num: NumberInt("1066"), + value: "bicubic_pytorch 80A PyTorch implementation of widely-used bicubic interpolation, which is fully compatible with MATLAB.PyTorchCVGenerative" + }, + { + num: NumberInt("1067"), + value: "CGD 80A PyTorch implementation of CGD based on the paper \"Combination of Multiple Global Descriptors for Image Retrieval\"PyTorchCV" + }, + { + num: NumberInt("1068"), + value: "capsule pytorch 80A pytorch implementation of CapsNet for text classification (subject-and-sentiment-analysis)PyTorchGenerative" + }, + { + num: NumberInt("1069"), + value: "RelationNetworks CLEVR 80A pytorch implementation for \"A simple neural network module for relational reasoning\", working on the CLEVR datasetPyTorchCVRL" + }, + { + num: NumberInt("1070"), + value: "rltf 79Reinforcement Learning implementations and research prototyping in TensorFlowTensorFlowNLPGenerativeRL" + }, + { + num: NumberInt("1071"), + value: "FCOS.Pytorch 79fcos implementation in pytorch1.xPyTorchCV" + }, + { + num: NumberInt("1072"), + value: "Total_Variation_Loss.pytorch 79pytorch implementation of tv lossPyTorchGenerative" + }, + { + num: NumberInt("1073"), + value: "TasNet 79A PyTorch implementation of Time-domain Audio Separation Network (TasNet) with Permutation Invariant Training (PIT) for speech separation.PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("1074"), + value: "COVIDNet 79PyTorch implementation of COVID-Net https://github.com/lindawangg/COVID-NetPyTorchCVNLPGraph" + }, + { + num: NumberInt("1075"), + value: "Billion scale semi supervised learning 79Implementing Billion-scale semi-supervised learning for image classification using PytorchPyTorchCV" + }, + { + num: NumberInt("1076"), + value: "DCLS SR 79Official PyTorch implementation of the paper \"Deep Constrained Least Squares for Blind Image Super-Resolution\", CVPR 2022.PyTorchCV" + }, + { + num: NumberInt("1077"), + value: "tabular dl num embeddings 79The official implementation of the paper \"On Embeddings for Numerical Features in Tabular Deep Learning\"PyTorchGenerative" + }, + { + num: NumberInt("1078"), + value: "R NET in Tensorflow 78R-NET implementation in TensorFlow.TensorFlowGenerative" + }, + { + num: NumberInt("1079"), + value: "vae_vpflows 78Code in PyTorch for the convex combination linear IAF and the Householder Flow, J.M. Tomczak & M. Welling https://jmtomczak.github.io/deebmed.html \nPyTorchGenerative" + }, + { + num: NumberInt("1080"), + value: "MetaFormer 78A PyTorch implementation of \"MetaFormer: A Unified Meta Framework for Fine-Grained Recognition\". A reference PyTorch implementation of CoAtNet: Marrying Convolution and Attention for All Data SizesPyTorchCV" + }, + { + num: NumberInt("1081"), + value: "AGAIN VC 78This is the official implementation of the paper AGAIN-VC: A One-shot Voice Conversion using Activation Guidance and Adaptive Instance Normalization.PyTorchNLPAudio" + }, + { + num: NumberInt("1082"), + value: "editts 78Official implementation of EdiTTS: Score-based Editing for Controllable Text-to-SpeechPyTorchNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1083"), + value: "Griffin_lim 77A TensorFlow implementation of Griffin-Lim algorithmTensorFlowGenerativeAudio" + }, + { + num: NumberInt("1084"), + value: "TagSpace tensorflow 77Tensorflow implementation of Facebook TagSpaceTensorFlowGenerative" + }, + { + num: NumberInt("1085"), + value: "CNN Sentence Classification 77A tensorflow implementation of Convolutional Neural Networks for Sentence ClassificationTensorFlowGenerative" + }, + { + num: NumberInt("1086"), + value: "Deep Knowledge Tracing 77An implementation of the Deep Knowledge Tracing (DKT) using Tensorflow 2.0TensorFlowGenerative" + }, + { + num: NumberInt("1087"), + value: "pregel 77Tensorflow implementation of Graph Convolutional NetworkTensorFlowGenerativeGraph" + }, + { + num: NumberInt("1088"), + value: "SimCLR in TensorFlow 2 77(Minimally) implements SimCLR (https://arxiv.org/abs/2002.05709) in TensorFlow 2.TensorFlowCVGenerativeRLUnsupervisedSelf-Supervised" + }, + { + num: NumberInt("1089"), + value: "Speech_driven_gesture_generation_with_autoencoder 77This is the official implementation for IVA '19 paper \"Analyzing Input and Output Representations for Speech-Driven Gesture Generation\".TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1090"), + value: "deep transfer 77PyTorch implementation of \"Universal Style Transfer via Feature Trasforms\" PyTorchCV" + }, + { + num: NumberInt("1091"), + value: "quantile regression dqn pytorch 77A short and easy implementation of Quantile Regression DQN | Distributional Reinforcement LearningPyTorchRL" + }, + { + num: NumberInt("1092"), + value: "gaze estimation 77A deep learning based gaze estimation framework implemented with PyTorchPyTorchCV" + }, + { + num: NumberInt("1093"), + value: "voice filter 77A unofficial Pytorch implementation of Google's VoiceFilterPyTorchNLPAudio" + }, + { + num: NumberInt("1094"), + value: "skip thought tf 76An implementation of skip-thought vectors in TensorflowTensorFlowNLPGenerative" + }, + { + num: NumberInt("1095"), + value: "ESIM 76TensorFlow implementation of the ESIM model (Enhanced LTSM for natural language inference)TensorFlowGenerative" + }, + { + num: NumberInt("1096"), + value: "ASNE 76A sparsity aware and memory efficient implementation of \"Attributed Social Network Embedding\" (TKDE 2018).TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1097"), + value: "tf hrnet 76tensorflow implementation for \"High-Resolution Representations for Labeling Pixels and Regions\"TensorFlowCVGenerative" + }, + { + num: NumberInt("1098"), + value: "TensorANFIS 76A Tensorflow implementation of the Adaptive Neuro-Based Fuzzy Inference System (ANFIS)TensorFlowGenerative" + }, + { + num: NumberInt("1099"), + value: "translagent 76Code for Emergent Translation in Multi-Agent Communication.\nPyTorchNLP" + }, + { + num: NumberInt("1100"), + value: "AI writer_Data2Doc 76PyTorch Implementation of NBA game summary generator.PyTorchNLP" + }, + { + num: NumberInt("1101"), + value: "FMPN FER 76Official PyTorch Implementation of 'Facial Motion Prior Networks for Facial Expression Recognition', VCIP 2019, OralPyTorchCVGenerative" + }, + { + num: NumberInt("1102"), + value: "MaskFlownet Pytorch 76Pytorch implementation of MaskFlownetPyTorchGenerative" + }, + { + num: NumberInt("1103"), + value: "SuperMix 76Pytorch implementation of CVPR2021 paper: SuperMix: Supervising the Mixing Data AugmentationPyTorchCV" + }, + { + num: NumberInt("1104"), + value: "pytorch noreward rl 76pytorch implementation of Curiosity-driven Exploration by Self-supervised PredictionPyTorchSelf-Supervised" + }, + { + num: NumberInt("1105"), + value: "Faster rcnn 76My implementation of Faster-RCNN Pytorch PyTorchCV" + }, + { + num: NumberInt("1106"), + value: "deep ranking 76Learning Fine-grained Image Similarity with Deep Ranking is a novel application of neural networks, where the authors use a new multi scale architecture combined with a triplet loss to create a neural network that is able to perform image search. This repository is a simplified implementation of the samePyTorchCV" + }, + { + num: NumberInt("1107"), + value: "PyTorch FilterResponseNormalizationLayer 76PyTorch implementation of \"Filter Response Normalization Layer: Eliminating Batch Dependence in the Training of Deep Neural Networks\"PyTorchCV" + }, + { + num: NumberInt("1108"), + value: "knowledge_evolution 76(CVPR-Oral 2021) PyTorch implementation of Knowledge Evolution approach and Split-NetsPyTorchNLPGenerative" + }, + { + num: NumberInt("1109"), + value: "Keras RFCN 75RFCN implement based on Keras&TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1110"), + value: "tf2 eager yolo3 75Yolo-v3 model was implemented with tf2 eager style. I also implemented the eager model's training function and applied it to other datasets (digit detector, vehicle detector).TensorFlowCVGenerative" + }, + { + num: NumberInt("1111"), + value: "Tensorflow implementation of LCNN 75A Tensorflow implementation of \"A Light CNN for Deep Face Representation with Noisy Labels\"TensorFlowCVGenerative" + }, + { + num: NumberInt("1112"), + value: "PSMNet 75A Pytorch implementation of Pyramid Stereo Matching NetworkPyTorchCVGenerative" + }, + { + num: NumberInt("1113"), + value: "Speech Emotion Classification with PyTorch 75This repository contains PyTorch implementation of 4 different models for classification of emotions of the speech.PyTorchNLPAudio" + }, + { + num: NumberInt("1114"), + value: "Vessel wgan pytorch 75An implementation ofRetinal Vessel Segmentation in Fundoscopic Images with Generative Adversarial NetworksPyTorchCVGenerative" + }, + { + num: NumberInt("1115"), + value: "DeepPhotoStyle_pytorch 75PyTorch implementation of \"Deep Photo Style Transfer\" PyTorchCV" + }, + { + num: NumberInt("1116"), + value: "CrossViT pytorch 75Implementation of CrossViT: Cross-Attention Multi-Scale Vision Transformer for Image ClassificationPyTorchCV" + }, + { + num: NumberInt("1117"), + value: "SqueezeNet Neural Style Pytorch 75Lightweight implementation of neural style in Pytorch with SqueezeNetPyTorchCVGenerative" + }, + { + num: NumberInt("1118"), + value: "Pytorch Attention Guided CycleGAN 75Pytorch implementation of Unsupervised Attention-guided Image-to-Image Translation. PyTorchCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("1119"), + value: "Multiclass Semantic Segmentation CamVid 74Tensorflow 2 implementation of complete pipeline for multiclass image semantic segmentation using UNet, SegNet and FCN32 architectures on Cambridge-driving Labeled Video Database (CamVid) dataset. TensorFlowCVGenerative" + }, + { + num: NumberInt("1120"), + value: "pytorch neat 74A pytorch implementation of the NEAT (NeuroEvolution of Augmenting Topologies) algorithmPyTorchNLPGenerative" + }, + { + num: NumberInt("1121"), + value: "LeNet5 MNIST PyTorch 74 The simplest implementation of LeNet5 with mnist in PyTorch. Accuracy: ~99%PyTorchNLP" + }, + { + num: NumberInt("1122"), + value: "pytorch HED 74An implementation of HED in pytorchPyTorchCV" + }, + { + num: NumberInt("1123"), + value: "Recurrent Environment Simulators 73Deepmind Recurrent Environment Simulators paper implementation in tensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1124"), + value: "TensorflowLite UNet 73Implementation of UNet by Tensorflow Lite. Semantic segmentation without using GPU with RaspberryPi + Python. In order to maximize the learning efficiency of the model, this learns only the \"Person\" class of VOC2012. And Comparison with ENet.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1125"), + value: "DeblurGAN tf 73Tensorflow implementation of DeblurGAN(Blind Motion Deblurring Using Conditional Adversarial Networks)TensorFlowCVGenerative" + }, + { + num: NumberInt("1126"), + value: "PGD pytorch 73A pytorch implementation of \"Towards Deep Learning Models Resistant to Adversarial Attacks\"PyTorchCVGenerative" + }, + { + num: NumberInt("1127"), + value: "dctts pytorch 73The pytorch implementation of DC-TTSPyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("1128"), + value: "models 73Merlin Models is a collection of deep learning recommender system model reference implementationsPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1129"), + value: "MolCLR 73Implementation of \"Molecular Contrastive Learning of Representations via Graph Neural Networks\" in PyTorch GeometricPyTorchGraph" + }, + { + num: NumberInt("1130"), + value: "Convolutional Pose Machine tf 72Convolutional Pose Machine tensorflow implementationTensorFlowGenerative" + }, + { + num: NumberInt("1131"), + value: "tensorflow maml 72TensorFlow 2.0 implementation of MAML.TensorFlowCVGenerativeRL" + }, + { + num: NumberInt("1132"), + value: "SwAV TF 72TensorFlow implementation of \"Unsupervised Learning of Visual Features by Contrasting Cluster Assignments\".TensorFlowGenerativeRLUnsupervisedSelf-Supervised" + }, + { + num: NumberInt("1133"), + value: "tf monodepth2 72Tensorflow implementation(unofficial) of \"Digging into Self-Supervised Monocular Depth Prediction\"TensorFlowCVGenerativeSelf-Supervised" + }, + { + num: NumberInt("1134"), + value: "Inceptionv4_and_Inception ResNetv2.PyTorch 72A PyTorch implementation of Inception-v4 and Inception-ResNet-v2.PyTorchCVGenerative" + }, + { + num: NumberInt("1135"), + value: "gail_gym 72Implementation of Generatve Adversarial Imitation Learning (GAIL) for classic environments from OpenAI Gym. PyTorchGenerativeRL" + }, + { + num: NumberInt("1136"), + value: "RecVAE 72The official PyTorch implementation of the paper \"RecVAE: A New Variational Autoencoder for Top-N Recommendations with Implicit Feedback\"PyTorchGenerative" + }, + { + num: NumberInt("1137"), + value: "DLow 72[ECCV 2020] Official PyTorch Implementation of \"DLow: Diversifying Latent Flows for Diverse Human Motion Prediction\". ECCV 2020.PyTorchGenerative" + }, + { + num: NumberInt("1138"), + value: "jax resnet 72Implementations and checkpoints for ResNet, Wide ResNet, ResNeXt, ResNet-D, and ResNeSt in JAX (Flax).JAXCV" + }, + { + num: NumberInt("1139"), + value: "crowd counting using tensorflow 71Tensorflow implementation of crowd counting using CNNs from overhead surveillance cameras.TensorFlowCVGenerative" + }, + { + num: NumberInt("1140"), + value: "shufflenet v2 tensorflow 71Tensorflow ShuffleNet v2 implementationTensorFlowGenerative" + }, + { + num: NumberInt("1141"), + value: "PyTorch Image Classification with Kaggle Dogs vs Cats Dataset 71Classifies an image as containing either a dog or a cat (using Kaggle's public dataset), but could easily be extended to other image classification problems.PyTorchCV" + }, + { + num: NumberInt("1142"), + value: "torch_DCEC 71Pytorch Deep Clustering with Convolutional Autoencoders implementationPyTorchCV" + }, + { + num: NumberInt("1143"), + value: "SRGAN PyTorch 71A PyTorch implementation of SRGAN specific for Anime Super Resolution based on \"Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network\". And another PyTorch WGAN-gp implementation of SRGAN referring to \"Improved Training of Wasserstein GANs\".PyTorchCVGenerative" + }, + { + num: NumberInt("1144"), + value: "3D UNet PyTorch Implementation 71The implementation of 3D-UNet using PyTorchPyTorchCV" + }, + { + num: NumberInt("1145"), + value: "TENE 71A sparsity aware implementation of \"Enhanced Network Embedding with Text Information\" (ICPR 2018). PyTorchNLPGenerativeGraph" + }, + { + num: NumberInt("1146"), + value: "PoseStylizer 71PyTorch implementation of Generating Person Images with Appearance-aware Pose Stylizer (IJCAI 2020)PyTorchCVGenerative" + }, + { + num: NumberInt("1147"), + value: "contiguous succotash 71Recurrent Variational Autoencoder with Dilated Convolutions that generates sequential data implemented in pytorchPyTorchGenerative" + }, + { + num: NumberInt("1148"), + value: "higgs 71A modern WebSite and Web services framework with built in Async events, HTTP server,client and WebSocket server,client, all powered by Netty with Jersey/JAX-RS, Shiro, Handlebars and JacksonJAXCVNLP" + }, + { + num: NumberInt("1149"), + value: "im2im 70Unsupervised Image to Image Translation with Generative Adversarial Networks\nTensorFlowCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("1150"), + value: "hred attention tensorflow 70An extension on the Hierachical Recurrent Encoder-Decoder for Generative Context-Aware Query Suggestion, our implementation is in Tensorflow and uses an attention mechanism.TensorFlowGenerative" + }, + { + num: NumberInt("1151"), + value: "Pytorch RL CPP 70A Repository with C++ implementations of Reinforcement Learning Algorithms (Pytorch)TensorFlowCVRL" + }, + { + num: NumberInt("1152"), + value: "alpha zero 70AlphaZero implementation for Othello, Connect-Four and Tic-Tac-Toe based on \"Mastering the game of Go without human knowledge\" and \"Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm\" by DeepMind.TensorFlowNLPGenerativeRL" + }, + { + num: NumberInt("1153"), + value: "SiamCRNN 70[TGRS 2020] Official Tensorflow implementation for Change Detection in Multisource VHR Images via Deep Siamese Convolutional Multiple-Layers Recurrent Neural NetworkTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1154"), + value: "ganimation 70Pytorch implementation of GANimation with pretrained weights.PyTorchCVNLPGenerative" + }, + { + num: NumberInt("1155"), + value: "adversarial pose pytorch 70A PyTorch implementation of adversarial pose estimation for multi-personPyTorchCVGenerative" + }, + { + num: NumberInt("1156"), + value: "pytorch SRDenseNet 70Pytorch implementation for SRDenseNet (ICCV2017)PyTorchCV" + }, + { + num: NumberInt("1157"), + value: "genesis 70Official PyTorch implementation of GENESIS and GENESIS-V2PyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("1158"), + value: "nasnet pytorch 70A neat pytorch implementation of nasnet and the ported weights from tensorflowPyTorchCVGenerative" + }, + { + num: NumberInt("1159"), + value: "Conditioned Source Separation LaSAFT 70A PyTorch implementation of the paper: \"LaSAFT: Latent Source Attentive Frequency Transformation for Conditioned Source Separation\" (ICASSP 2021)PyTorchNLPGenerativeAudio" + }, + { + num: NumberInt("1160"), + value: "Real ESRGAN 70PyTorch implementation of Real-ESRGAN modelPyTorchCVGenerative" + }, + { + num: NumberInt("1161"), + value: "Policy Gradient Methods 70Implementation of Algorithms from the Policy Gradient Family. Currently includes: A2C, A3C, DDPG, TD3, SACPyTorchRL" + }, + { + num: NumberInt("1162"), + value: "tgan 70Temporal Generative Adversarial Nets\nChainerGenerative" + }, + { + num: NumberInt("1163"), + value: "pointnet2 tensorflow2 69Pointnet++ modules implemented as tensorflow 2 keras layers.TensorFlowGenerative" + }, + { + num: NumberInt("1164"), + value: "Vision Transformer Keras Tensorflow Pytorch Examples 69Tensorflow implementation of the Vision Transformer (An Image is Worth 16x16 Words: TransformerPyTorchCVGenerative" + }, + { + num: NumberInt("1165"), + value: "One_Cycle_Policy 69Pytorch notebook with One Cycle Policy implementation (https://arxiv.org/abs/1803.09820)PyTorchRL" + }, + { + num: NumberInt("1166"), + value: "pytorch_basic_nmt 69A simple yet strong implementation of neural machine translation in pytorchPyTorchNLP" + }, + { + num: NumberInt("1167"), + value: "pytorch a3c mujoco 69Implement A3C for Mujoco gym envsPyTorchRL" + }, + { + num: NumberInt("1168"), + value: "CeiT pytorch 69Implementation of Convolutional enhanced image TransformerPyTorchCV" + }, + { + num: NumberInt("1169"), + value: "XMUNMT 68An implementation of RNNsearch using TensorFlowTensorFlowNLPGenerative" + }, + { + num: NumberInt("1170"), + value: "Deep Association Learning 68Tensorflow Implementation on Paper [BMVC2018]Deep Association Learning for Unsupervised Video Person Re-identificationTensorFlowCVGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("1171"), + value: "WSDM2018_HyperQA 68Reference Implementation for WSDM 2018 Paper \"Hyperbolic Representation Learning for Fast and Efficient Neural Question Answering\"TensorFlowGraph" + }, + { + num: NumberInt("1172"), + value: "Awesome Segmentations 68Lots of semantic image segmentation implementations in Tensorflow/KerasTensorFlowCVGenerativeHealth" + }, + { + num: NumberInt("1173"), + value: "SegNetCMR 68A Tensorflow implementation of SegNet for cardiac MRI segmentationTensorFlowCVNLPGenerativeHealth" + }, + { + num: NumberInt("1174"), + value: "video_generator 68This is implementation of convolutional variational autoencoder in TensorFlow library and it will be used for video generation.TensorFlowCVGenerative" + }, + { + num: NumberInt("1175"), + value: "symmetrical synthesis 68Official Tensorflow implementation of \"Symmetrical Synthesis for Deep Metric Learning\" (AAAI 2020)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1176"), + value: "embracenet 68Robust multimodal integration method implemented in PyTorch and TensorFlowTensorFlowGenerative" + }, + { + num: NumberInt("1177"), + value: "3d cnn action recognition 68Implementation of Action Recognition using 3D Convnet on UCF-101 dataset. TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1178"), + value: "VAE Gumbel Softmax 68An implementation of a Variational-Autoencoder using the Gumbel-Softmax reparametrization trick in TensorFlow (tested on r1.5 CPU and GPU) in ICLR 2017.TensorFlowGenerative" + }, + { + num: NumberInt("1179"), + value: "hit gan 68Tensorflow implementation for \"Improved Transformer for High-Resolution GANs\" (NeurIPS 2021).TensorFlowCVGenerative" + }, + { + num: NumberInt("1180"), + value: "VoxelMorph PyTorch 68An unofficial PyTorch implementation of VoxelMorph- An unsupervised 3D deformable image registration methodPyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("1181"), + value: "permutohedral_lattice 67Permutohedral Lattice C++/CUDA implementation + TensorFlow Op (CPU/GPU)TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1182"), + value: "DeepLabV3 Plus 67Tensorflow 2.3.0 implementation of DeepLabV3-PlusTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1183"), + value: "wavegan pytorch 67Pytorch Implementation of wavegan model to generate audio PyTorchCVNLPGenerativeAudio" + }, + { + num: NumberInt("1184"), + value: "mmtm 67Implementation of CVPR 2020 paper \"MMTM: Multimodal Transfer Module for CNN Fusion\"PyTorchGenerative" + }, + { + num: NumberInt("1185"), + value: "Document Image Unwarping pytorch 67Pytorch implementation and extension of \"DocUnet: Document Image Unwarping via A Stacked U-Net\"PyTorchCVNLP" + }, + { + num: NumberInt("1186"), + value: "DREML 67PyTorch implementation of Deep Randomized Ensembles for Metric Learning(ECCV2018)PyTorchCV" + }, + { + num: NumberInt("1187"), + value: "MetaAF 67Control adaptive filters with neural networks.JAXGenerativeAudioSelf-SupervisedHealth" + }, + { + num: NumberInt("1188"), + value: "YOLOv3 66YOLOv3 Implementation in TensorFlow 1.1XTensorFlowCVGenerative" + }, + { + num: NumberInt("1189"), + value: "dfi tensorflow 66Implementation of Deep Feature Interpolation in Tensorflow using a VGG19 modelTensorFlowCVGenerative" + }, + { + num: NumberInt("1190"), + value: "videogan 66Implementation of \"Generating Videos with Scene Dynamics\" in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1191"), + value: "affinity loss 66Unofficial implementation of \"Max-margin Class Imbalanced Learning with Gaussian Affinity\"TensorFlowGenerative" + }, + { + num: NumberInt("1192"), + value: "maskrcnn modanet 66A Mask R-CNN Keras implementation with Modanet annotations on the Paperdoll datasetTensorFlowCV" + }, + { + num: NumberInt("1193"), + value: "DSMSCN 66[MultiTemp 2019] Official Tensorflow implementation for Change Detection in Multi-temporal VHR Images Based on Deep Siamese Multi-scale Convolutional Neural Networks.TensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("1194"), + value: "DrowsyDriverDetection 66This is a project implementing Computer Vision and Deep Learning concepts to detect drowsiness of a driver and sound an alarm if drowsy.TensorFlowGenerativeAudio" + }, + { + num: NumberInt("1195"), + value: "openpose pytorch 66PyTorch implementation of the OpenPosePyTorchCVGenerative" + }, + { + num: NumberInt("1196"), + value: "FOTS.pytorch 66an unofficial implementation of FOTS: Fast Oriented Text Spotting with a Unified NetworkPyTorchCV" + }, + { + num: NumberInt("1197"), + value: "DSC PyTorch 66A PyTorch implementation of \"Direction-Aware Spatial Context Features for Shadow Detection\" CVPR'18 | T-PAMI'19PyTorchCV" + }, + { + num: NumberInt("1198"), + value: "CASENet 66A Pytorch implementation of CASENet for the Cityscapes DatasetPyTorchCV" + }, + { + num: NumberInt("1199"), + value: "vqgan jax 66JAX implementation of VQGANJAXCVGenerative" + }, + { + num: NumberInt("1200"), + value: "progen 66Implementation and replication of ProGen, Language Modeling for Protein Generation, in JaxJAXNLPHealth" + }, + { + num: NumberInt("1201"), + value: "tensorflow som 65A multi-gpu implementation of the self-organizing map in TensorFlowTensorFlowNLPGenerative" + }, + { + num: NumberInt("1202"), + value: "distributed_rl 65Pytorch implementation of distributed deep reinforcement learningPyTorchNLPRL" + }, + { + num: NumberInt("1203"), + value: "ESRGAN PyTorch 65A simple implementation of esrgan, which uses the pytorch framework.PyTorchCVGenerative" + }, + { + num: NumberInt("1204"), + value: "PyTorch Deep Image Steganography 65A PyTorch implementation of image steganography utilizing deep convolutional neural networksPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("1205"), + value: "cyclegan qp 65Official PyTorch implementation of \"Artist Style Transfer Via Quadratic Potential\"PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("1206"), + value: "plenoxels 65JAX implementation of PlenoxelsJAXCV" + }, + { + num: NumberInt("1207"), + value: "cyclic learning rate 64Cyclic learning rate TensorFlow implementation.TensorFlowGenerativeRLGraph" + }, + { + num: NumberInt("1208"), + value: "keras sincnet 64Keras (tensorflow) implementation of SincNet (Mirco Ravanelli, Yoshua Bengio - https://github.com/mravanelli/SincNet)TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1209"), + value: "game2vec 64TensorFlow implementation of word2vec applied on https://www.kaggle.com/tamber/steam-video-games dataset, using both CBOW and Skip-gram.TensorFlowCVGenerativeAudio" + }, + { + num: NumberInt("1210"), + value: "LiteSeg 64Pytorch implementation for LiteSegPyTorchCV" + }, + { + num: NumberInt("1211"), + value: "Variational Autoencoder pytorch 64Implementation of a convolutional Variational-Autoencoder model in pytorch.PyTorchGenerative" + }, + { + num: NumberInt("1212"), + value: "3PU_pytorch 64pytorch implementation of >>Patch-base progressive 3D Point Set Upsampling<<PyTorchGenerative" + }, + { + num: NumberInt("1213"), + value: "DeepClustering 64A pytorch implementation of the paper Unsupervised Deep Embedding for Clustering Analysis.PyTorchCVUnsupervised" + }, + { + num: NumberInt("1214"), + value: "rljax 64A collection of RL algorithms written in JAX.JAXCVRL" + }, + { + num: NumberInt("1215"), + value: "score_flow 64Official code for \"Maximum Likelihood Training of Score-Based Diffusion Models\", NeurIPS 2021 (spotlight)JAXCVGenerative" + }, + { + num: NumberInt("1216"), + value: "PhotographicImageSynthesiswithCascadedRefinementNetworks-Pytorch 63Photographic Image Synthesis with Cascaded Refinement Networks - Pytorch Implementation\nPyTorchCV" + }, + { + num: NumberInt("1217"), + value: "bottom up features 63Bottom-up features extractor implemented in PyTorch.PyTorchCV" + }, + { + num: NumberInt("1218"), + value: "GatedPixelCNNPyTorch 63PyTorch implementation of \"Conditional Image Generation with PixelCNN Decoders\" by van den Oord et al. 2016PyTorchCV" + }, + { + num: NumberInt("1219"), + value: "dgi 62TensorFlow implementation of Deep Graph InfomaxTensorFlowGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("1220"), + value: "Deep multimodal subspace clustering networks 62Tensorflow implementation of \"Deep Multimodal Subspace Clustering Networks\"TensorFlowCVGenerative" + }, + { + num: NumberInt("1221"), + value: "rethinking bnn optimization 62Implementation for the paper \"Latent Weights Do Not Exist: Rethinking Binarized Neural Network Optimization\"TensorFlowCVGenerative" + }, + { + num: NumberInt("1222"), + value: "breakout Deep Q Network 62Reinforcement Learning | tensorflow implementation of DQN, Dueling DQN and Double DQN performed on Atari BreakoutTensorFlowCVGenerativeRLGraph" + }, + { + num: NumberInt("1223"), + value: "dtan 62Official PyTorch implementation for our NeurIPS 2019 paper, Diffeomorphic Temporal Alignment Nets. TensorFlow\\Keras version is available at tf_legacy branch.TensorFlowGenerative" + }, + { + num: NumberInt("1224"), + value: "FunMatch Distillation 62TF2 implementation of knowledge distillation using the \"function matching\" hypothesis from https://arxiv.org/abs/2106.05237.TensorFlowCVGenerative" + }, + { + num: NumberInt("1225"), + value: "keras vision transformer 62The Tensorflow, Keras implementation of Swin-Transformer and Swin-UNETTensorFlowCVGenerative" + }, + { + num: NumberInt("1226"), + value: "renet 62[ICCV'21] Official PyTorch implementation of Relational Embedding for Few-Shot Classification PyTorchCV" + }, + { + num: NumberInt("1227"), + value: "dsnt 61An unofficial Tensorflow implementation of the DSNT layer, as taken from the paper \"Numerical Coordinate Regression with Convolutional Neural Networks\".TensorFlowGenerative" + }, + { + num: NumberInt("1228"), + value: "tf adain 61TensorFlow implementation of the paper \"Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization\" by Xun Huang and Serge BelongieTensorFlowCVGenerative" + }, + { + num: NumberInt("1229"), + value: "mtcnn pytorch 61pytorch implementation of face detection algorithm MTCNNPyTorchCV" + }, + { + num: NumberInt("1230"), + value: "DeepVO 61Implementation of DeepVO (ICRA 2017)PyTorchCVGenerative" + }, + { + num: NumberInt("1231"), + value: "DenseNet MURA PyTorch 61Implementation of DenseNet model on Standford's MURA dataset using PyTorchPyTorchCVGraph" + }, + { + num: NumberInt("1232"), + value: "DistributedES 61Distributed implementation of popular evolutionary methodsPyTorchRL" + }, + { + num: NumberInt("1233"), + value: "Transforming Autoencoder TF 60Tensorflow implementation of \"Transforming Autoencoders\" (Proposed by G.E.Hinton, et al.)TensorFlowNLPGenerativeSelf-Supervised" + }, + { + num: NumberInt("1234"), + value: "capsulesEM 60A tensorflow implementation of Hinton's [matrix capsules with EM routing](https://openreview.net/pdf?id=HJWLfGWRb)TensorFlowGenerative" + }, + { + num: NumberInt("1235"), + value: "DeblurGAN tf 60Unofficial tensorflow (tf) implementation of DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial NetworksTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1236"), + value: "tracking_via_colorizing 60Tensorflow implementation of CNN described in https://arxiv.org/abs/1806.09594TensorFlowCVGenerativeSelf-Supervised" + }, + { + num: NumberInt("1237"), + value: "R CNN 60My implementation of RCNN for the Flower DatesTensorFlowCVGenerative" + }, + { + num: NumberInt("1238"), + value: "skillful_nowcasting 60Implementation of DeepMind's Deep Generative Model of Radar (DGMR) https://arxiv.org/abs/2104.00954PyTorchGenerative" + }, + { + num: NumberInt("1239"), + value: "neurips18_hierchical_image_manipulation 60Pytorch Implementation of NeurIPS'18 paper on Generative Image Manipulation with Hierarchical Semantic StructuresPyTorchCVGenerative" + }, + { + num: NumberInt("1240"), + value: "transformer 60Neutron: A pytorch based implementation of Transformer and its variants.PyTorchCVNLP" + }, + { + num: NumberInt("1241"), + value: "DCGAN PyTorch 60PyTorch Implementation of DCGAN trained on the CelebA dataset.PyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("1242"), + value: "Dialog 59A PyTorch Implementation of japanese chatbot using BERT and Transformer's decoderPyTorchNLPAudio" + }, + { + num: NumberInt("1243"), + value: "chainer_caption_generation 59Show and Tell\nChainerNLP" + }, + { + num: NumberInt("1244"), + value: "jaxb2 rich contract plugin 59Implements some JAXB plugins to generate advanced contract scenarios from XSDJAXNLPGenerativeGraph" + }, + { + num: NumberInt("1245"), + value: "kfac jax 59Second Order Optimization and Curvature Estimation with K-FAC in JAX.JAXCVNLPGraph" + }, + { + num: NumberInt("1246"), + value: "nima 58Implementation of NIMA: Neural Image AssessmentTensorFlowCVGenerative" + }, + { + num: NumberInt("1247"), + value: "LightRNN NIPS2016 Tensorflow_code 58The tensorflow implementation of NIPS2016 paper \"LightRNN: Memory and Computation-Efficient Recurrent Neural Networks\" (https://arxiv.org/abs/1610.09893)TensorFlowGenerative" + }, + { + num: NumberInt("1248"), + value: "entity network 58Tensorflow implementation of \"Tracking the World State with Recurrent Entity Networks\" [https://arxiv.org/abs/1612.03969] by Henaff, Weston, Szlam, Bordes, and LeCun.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1249"), + value: "SENet tensorflow slim 58SENet implementation on TensorFlow SlimTensorFlowCVGenerative" + }, + { + num: NumberInt("1250"), + value: "tensorflow maxout 58Maxout Networks TensorFlow implementation presented in https://arxiv.org/abs/1302.4389TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1251"), + value: "pytorch consistency regularization 58PyTorch implementation of consistency regularization methods for semi-supervised learningPyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("1252"), + value: "FCRN_pytorch 58Pytorch Implementation of Deeper Depth Prediction with Fully Convolutional Residual NetworksPyTorchNLP" + }, + { + num: NumberInt("1253"), + value: "PCC pytorch 58A pytorch implementation of the paper \"Prediction, Consistency, Curvature: Representation Learning for Locally-Linear Control\"PyTorchCVGenerative" + }, + { + num: NumberInt("1254"), + value: "rescu 58A lightweight json Rest client utility for JAX-RSJAXNLP" + }, + { + num: NumberInt("1255"), + value: "QDax 58Accelerated Quality-DiversityJAXNLPRL" + }, + { + num: NumberInt("1256"), + value: "DiscoGAN TF 57Tensorflow Implementation of DiscoGANTensorFlowCVGenerative" + }, + { + num: NumberInt("1257"), + value: "detr_tensorflow 57A Tensorflow implementation of the DETR object detection architecture.TensorFlowCVGenerative" + }, + { + num: NumberInt("1258"), + value: "abae pytorch 57PyTorch implementation of 'An Unsupervised Neural Attention Model for Aspect Extraction' by He et al. ACL2017'PyTorchUnsupervisedGraph" + }, + { + num: NumberInt("1259"), + value: "XCloud 57Official Code for Paper (arXiv1912.10344)PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("1260"), + value: "SpineNet Pytorch 57SpineNet - mmdetection (Pytorch) ImplementationPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1261"), + value: "cloob training 57CLOOB training (JAX) and inference (JAX and PyTorch)JAXCV" + }, + { + num: NumberInt("1262"), + value: "TorchLRP 56A PyTorch 1.6 implementation of Layer-Wise Relevance Propagation (LRP). PyTorchCV" + }, + { + num: NumberInt("1263"), + value: "Representation Learning for Information Extraction 56Pytorch implementation of Paper by Google Research - Representation Learning for Information Extraction from Form-like Documents.PyTorchCVNLP" + }, + { + num: NumberInt("1264"), + value: "CycleGAN 56PyTorch implementation of CycleGANPyTorchCVGenerative" + }, + { + num: NumberInt("1265"), + value: "mmd/jmmd/adaBN 56Unsupervised transfer learning for image classification written in mxnet.MXNetCVUnsupervised" + }, + { + num: NumberInt("1266"), + value: "soap spring boot cxf 56Sample Project for producing & testing a SOAP-WSDL-driven Service with Spring Boot, Apache CXF & JAX-WSJAXNLPGenerative" + }, + { + num: NumberInt("1267"), + value: "jax rl 56JAX implementations of core Deep RL algorithmsJAXNLPGenerativeRL" + }, + { + num: NumberInt("1268"), + value: "MassFace 55MassFace: an effecient implementation using triplet loss for face recognitionTensorFlowCVGenerative" + }, + { + num: NumberInt("1269"), + value: "dcnn_textvae 55TensorFlow implementation of \"Improved Variational Autoencoders for Text Modeling using Dilated Convolutions\"TensorFlowGenerative" + }, + { + num: NumberInt("1270"), + value: "vae_captioning 55Implementation of Diverse and Accurate Image Description Using a Variational Auto-Encoder with an Additive Gaussian Encoding SpaceTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1271"), + value: "din 55keras implementation about Deep Interest NetworkTensorFlowGenerative" + }, + { + num: NumberInt("1272"), + value: "gsoc wav2vec2 55GSoC'2021 | TensorFlow implementation of Wav2Vec2TensorFlowNLPGenerativeAudioSelf-Supervised" + }, + { + num: NumberInt("1273"), + value: "ppo_pytorch_cpp 55This is an implementation of the proximal policy optimization algorithm for the C++ API of Pytorch.\nPyTorchRL" + }, + { + num: NumberInt("1274"), + value: "maxim pytorch 55[CVPR 2022 Oral] PyTorch re-implementation for \"MAXIM: Multi-Axis MLP for Image Processing\", with *training code*. Official Jax repo: https://github.com/google-research/maximJAXCVGenerative" + }, + { + num: NumberInt("1275"), + value: "DispNet TensorFlow 54TensorFlow implementation of DispNet by Zhijian Jiang.TensorFlowCVGenerative" + }, + { + num: NumberInt("1276"), + value: "Unet Tensorflow 54Tensorflow implement of U-NetTensorFlowCVGenerativeHealth" + }, + { + num: NumberInt("1277"), + value: "resemul 54A TensorFlow+Keras implementation of \"Sample-level CNN Architectures for Music Auto-tagging Using Raw Waveforms\"TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1278"), + value: "Super SloMo tf2 54Tensorflow 2 implementation of Super SloMo paperTensorFlowCVGenerative" + }, + { + num: NumberInt("1279"), + value: "google_evolution 54This implements one of result networks from Large-scale evolution of image classifiers by Esteban Real, et. al. \nPyTorchCV" + }, + { + num: NumberInt("1280"), + value: "graphx conv 54Official implementation of GraphX-ConvolutionPyTorchGraph" + }, + { + num: NumberInt("1281"), + value: "pytorch animeGAN 54Pytorch implementation of AnimeGAN for fast photo animationPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1282"), + value: "Deterministic GAIL PyTorch 54PyTorch implementation of Deterministic Generative Adversarial Imitation Learning (GAIL) for Off Policy learningPyTorchGenerativeRL" + }, + { + num: NumberInt("1283"), + value: "alexnet pytorch 54Pytorch Implementation of AlexNetPyTorchCV" + }, + { + num: NumberInt("1284"), + value: "fcos 54An unofficial implementation of FCOS in Pytorch: 37.3-resnet50-700pxPyTorchCV" + }, + { + num: NumberInt("1285"), + value: "Reinforment Implementation on a Quadruped 53Reinforment Implementation on a Quadruped using DDPG(tensorflow), ROS, Gazebo, real quadruped robot.TensorFlowGenerativeRL" + }, + { + num: NumberInt("1286"), + value: "img2imgGAN 53Implementation of the paper : \"Toward Multimodal Image-to-Image Translation\"TensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1287"), + value: "crnn tensorflow 53This software implements the Convolutional Recurrent Neural Network (CRNN) in tensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1288"), + value: "ifl tpp 53Implementation of \"Intensity-Free Learning of Temporal Point Processes\" (Spotlight @ ICLR 2020)PyTorchGraph" + }, + { + num: NumberInt("1289"), + value: "centernet lightning 53Implementation of CenterNet and FairMOT with PyTorch LightningPyTorchCVGenerative" + }, + { + num: NumberInt("1290"), + value: "chainer-dfi 53Deep Feature Interpolation for Image Content Changes\nChainerCV" + }, + { + num: NumberInt("1291"), + value: "Y AE 52Official Tensorflow implementation of the paper \"Y-Autoencoders: disentangling latent representations via sequential-encoding\", Pattern Recognition Letters (2020)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1292"), + value: "Parallel Wavenet 52It is a Tutorial, not a complete implementTensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1293"), + value: "Improving RNN recommendation model 52Applied weight tying technique to RNN based recommendation model. Implemented with Tensorflow and Keras.TensorFlowGenerativeRL" + }, + { + num: NumberInt("1294"), + value: "dec tensorflow 52Tensorflow implementation of \"Unsupervised Deep Embedding for Clustering Analysis\"TensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("1295"), + value: "distributed_reinforcement_learning 52implementation of distributed reinforcement learning with distributed tensorflowTensorFlowGenerativeRL" + }, + { + num: NumberInt("1296"), + value: "RolX 52An alternative implementation of Recursive Feature and Role Extraction (KDD11 & KDD12)TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1297"), + value: "Temporal Ensembling for Semi Supervised Learning 52Implementation of Temporal Ensembling for Semi-Supervised Learning by Laine et al. with tensorflow eager executionTensorFlowCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("1298"), + value: "CBAM TensorFlow2.0 52CBAM(Convolutional Block Attention Module) implementation on TensowFlow2.0TensorFlowGenerative" + }, + { + num: NumberInt("1299"), + value: "code2seq 52PyTorch's implementation of the code2seq model.PyTorchNLPGenerative" + }, + { + num: NumberInt("1300"), + value: "SKNet PyTorch 52Nearly Perfect & Easily Understandable PyTorch Implementation of SKNetPyTorchCV" + }, + { + num: NumberInt("1301"), + value: "X Punctuator 52A PyTorch implementation of a punctuation prediction system using (B)LSTM, which automatically adds suitable punctuation into text without punctuation.PyTorchNLPAudio" + }, + { + num: NumberInt("1302"), + value: "neural style pytorch 52Neural Style implementation in PyTorch! :art:PyTorchCVGenerative" + }, + { + num: NumberInt("1303"), + value: "LSGAN 52LSGAN\nChainerGenerative" + }, + { + num: NumberInt("1304"), + value: "PSENet Tensorflow 51TensorFlow implementation of PSENet text detector (Shape Robust Text Detection with Progressive Scale Expansion Networkt)TensorFlowCVGenerative" + }, + { + num: NumberInt("1305"), + value: "TensorFlow ESPCN 51TensorFlow implementation of the Efficient Sub-Pixel Convolutional Neural Network TensorFlowCVGenerative" + }, + { + num: NumberInt("1306"), + value: "Adaptive-segmentation-mask-attack (ASMA) 51A pytorch implementation of the MICCAI2019 paper \"Impact of Adversarial Examples on Deep Learning Models for Biomedical Image Segmentation\".\nPyTorchCVGenerative" + }, + { + num: NumberInt("1307"), + value: "deepdyn 51pytorch implementation of paper https://www.frontiersin.org/articles/10.3389/fcomp.2020.00035/fullPyTorchCVHealth" + }, + { + num: NumberInt("1308"), + value: "pspnet pytorch 51PyTorch implementation of PSPNetPyTorchCV" + }, + { + num: NumberInt("1309"), + value: "retinanet.pytorch 51RetinaNet implementation in PyTorchPyTorchCV" + }, + { + num: NumberInt("1310"), + value: "VGG16 PyTorch 51VGG16 Net implementation from PyTorch Examples scripts for ImageNet datasetPyTorchCV" + }, + { + num: NumberInt("1311"), + value: "mxnet-seq2seq 51This project implements the sequence to sequence learning with mxnet for open-domain chatbotMXNetNLP" + }, + { + num: NumberInt("1312"), + value: "crest 51Command-line API modeled after JAX-RS (Command REST)JAXCVNLPGenerativeRL" + }, + { + num: NumberInt("1313"), + value: "SST Tensorflow 50Tensorflow Implementation of the Paper \"SST: Single-Stream Temporal Action Proposals\" in CVPR 2017.TensorFlowGenerative" + }, + { + num: NumberInt("1314"), + value: "deep nlp 50Tensorflow Tutorial files and Implementations of various Deep NLP and CV Models.TensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1315"), + value: "CommNet BiCnet 50CommNet and BiCnet implementation in tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1316"), + value: "tf quaternion 50An implementation of quaternions for and written in tensorflow. Fully differentiable.TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1317"), + value: "FOTS_OCR 50TensorFlow Implementation of FOTS, Fast Oriented Text Spotting with a Unified Network.TensorFlowCVGenerative" + }, + { + num: NumberInt("1318"), + value: "YOLOv5 tf 50YOLOv5 implementation using TensorFlow 2TensorFlowCVGenerative" + }, + { + num: NumberInt("1319"), + value: "two step task 50Implementation of the two-step-task as described in \"Prefrontal cortex as a meta-reinforcement learning system\" and \"Learning to Reinforcement Learn\".TensorFlowRL" + }, + { + num: NumberInt("1320"), + value: "Swin Transformer Tensorflow 50Unofficial implementation of \"Swin Transformer: Hierarchical Vision Transformer using Shifted Windows\" (https://arxiv.org/abs/2103.14030)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1321"), + value: "gpt 2xy 50GPT-2 User Interface based on HuggingFace's Pytorch ImplementationPyTorchGenerative" + }, + { + num: NumberInt("1322"), + value: "ERNIE text classification pytorch 50This repo contains a PyTorch implementation of a pretrained ERNIE model for text classification.PyTorchGenerative" + }, + { + num: NumberInt("1323"), + value: "MolDQN pytorch 50A PyTorch Implementation of \"Optimization of Molecules via Deep Reinforcement Learning\".PyTorchCVGenerativeRL" + }, + { + num: NumberInt("1324"), + value: "densenet 50A PyTorch Implementation of \"Densely Connected Convolutional Networks\"PyTorchCV" + }, + { + num: NumberInt("1325"), + value: "c rnn gan.pytorch 50PyTorch implementation of C-RNN-GAN for Music GenerationPyTorchGenerativeAudio" + }, + { + num: NumberInt("1326"), + value: "pytorch gan metrics 50Pytorch implementation of common GAN metricsPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1327"), + value: "vision 503D Vision functions with end-to-end support for deep learning developers, written in Ivy.JAXCVGenerative" + }, + { + num: NumberInt("1328"), + value: "keras seq2seq example 49Toy Keras implementation of a seq2seq model with examples.TensorFlowNLPGenerative" + }, + { + num: NumberInt("1329"), + value: "MLP Mixer CIFAR10 49Implements MLP-Mixer (https://arxiv.org/abs/2105.01601) with the CIFAR-10 dataset. TensorFlowCV" + }, + { + num: NumberInt("1330"), + value: "pose estimation detection 49Implementation of openpose with tensorflow & openCV for estimation of human poses & classification.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1331"), + value: "deepVO 49:video_camera: Tensorflow implementation of RCCN visual odometry by Wang et al.TensorFlowCVGenerative" + }, + { + num: NumberInt("1332"), + value: "Keras augmentation layer 49Keras implementation of layer which performs augmentations of images using GPU.TensorFlowCVGenerative" + }, + { + num: NumberInt("1333"), + value: "Tensorflow_ML_Algorithms 49Implementations of machine learning algorithms in Tensorflow: MLP, RNN, autoencoder, PageRank, KNN, K-Means, logistic regression, and OLS regressionTensorFlowGenerative" + }, + { + num: NumberInt("1334"), + value: "VAL 49Tensorflow Implementation on Paper [CVPR2020]Image Search with Text Feedback by Visiolinguistic Attention LearningTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1335"), + value: "Sharpness Aware Minimization TensorFlow 49Implements sharpness-aware minimization (https://arxiv.org/abs/2010.01412) in TensorFlow 2. TensorFlowGenerative" + }, + { + num: NumberInt("1336"), + value: "PPO 49PyTorch implementation of Proximal Policy OptimizationPyTorchRLGraph" + }, + { + num: NumberInt("1337"), + value: "simple pytorch 3dgan 49A simple and unofficial 3D-GAN implementation using PyTorchPyTorchCVGenerative" + }, + { + num: NumberInt("1338"), + value: "pytorch arda 49A PyTorch implementation for Adversarial Representation Learning for Domain AdaptationPyTorchGenerative" + }, + { + num: NumberInt("1339"), + value: "tf a3c gpu 48Tensorflow implementation of A3C algorithmTensorFlowCVGenerativeRL" + }, + { + num: NumberInt("1340"), + value: "fdp modelserver 48An umbrella project for multiple implementations of model servingTensorFlowGenerative" + }, + { + num: NumberInt("1341"), + value: "fcn8s_tensorflow 48A TensorFlow implementation of FCN-8sTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1342"), + value: "Dense_BiLSTM 48Tensorflow Implementation of Densely Connected Bidirectional LSTM with Applications to Sentence ClassificationTensorFlowGenerative" + }, + { + num: NumberInt("1343"), + value: "tensorflow chatbot chinese 48 | tensorflow implementation of seq2seq model with bahdanau attention and Word2Vec pretrained embeddingTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1344"), + value: "tensorflow mnist MLP batch_normalization weight_initializers 48MNIST classification using Multi-Layer Perceptron (MLP) with 2 hidden layers. Some weight-initializers and batch-normalization are implemented.TensorFlowCVGenerative" + }, + { + num: NumberInt("1345"), + value: "Semantic segmentation with MobileNetV3 48TensorFlow (Keras) implementation of MobileNetV3 and its segmentation headTensorFlowCVGenerative" + }, + { + num: NumberInt("1346"), + value: "MTL Homoscedastic Uncertainty 48Multi Task Learning Implementation with Homoscedastic Uncertainty in TensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1347"), + value: "CSL YOLO 48A state of the art of new lightweight YOLO model implemented by TensorFlow 2.TensorFlowCVGenerative" + }, + { + num: NumberInt("1348"), + value: "kerod 48DETR - Faster RCNN implementation in tensorflow 2TensorFlowCVNLPGenerativeRL" + }, + { + num: NumberInt("1349"), + value: "tesla stocks prediction 48The implementation of LSTM in TensorFlow used for the stock prediction.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1350"), + value: "eco dqn 48Implementation of ECO-DQN as reported in \"Exploratory Combinatorial Optimization with Reinforcement Learning\".PyTorchRLGraph" + }, + { + num: NumberInt("1351"), + value: "yolo3_tensorflow 47yolo3 implement by tensorflow including mobilenet_v1, mobilenet_v2TensorFlowCVGenerative" + }, + { + num: NumberInt("1352"), + value: "attention augmented conv 47Implementation from the paper Attention Augmented Convolutional Networks in Tensorflow (https://arxiv.org/pdf/1904.09925v1.pdf)TensorFlowGenerative" + }, + { + num: NumberInt("1353"), + value: "MAML tf 47Tensorflow Implementation of MAMLTensorFlowGenerativeRL" + }, + { + num: NumberInt("1354"), + value: "bi tbcnn 47Bilateral Neural Network implementation in TensorflowTensorFlowGenerativeGraph" + }, + { + num: NumberInt("1355"), + value: "sample cnn 47A TensorFlow implementation of \"Sample-level Deep Convolutional Neural Networks for Music Auto-tagging Using Raw Waveforms\"TensorFlowGenerativeAudio" + }, + { + num: NumberInt("1356"), + value: "Simple does it weakly supervised instance and semantic segmentation 47Weakly Supervised Segmentation by Tensorflow. Implements semantic segmentation in Simple Does It: Weakly Supervised Instance and Semantic Segmentation, by Khoreva et al. (CVPR 2017).TensorFlowCVGenerative" + }, + { + num: NumberInt("1357"), + value: "relation network 47Tensorflow Implementation of Relation Networks for the bAbI QA Task, detailed in \"A Simple Neural Network Module for Relational Reasoning,\" [https://arxiv.org/abs/1706.01427] by Santoro et. al.TensorFlowGenerative" + }, + { + num: NumberInt("1358"), + value: "Siamese Sentence Similarity 47Keras and Tensorflow implementation of Siamese Recurrent Architectures for Learning Sentence SimilarityTensorFlowGenerative" + }, + { + num: NumberInt("1359"), + value: "bytenet 47Pytorch implementation of bytenet from \"Neural Machine Translation in Linear Time\" paper\nPyTorchNLP" + }, + { + num: NumberInt("1360"), + value: "CVDD PyTorch 47A PyTorch implementation of Context Vector Data Description (CVDD), a method for Anomaly Detection on text.PyTorchUnsupervised" + }, + { + num: NumberInt("1361"), + value: "ENet SAD_Pytorch 47Pytorch implementation of \"Learning Lightweight Lane Detection CNNs by Self Attention Distillation (ICCV 2019)\"PyTorchCVGenerative" + }, + { + num: NumberInt("1362"), + value: "tvnet_pytorch 47Tvnet implemented in pytorchPyTorchCVGenerative" + }, + { + num: NumberInt("1363"), + value: "semantic segmentation pytorch 47Pytorch implementation of FCN, UNet, PSPNet, and various encoder models.PyTorchCVGenerativeHealth" + }, + { + num: NumberInt("1364"), + value: "jax rs pac4j 47Security library for JAX-RS and JerseyJAXNLP" + }, + { + num: NumberInt("1365"), + value: "fast dpsgd 47Code for fast dpsgd implementations in JAX/TFJAXNLPGenerative" + }, + { + num: NumberInt("1366"), + value: "distribution_shift_framework 47This repository contains the code of the distribution shift framework presented in A Fine-Grained Analysis on Distribution Shift (Wiles et al., 2022).JAXCVNLPGenerative" + }, + { + num: NumberInt("1367"), + value: "tf word2vec 46TensorFlow implementation of word2vecTensorFlowGenerative" + }, + { + num: NumberInt("1368"), + value: "FCN GoogLeNet 46GoogLeNet implementation of Fully Convolutional Networks for Semantic Segmentation in TensorFlowTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1369"), + value: "rcan tensorflow 46Image Super-Resolution Using Very Deep Residual Channel Attention Networks Implementation in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1370"), + value: "faceboxes tensorflow 46 a tensorflow implement faceboxesTensorFlowCVGenerativeRL" + }, + { + num: NumberInt("1371"), + value: "ml in tf 46Get started with Machine Learning in TensorFlow with a selection of good reads and implemented examples!TensorFlowGenerativeRL" + }, + { + num: NumberInt("1372"), + value: "VQ VAE 46Pytorch Implementation of \"Neural Discrete Representation Learning\"PyTorchCVGenerative" + }, + { + num: NumberInt("1373"), + value: "DCGAN 46PyTorch implementation of DCGANPyTorchCVGenerative" + }, + { + num: NumberInt("1374"), + value: "deep dream pytorch 46Pytorch implementation of DeepDream on VGG16 NetworkPyTorchCV" + }, + { + num: NumberInt("1375"), + value: "pytorch transformer kor eng 46Transformer Implementation using PyTorch for Neural Machine Translation (Korean to English)PyTorchNLPGenerative" + }, + { + num: NumberInt("1376"), + value: "PyTorchSteerablePyramid 46PyTorch implementation of the Complex Steerable PyramidPyTorchCVNLP" + }, + { + num: NumberInt("1377"), + value: "madam 46 Pytorch and Jax code for the Madam optimiser.JAXCVGenerative" + }, + { + num: NumberInt("1378"), + value: "MC CNN python 45a python implementation of MC-CNNTensorFlowCVGenerative" + }, + { + num: NumberInt("1379"), + value: "deepspeech 45A PyTorch implementation of DeepSpeech and DeepSpeech2.PyTorchCVNLPAudio" + }, + { + num: NumberInt("1380"), + value: "attention ocr 45A pytorch implementation of the attention based ocrPyTorchCVGenerative" + }, + { + num: NumberInt("1381"), + value: "mnasnet pytorch 45A PyTorch implementation of MNASNETPyTorchCVGenerativeAudio" + }, + { + num: NumberInt("1382"), + value: "language modeling 44This is machine learning model that is trained to predict next word in the sequence. Model is defined in keras and then converted to tensorflow-js model for the web, check the web implementation atTensorFlowGenerative" + }, + { + num: NumberInt("1383"), + value: "minimal_wgan 44A minimal implementation of Wasserstein GANTensorFlowGenerative" + }, + { + num: NumberInt("1384"), + value: "LSGAN TF 44Simple implementation of Least Squares Generative Adversarial NetworksTensorFlowGenerative" + }, + { + num: NumberInt("1385"), + value: "FGSM pytorch 44A pytorch implementation of \"Explaining and harnessing adversarial examples\"PyTorchCVGenerative" + }, + { + num: NumberInt("1386"), + value: "universal vocoder 44A PyTorch implementation of the universal neural vocoderPyTorchAudio" + }, + { + num: NumberInt("1387"), + value: "pytorch_implementation_of_Yolov1 44yolov1 tutorial-like implementationPyTorchCV" + }, + { + num: NumberInt("1388"), + value: "pytorch atda 44A PyTorch implementation for Asymmetric Tri-training for Unsupervised Domain AdaptationPyTorchUnsupervised" + }, + { + num: NumberInt("1389"), + value: "quasi rnn 44A PyTorch Implementation of \"Quasi-Recurrent Neural Networks\"PyTorchNLP" + }, + { + num: NumberInt("1390"), + value: "Monolingual and Multilingual Image Captioning 44This is the source code that accompanies Multilingual Image Description with Neural Sequence Models .KerasCVNLP" + }, + { + num: NumberInt("1391"), + value: "jax_privacy 44Algorithms for Privacy-Preserving Machine Learning in JAXJAXCVGenerative" + }, + { + num: NumberInt("1392"), + value: "AVO-pytorch 43Implementation of Adversarial Variational Optimization in PyTorch.\nPyTorchGenerative" + }, + { + num: NumberInt("1393"), + value: "KGCN pytorch 43KGCN pytorch model implementationPyTorchGraph" + }, + { + num: NumberInt("1394"), + value: "birdnet2 43Official Pytorch implementation of Birdnet+PyTorchCV" + }, + { + num: NumberInt("1395"), + value: "cartoon gan 43Implementation of cartoon GAN [Chen et al., CVPR18] with pytorchPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1396"), + value: "RNNSearch 43An implementation of attention-based neural machine translation using PytorchPyTorchNLP" + }, + { + num: NumberInt("1397"), + value: "cDCGAN 43PyTorch implementation of Conditional Deep Convolutional Generative Adversarial Networks (cDCGAN)PyTorchCVGenerative" + }, + { + num: NumberInt("1398"), + value: "mxnet-audio 43Implementation of music genre classification, audio-to-vec, song recommender, and music search in mxnetMXNetAudio" + }, + { + num: NumberInt("1399"), + value: "pytorch glow 42PyTorch implementation of \"Glow: Generative Flow with Invertible 1x1 Convolutions\"PyTorchCVGenerative" + }, + { + num: NumberInt("1400"), + value: "STDN PyTorch 42Scale Transferrable Object Detection (STDN) implementation in PyTorchPyTorchCV" + }, + { + num: NumberInt("1401"), + value: "sae pytorch 42PyTorch Implementation of SAE from AtoZPyTorchCV" + }, + { + num: NumberInt("1402"), + value: "Graphics code generating model using Processing 41sketchnet - processing code generatorPyTorchCV" + }, + { + num: NumberInt("1403"), + value: "pytorch prnet 41pytorch implementation of PRNet, with weight transferedPyTorchCVGenerative" + }, + { + num: NumberInt("1404"), + value: "ibc 41A PyTorch implementation of Implicit Behavioral CloningPyTorchRL" + }, + { + num: NumberInt("1405"), + value: "android jaxb 41Android doesn't support JAXB. Use this library to generate SimpleXML annotated classes from XML Schema. Works well with Android.JAXNLP" + }, + { + num: NumberInt("1406"), + value: "brave 41A JAX implementation of Broaden Your Views for Self-Supervised Video Learning, or BraVe for short.JAXNLPGenerativeAudioSelf-Supervised" + }, + { + num: NumberInt("1407"), + value: "audax 41A home for audio ML in JAX. Has common features, learnable frontends, pretrained supervised and self-supervised models.JAXCVNLPGenerativeAudioSelf-Supervised" + }, + { + num: NumberInt("1408"), + value: "pytorch rdpg 40PyTorch Implementation of the RDPG (Recurrent Deterministic Policy Gradient)PyTorchRL" + }, + { + num: NumberInt("1409"), + value: "pytorch ricap 40PyTorch implementation of RICAP (Random Image Cropping And Patching) PyTorchCV" + }, + { + num: NumberInt("1410"), + value: "DNN HSMM 40pytorch implementation of DNN-HSMM for TTSPyTorchNLPAudio" + }, + { + num: NumberInt("1411"), + value: "SeqGAN PyTorch 40Implementation of Sequence Generative Adversarial Nets with Policy Gradient in PyTorchPyTorchGenerativeRL" + }, + { + num: NumberInt("1412"), + value: "raml jaxrs codegen 40Tools to enable RAML-first development in JAX-RS projectsJAXNLPGenerative" + }, + { + num: NumberInt("1413"), + value: "fedpa 40Federated posterior averaging implemented in JAXJAXGenerative" + }, + { + num: NumberInt("1414"), + value: "vdvae jax 40Very deep VAEs in JAX/FlaxJAXCVGenerative" + }, + { + num: NumberInt("1415"), + value: "Asynchronous Advantage Actor-Critic in PyTorch 39This is PyTorch implementation of A3C as described in Asynchronous Methods for Deep Reinforcement Learning. Since PyTorch has a easy method to control shared memory within multiprocess, we can easily implement asynchronous method like A3C. \nPyTorchRL" + }, + { + num: NumberInt("1416"), + value: "Hierarchical Attention Network for Document Classification 39A faster and up to date implementation is in my other repoPyTorchNLP" + }, + { + num: NumberInt("1417"), + value: "pytorch_ppo_rl 39Pytorch implementation of intrinsic curiosity module with proximal policy optimizationPyTorchRLSelf-Supervised" + }, + { + num: NumberInt("1418"), + value: "DomainTransferNetwork.pytorch 39A pytorch implementation of the Domain Transfer Network (DTN), Unsupervised Cross-Domain Image GenerationPyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("1419"), + value: "pytorch CycleGAN 39Pytorch implementation of CycleGAN.PyTorchCVNLPGenerative" + }, + { + num: NumberInt("1420"), + value: "metro jax ws 39metro-jax-wsJAXGenerativeRL" + }, + { + num: NumberInt("1421"), + value: "DeblurGAN pytorch 38An easy-to-read implementation of DeblurGANPyTorchCVGenerative" + }, + { + num: NumberInt("1422"), + value: "binary nets 38PyTorch implementation of binary neural networksPyTorchCV" + }, + { + num: NumberInt("1423"), + value: "pytorch gym 38Implementation of the Deep Deterministic Policy Gradient(DDPG) in bullet Gym using pytorchPyTorchRL" + }, + { + num: NumberInt("1424"), + value: "deep photo enhancer 38the Pytorch implementation of Deep Photo EnhancerPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("1425"), + value: "torch scae 38PyTorch implementation of Stacked Capsule Auto-EncodersPyTorchCVGenerative" + }, + { + num: NumberInt("1426"), + value: "dhmc jax 38Discontinuous Hamiltonian Monte Carlo in JAXJAXGenerative" + }, + { + num: NumberInt("1427"), + value: "Detectx Yolo V3 37Yolo-V3 implementation from scratch in pytorchPyTorchCV" + }, + { + num: NumberInt("1428"), + value: "Musculoskeletal Radiographs Abnormality Classifier 37An implementation of MURA Dataset Towards Radiologist-Level Abnormality Detection in Musculoskeletal RadiographsPyTorchCVGraph" + }, + { + num: NumberInt("1429"), + value: "gated attention reader 37Tensorflow/Pytorch implementation of Gated Attention ReaderPyTorchGenerative" + }, + { + num: NumberInt("1430"), + value: "timegan pytorch 37This repository is a non-official implementation of TimeGAN (Yoon et al., NIPS2019) using PyTorch.PyTorchGenerative" + }, + { + num: NumberInt("1431"), + value: "TigerControl 37Google AI Princeton control frameworkJAXNLPRL" + }, + { + num: NumberInt("1432"), + value: "flaxvision 37A selection of neural network models ported from torchvision for JAX & Flax.JAXCV" + }, + { + num: NumberInt("1433"), + value: "AEGeAN 36Deeper DCGAN with AE stabilization\nPyTorchGenerative" + }, + { + num: NumberInt("1434"), + value: "pytorch_VAE_CVAE 36pytorch implementation Variational Autoencoder and Conditional Variational AutoencoderPyTorchGenerative" + }, + { + num: NumberInt("1435"), + value: "BlazeFace_Person.pytorch 36Unofficial Pytorch implementation of :fire:BlazeFace:fire:PyTorchCV" + }, + { + num: NumberInt("1436"), + value: "omd 36JAX code for the paper \"Control-Oriented Model-Based Reinforcement Learning with Implicit Differentiation\"JAXRLGraph" + }, + { + num: NumberInt("1437"), + value: "unrolled gans 35PyTorch Implementation of Unrolled Generative Adversarial NetworksPyTorchGenerative" + }, + { + num: NumberInt("1438"), + value: "pytorch_DANN 35PyTorch implementation of DANNPyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("1439"), + value: "NASBench PyTorch 35A PyTorch implementation of NASBenchPyTorchGenerativeGraph" + }, + { + num: NumberInt("1440"), + value: "t5 flax gcp 35Tutorial to pretrain & fine-tune a Flax T5 model on a TPUv3-8 with GCPJAXNLPGenerative" + }, + { + num: NumberInt("1441"), + value: "pytorch_vsum ptr gan 34A PyTorch implementation of VSumPtrGANPyTorchNLPGenerativeUnsupervised" + }, + { + num: NumberInt("1442"), + value: "semi supervised paper implementation 34Reproduce some methods in semi-supervised papers.PyTorchGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("1443"), + value: "GANs for 1D Signal 34implementation of several GANs with pytorchPyTorchGenerative" + }, + { + num: NumberInt("1444"), + value: "pytorch vae 34A minimal pytorch implementation of VAE, IWAE, MIWAEPyTorchGenerative" + }, + { + num: NumberInt("1445"), + value: "PlaneRecNet 34This is an official implementation for \"PlaneRecNet\" (BMVC 2021).PyTorchCVGenerative" + }, + { + num: NumberInt("1446"), + value: "dks 34Multi-framework implementation of Deep Kernel Shaping and Tailored Activation Transformations, which are methods that modify neural network models (and their initializations) to make them easier to train.JAXCVGenerative" + }, + { + num: NumberInt("1447"), + value: "wax ml 34A Python library for machine-learning and feedback loops on streaming dataJAXNLPGenerativeRLAudioGraph" + }, + { + num: NumberInt("1448"), + value: "jax variational diffwave 34Jax/Flax implementation of Variational-DiffWave.JAXNLPGenerativeAudio" + }, + { + num: NumberInt("1449"), + value: "infinite_ae_cf 34-AE model's implementation in JAX. Kernel-only method outperforms complicated SoTA models with a closed-form solution and a single hyper-parameter.JAXGenerative" + }, + { + num: NumberInt("1450"), + value: "odcnn 33implementation of improved musical onset detection with cnnPyTorchAudio" + }, + { + num: NumberInt("1451"), + value: "TwinBert 33pytorch implementation of the TwinBert paper PyTorchNLP" + }, + { + num: NumberInt("1452"), + value: "imagenet-vgg 33VGG\nChainerCV" + }, + { + num: NumberInt("1453"), + value: "improved-gan 33code for the paperChainerGenerative" + }, + { + num: NumberInt("1454"), + value: "gym 33Fully differentiable RL environments, written in Ivy.JAXCVGenerativeRL" + }, + { + num: NumberInt("1455"), + value: "Simple Generative Adversarial Networks 32Run the sample code by typing:PyTorchGenerative" + }, + { + num: NumberInt("1456"), + value: "AlexNet PyTorch 32An PyTorch implementation AlexNet.Simple, easy to use and efficientPyTorchCVGraph" + }, + { + num: NumberInt("1457"), + value: "Pytorch metrics 32Implementation of Evaluation Metrics for PytorchPyTorchCV" + }, + { + num: NumberInt("1458"), + value: "jax finufft 32JAX bindings to the Flatiron Institute Non-uniform Fast Fourier Transform (FINUFFT) libraryJAXGenerative" + }, + { + num: NumberInt("1459"), + value: "vit vqgan 32JAX implementation ViT-VQGANJAXGenerative" + }, + { + num: NumberInt("1460"), + value: "A2C 31PyTorch implementation of Advantage Actor-Critic (A2C)PyTorchRL" + }, + { + num: NumberInt("1461"), + value: "DRCN 31Pytorch implementation of Deep Reconstruction Classification NetworksPyTorchCVUnsupervised" + }, + { + num: NumberInt("1462"), + value: "chainer-Variational-AutoEncoder 31Variational autoencoder (VAE)\nChainerGenerative" + }, + { + num: NumberInt("1463"), + value: "efax 31Exponential families for JAXJAXCVGenerative" + }, + { + num: NumberInt("1464"), + value: "ppo_jax 31Jax implementation of Proximal Policy Optimization (PPO) specifically tuned for Procgen, with benchmarked results and saved model weights on all environments.JAXGenerativeRL" + }, + { + num: NumberInt("1465"), + value: "PixelCNN 30PyTorch implementation of gated PixelCNNPyTorchCV" + }, + { + num: NumberInt("1466"), + value: "gail pytorch 29A simple implementation of Generative Adversarial Imitation Learning with PyTorchPyTorchGenerativeRL" + }, + { + num: NumberInt("1467"), + value: "Deep Compression.Pytorch 29Unofficial Pytorch implementation of Deep Compression in CIFAR10PyTorchCV" + }, + { + num: NumberInt("1468"), + value: "TryOnGAN 29TryOnGAN: Unofficial ImplementationPyTorchCVGenerative" + }, + { + num: NumberInt("1469"), + value: "**dspnet** 29This repositary contains an implementation of the paper Driving Scene Perception Network: Real-time Joint Detection, Depth Estimation and Semantic Segmentation .MXNetCV" + }, + { + num: NumberInt("1470"), + value: "multilabel 29This is the implement of the multilabel image classificaton in MXNet.MXNetCV" + }, + { + num: NumberInt("1471"), + value: "VAE 29Variational AutoEncoder\nChainerGenerative" + }, + { + num: NumberInt("1472"), + value: "chef transformer 29Chef Transformer .JAXNLPGenerative" + }, + { + num: NumberInt("1473"), + value: "ERFNet PyTorch 28A PyTorch implementation for ERFNet on Pascal VOC data.PyTorchCVGraph" + }, + { + num: NumberInt("1474"), + value: "Overlap_Local_SGD 28Implementation of (overlap) local SGD in PytorchPyTorchNLP" + }, + { + num: NumberInt("1475"), + value: "ViT jax2tf 28This repository hosts code for converting the original Vision Transformer models (JAX) to TensorFlow. JAXCVGenerative" + }, + { + num: NumberInt("1476"), + value: "ShinRL 28ShinRL: A Library for Evaluating RL Algorithms from Theoretical and Practical Perspectives (Deep RL Workshop 2021)JAXCVRL" + }, + { + num: NumberInt("1477"), + value: "deq jax 28[NeurIPS'19] Deep Equilibrium Models Jax ImplementationJAXGenerative" + }, + { + num: NumberInt("1478"), + value: "PyTorch Cascaded Pyramid Network 27a pytorch implementation of CPNPyTorchGenerative" + }, + { + num: NumberInt("1479"), + value: "chainer-gan-denoising-feature-matching 27Generative Adversarial Networks with Denoising Feature Matching\nChainerGenerative" + }, + { + num: NumberInt("1480"), + value: "rl_with_resets 27JAX implementation of deep RL agents with resets from the paper \"The Primacy Bias in Deep Reinforcement Learning\"JAXGenerativeRL" + }, + { + num: NumberInt("1481"), + value: "ddpg pytorch 26PyTorch implementation of DDPG for continuous control tasks.PyTorchRL" + }, + { + num: NumberInt("1482"), + value: "rest 26Seam REST is a lightweight module that aims to provide additional integration with technologies within the Java EE platform as well as third party technologies. Seam REST is independent of CDI and JAX-RS implementations and thus fully portable between Java EE 6 environments. JAXNLP" + }, + { + num: NumberInt("1483"), + value: "reactive wizard 26Reactive non-blocking web applications made really easy with JAX-RS and RxJava.JAXHealth" + }, + { + num: NumberInt("1484"), + value: "yolov3 pytorch 25A pytorch implementation of yolov3 PyTorchCV" + }, + { + num: NumberInt("1485"), + value: "FocusLiteNN 25Official PyTorch and MATLAB implementations of our MICCAI 2020 paper \"FocusLiteNN: High Efficiency Focus Quality Assessment for Digital Pathology\"PyTorchCVGenerative" + }, + { + num: NumberInt("1486"), + value: "cwvae jax 25Clockwork VAEs in JAX/FlaxJAXCVGenerative" + }, + { + num: NumberInt("1487"), + value: "Image Captioning 24Implemented 3 different architectures to tackle the Image Caption problem, i.e, Merged Encoder-Decoder - Bahdanau Attention - TransformersTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1488"), + value: "flaxOptimizers 24A collection of optimizers, some arcane others well known, for Flax.JAXNLP" + }, + { + num: NumberInt("1489"), + value: "Deep Feature Interporlation Face Attribute manipulation Glasses Remove Youth2Senior etc. TensorFlow 23A simple implementation of the paper 'Deep Feature Interpolation for Image Content Changes'TensorFlowCVGenerative" + }, + { + num: NumberInt("1490"), + value: "traj pred irl 23Official implementation codes of \"Regularizing neural networks for future trajectory prediction via IRL framework\"TensorFlowGenerativeRL" + }, + { + num: NumberInt("1491"), + value: "manifold_mixup 23Tensorflow implementation of the Manifold Mixup machine learning research paperTensorFlowCVGenerative" + }, + { + num: NumberInt("1492"), + value: "face detection flask nginx gunicorn docker 23This is a minimal implementation of face-detection models using flask, gunicorn, nginx, docker, and docker-composeTensorFlowCVGenerative" + }, + { + num: NumberInt("1493"), + value: "DCGAN Pytorch 23A Pytorch implementation of \"Deep Convolutional Generative Adversarial Networks\"PyTorchCVGenerative" + }, + { + num: NumberInt("1494"), + value: "nonlinear IB PyTorch 23Pytorch Implementation of the Nonlinear Information BottleneckPyTorchCVGenerative" + }, + { + num: NumberInt("1495"), + value: "SqeezeNet 23Top-1 Acc=61.0% on ImageNet, without any sacrificing compared with SqueezeNet v1.1.MXNetCV" + }, + { + num: NumberInt("1496"), + value: "AdversarialAutoEncoder 23Adversarial Autoencoder [arXiv:1511.05644] implemented with MXNet.MXNetGenerative" + }, + { + num: NumberInt("1497"), + value: "ADDA 23Adversarial Discriminative Domain Adaptation\nChainerGenerative" + }, + { + num: NumberInt("1498"), + value: "undertow cdi jaxrs 23An Implementation integrating JAX-RS (RestEasy) with CDI (Weld) on a fast embedded servlet container (Undertow)JAXGenerative" + }, + { + num: NumberInt("1499"), + value: "jax gcn 23Graph Convolutional Networks in JAXJAXGraph" + }, + { + num: NumberInt("1500"), + value: "sabertooth 23Standalone pre-training recipe with JAX+FlaxJAXCVNLPGenerative" + }, + { + num: NumberInt("1501"), + value: "ECG Arrhythmia Classification in 2D CNN 22This is an implementation based on this paper, \"ECG arrhythmia classification using a 2-D convolutional neural network\", Tae Joon Jun et al., CVPR 2018.\" with some personal modificationsTensorFlowCV" + }, + { + num: NumberInt("1502"), + value: "matching networks tf 22Implementation of Matching Networks for One Shot Learning in TensorFlow 2.0TensorFlowCVGenerative" + }, + { + num: NumberInt("1503"), + value: "CACM 22Pytorch implementation of CACM (WSDM'20)PyTorchNLP" + }, + { + num: NumberInt("1504"), + value: "Ultrasound nerve segmentation 22Kaggle ultrasound nerve segmentation challenge using Keras.KerasCVAudio" + }, + { + num: NumberInt("1505"), + value: "MathJaxView 22A library to render MathJax offline in Android devicesJAXNLP" + }, + { + num: NumberInt("1506"), + value: "roberta base mr 22RoBERTa Marathi Language model trained from scratch during huggingface x flax community weekJAXNLPSelf-Supervised" + }, + { + num: NumberInt("1507"), + value: "alexnet 21custom implementation alexnet with tensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1508"), + value: "las 21tf 2.0 implementation of Listen, attend and spellTensorFlowNLPAudio" + }, + { + num: NumberInt("1509"), + value: "crossgrad 21This repository contains implementation of CROSSGRAD (https://openreview.net/forum?id=r1Dx7fbCW) and DAN (https://arxiv.org/abs/1505.07818).TensorFlowCV" + }, + { + num: NumberInt("1510"), + value: "DeepDomainAdaptation 21Tensorflow deep learning based domain adaptation model implementations with experiment of estimate MNIST by SVHN data (SVHN -> MNIST): DANN (domain-adversarial neural network), Deep JDOT (joint distribution optimal transportation)TensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("1511"), + value: "TENet kws 21Tensorflow implementation of \"Small-Footprint Keyword Spotting with Multi-Scale Temporal Convolution\"(INTERSPEECH 2020)TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1512"), + value: "vibration_gan 21Implement GANs to generate time-series signals for imbalanced learning problem. The experiments are conducted using CWRU bearing data.TensorFlowGenerative" + }, + { + num: NumberInt("1513"), + value: "tf_keras_gradcamplusplus 21tensorflow.keras implementation of gradcam and gradcam++TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1514"), + value: "Deep Learning Algorithms Implementation 21Implementations of (Deep Learning + Machine Learning) AlgorithmsPyTorchNLPGenerative" + }, + { + num: NumberInt("1515"), + value: "PAAC.pytorch 21Pytorch implementation of the PAAC algorithm presented in Efficient Parallel Methods for Deep Reinforcement Learning https://arxiv.org/abs/1705.04862PyTorchRLGraph" + }, + { + num: NumberInt("1516"), + value: "SEC 21This is a reimplementation of the paper \"Seed, Expand and Constrain: Three Principles for Weakly-Supervised Image MXNetCV" + }, + { + num: NumberInt("1517"), + value: "jax comln 21Code for \"Continuous-Time Meta-Learning with Forward Mode Differentiation\" (ICLR 2022)JAXGenerative" + }, + { + num: NumberInt("1518"), + value: "jax dag gflownet 21Code for \"Bayesian Structure Learning with Generative Flow Networks\"JAXGenerativeGraph" + }, + { + num: NumberInt("1519"), + value: "soft attention image captioning 20tensorflow implementation of show, attend and tell (ICML'15)TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1520"), + value: "handwritten sequence tensorflow 20Tensorflow implementation of handwritten sequence of small letters recognition.TensorFlowGenerative" + }, + { + num: NumberInt("1521"), + value: "Tensorflow lite kotlin samples 20This repo contains the kotlin implementation of TensorflowLite Example Android AppsTensorFlowCVNLPGenerativeRLAudio" + }, + { + num: NumberInt("1522"), + value: "Deep Gaussian Process 20 Implementation of doubly stochastic deep Gaussian Process using GPflow and TensorFlow 2.0TensorFlowGenerative" + }, + { + num: NumberInt("1523"), + value: "Weight Normalization 20Complete implementation of Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks articleTensorFlowCVGenerative" + }, + { + num: NumberInt("1524"), + value: "Kervolution 20Kervolution implementation using TF2.0TensorFlowGenerative" + }, + { + num: NumberInt("1525"), + value: "tf CNN CASIA HWDB 20A tensorflow implementation of recognition of handwritten Chinese characters.TensorFlowGenerative" + }, + { + num: NumberInt("1526"), + value: "cmorlet tensorflow 20A TensorFlow implementation of the Continous Wavelet Transform based on the complex Morlet wavelet.TensorFlowGenerative" + }, + { + num: NumberInt("1527"), + value: "tensorstyle 20Fast image style transfer implemented with TensorFlow.TensorFlowCVGenerative" + }, + { + num: NumberInt("1528"), + value: "tacotron 20PyTorch implementation of Tacotron and Tacotron2PyTorchCVNLPGenerativeAudio" + }, + { + num: NumberInt("1529"), + value: "Transformer Implementations 20Library - Vanilla, ViT, DeiT, BERT, GPTPyTorchCVNLP" + }, + { + num: NumberInt("1530"), + value: "flax sentence embeddings 20Shared code for training sentence embeddings with Flax / JAXJAXNLP" + }, + { + num: NumberInt("1531"), + value: "MathJax siunitx 20MathJax extension that emulates the great LaTeX package `siunitx` by Joseph WrightJAXCVNLP" + }, + { + num: NumberInt("1532"), + value: "tf_CapsNet 19A tensorflow implementation for CapsNetTensorFlowCVGenerative" + }, + { + num: NumberInt("1533"), + value: "recurrent attention model 19A TensorFlow implementation of the recurrent models of visual attentionTensorFlowCVGenerative" + }, + { + num: NumberInt("1534"), + value: "SiamRPN TF 19A TensorFlow implementation of SiamRPNTensorFlowCVGenerative" + }, + { + num: NumberInt("1535"), + value: "paican 19Implementation of \"Bayesian Robust Attributed Graph Clustering: Joint Learning of Partial Anomalies and Group Structure\".TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1536"), + value: "MeuralPaint 19TensorFlow implementation of CNN fast neural style transfer TensorFlowCVGenerative" + }, + { + num: NumberInt("1537"), + value: "class activation mapping 19tensorflow implementation of cnn localization project by CSAIL@MIT (CVPR'16)TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1538"), + value: "han 19TensorFlow implementation of Z. Hu et al. \"Listening to Chaotic Whispers: A Deep Learning Framework for News-oriented Stock Trend Prediction\", WSDM 2018TensorFlowGenerative" + }, + { + num: NumberInt("1539"), + value: "tf madgrad 19A tf.keras implementation of Facebook AI's MadGrad optimization algorithmTensorFlowCVGenerative" + }, + { + num: NumberInt("1540"), + value: "ali g 19Implementation of the ALI-G algorithm (PyTorch, Tensorflow)TensorFlowCVGenerative" + }, + { + num: NumberInt("1541"), + value: "cross modal hasing playground 19Python implementation of cross-modal hashing algorithmsTensorFlowGenerative" + }, + { + num: NumberInt("1542"), + value: "SimCLR tensorflow 19TensorFlow Implementation of SimCLR: A Simple Framework for Contrastive Learning of Visual RepresentationsTensorFlowNLPGenerativeUnsupervisedSelf-Supervised" + }, + { + num: NumberInt("1543"), + value: "Remote Sensing Analysis 19Implementing a remote sensing object detector using Tensorflow object detection APITensorFlowCVGenerative" + }, + { + num: NumberInt("1544"), + value: "softmax_triplet_loss 19(WACV 2020) Tensorflow implementation of Boosting Standard Classification Architectures Through a Ranking RegularizerTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1545"), + value: "MANN meta learning 19A tensorflow implement of Memory-Augmented Neural NetworkTensorFlowCVGenerative" + }, + { + num: NumberInt("1546"), + value: "full reimplementation of unet 19This is a full implementation of UNet using TensorFlow low level API, high level API and KerasTensorFlowCVGenerativeHealth" + }, + { + num: NumberInt("1547"), + value: "Anomaly_Detect_LSTM_VAE 19Keras implementation of LSTM-VAE model for anomaly detectionTensorFlowGenerative" + }, + { + num: NumberInt("1548"), + value: "VariationalNeuralAnnealing 19A variational implementation of classical and quantum annealing using recurrent neural networks for the purpose of solving optimization problems. TensorFlowGenerativeRL" + }, + { + num: NumberInt("1549"), + value: "pytorch_EDANet 19implementation EDANet by pytorchPyTorchCV" + }, + { + num: NumberInt("1550"), + value: "self critical 19PyTorch implementation of paper: \"Self-critical Sequence Training for Image Captioning\"PyTorchCVNLP" + }, + { + num: NumberInt("1551"), + value: "jaxmpp 19Java XMPP client libraryJAXNLP" + }, + { + num: NumberInt("1552"), + value: "ninjax 19General Modules for JAXJAXGenerativeGraph" + }, + { + num: NumberInt("1553"), + value: "min dalle flax 19This contains the Flax model of min(DALLE) and code for converting it to PyTorchJAXCVGenerative" + }, + { + num: NumberInt("1554"), + value: "Lip2Word 18End-to-end pipeline for lip reading at the word level using a tensorflow CNN implementation.TensorFlowNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1555"), + value: "Diffeomorphic demons 18TensorFlow implementation of the diffeomorphic demons algorithm for medical image registrationTensorFlowCVGenerative" + }, + { + num: NumberInt("1556"), + value: "tf invertible resnet 18A TensorFlow implementation of Invertible Residual NetworksTensorFlowGenerative" + }, + { + num: NumberInt("1557"), + value: "PokeGAN 18A tensorflow/keras implementation of StyleGAN to generate images of new Pokemon.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1558"), + value: "Android Machine Learning With TensorFlow 18Tensor Flow implementation for Android TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1559"), + value: "GenZoo 18A repository providing implementations of generative models in various frameworks.TensorFlowCVNLPGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("1560"), + value: "maml tensorflow 18This repository implements the paper, Model-Agnostic Meta-Leanring for Fast Adaptation of Deep Networks.TensorFlowCVGenerative" + }, + { + num: NumberInt("1561"), + value: "Denoised Smoothing TF 18Minimal implementation of Denoised Smoothing (https://arxiv.org/abs/2003.01908) in TensorFlow. TensorFlowCVGenerative" + }, + { + num: NumberInt("1562"), + value: "ResNet 50 101 152 18This is an implementation of ResNet-50/101/152.TensorFlowCVGenerative" + }, + { + num: NumberInt("1563"), + value: "Autoregressive models 18Tensorflow 2.0 implementation of Deep Autoregressive ModelsTensorFlowCVGenerative" + }, + { + num: NumberInt("1564"), + value: "DeepLabV3Plus Tf2.x 18A Tensorflow implementation of Deep Lab V3 Plus from scratch.TensorFlowCVGenerative" + }, + { + num: NumberInt("1565"), + value: "translearn 18Code implementation of the paper \"With Great Training Comes Great Vulnerability: Practical Attacks against Transfer Learning\", at USENIX Security 2018TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1566"), + value: "semisupervised_timeseries_infogan 18A tensorflow implementation of informative generative adversarial network (InfoGAN ) to one dimensional ( 1D ) time series data with a supervised loss function. So it's called semisupervised Info GAN.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1567"), + value: "yolov3 pytorch 18YOLOV3 pytorch implementation as a python packagePyTorchCV" + }, + { + num: NumberInt("1568"), + value: "TP GAN 18TP-GAN Pytorch implementationPyTorchGenerative" + }, + { + num: NumberInt("1569"), + value: "MXSeq2Seq(Gluon:star 18python seq2seq.pyMXNetNLP" + }, + { + num: NumberInt("1570"), + value: "fastjson jaxrs json provider 18a JAX-RS entity provider for https://github.com/alibaba/fastjsonJAXNLP" + }, + { + num: NumberInt("1571"), + value: "xcauto 18Arbitrary order exchange-correlation functional derivatives using JAX.JAXGraph" + }, + { + num: NumberInt("1572"), + value: "jaxrs beanvalidation javaee6 18Integrate Bean Validation with JAX-RS and internationalize error messages using JBoss' proprietary implementations.JAXGenerative" + }, + { + num: NumberInt("1573"), + value: "multilingual vqa 18Repository for Multilingual-VQA task created during HuggingFace JAX/Flax community week.JAXCVNLPGenerativeUnsupervisedHealth" + }, + { + num: NumberInt("1574"), + value: "TF OT Sinkhorn 17Tensorflow implementation of optimal transport (OT) with Sinkhorn algorithm.TensorFlowGenerative" + }, + { + num: NumberInt("1575"), + value: "TF_NIMA 17Implementation of technical image quality model based on Google's research paper \"NIMA: Neural Image Assessment\". TensorFlowCVGenerative" + }, + { + num: NumberInt("1576"), + value: "StarGAN Tensorflow 17Implementation of StarGAN in TensorflowTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1577"), + value: "dnn dependency parser 17TensorFlow implementation of A Fast and Accurate Dependency Parser using Neural NetworksTensorFlowGenerative" + }, + { + num: NumberInt("1578"), + value: "large scale OT mapping TF 17Tensorflow Implementation of \"Large-scale Optimal Transport and Mapping Estimation\"(ICLR2018/NIPS 2017 OTML)TensorFlowGenerativeGraph" + }, + { + num: NumberInt("1579"), + value: "deepQA 17a Deep learning based chatbot implemented by Tensorflow with beam search (forked from Conchylicultor/DeepQA)TensorFlowNLPGenerativeGraph" + }, + { + num: NumberInt("1580"), + value: "Punctuation Restoration 17A TensorFlow Implementation of Punctuation Restoration.TensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1581"), + value: "image_colorization_gan_tf2.0 17A TensorFlow2.0 implementation of https://arxiv.org/abs/1803.05400TensorFlowCVGenerative" + }, + { + num: NumberInt("1582"), + value: "yolo_v1_v2_tensorflow 17Simple implementation of yolo v1 and yolo v2 by TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("1583"), + value: "binary VAE 17A minimal implementation of a VAE with BinConcrete (relaxed Bernoulli) latent distribution in TensorFlow.TensorFlowGenerative" + }, + { + num: NumberInt("1584"), + value: "DCGAN CIFAR10 17A implementation of DCGAN (Deep Convolutional Generative Adversarial Networks) for CIFAR10 image TensorFlowCVGenerative" + }, + { + num: NumberInt("1585"), + value: "MINE 17Keras implementation (only for tensorflow backend) of MINE: Mutual Information Neural EstimationTensorFlowGenerative" + }, + { + num: NumberInt("1586"), + value: "metric_learning 17Metric Learning TF 2.0+Keras Algorithm Implementations for Facial RecognitionTensorFlowCVGenerative" + }, + { + num: NumberInt("1587"), + value: "pytorch super resolution implementations 17Image super-resolution implementationsPyTorchCV" + }, + { + num: NumberInt("1588"), + value: "nalu.pytorch 17Implementation of NALU & NAC (https://arxiv.org/abs/1808.00508 | DeepMind) in PyTorch.PyTorchCV" + }, + { + num: NumberInt("1589"), + value: "minijax 17Minimalist implementation of JAX-RS and JSR 330JAXGenerative" + }, + { + num: NumberInt("1590"), + value: "variational dropout 16TensorFlow implementation of the method from Variational Dropout Sparsifies Deep Neural Networks, Molchanov et al. (2017)TensorFlowGenerative" + }, + { + num: NumberInt("1591"), + value: "LinkNet_tensorflow 16TensorFlow implementation of LinkNetTensorFlowCVGenerative" + }, + { + num: NumberInt("1592"), + value: "supervised embedding model 16Implementation of Supervised embedding models from [Learning End-to-End Goal-Oriented Dialog] paper.TensorFlowGenerative" + }, + { + num: NumberInt("1593"), + value: "cnn lstm for link prediction 16Keras implementation of path-based link prediction model for knowledge graph completionTensorFlowGraph" + }, + { + num: NumberInt("1594"), + value: "S2VT seq2seq video captioning attention 16S2VT (seq2seq) video captioning with bahdanau & luong attention implementation in Tensorflow TensorFlowNLPGenerative" + }, + { + num: NumberInt("1595"), + value: "MemAE TF2 16TensorFlow implementation of \"Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised Anomaly Detection\"TensorFlowGenerativeUnsupervisedGraph" + }, + { + num: NumberInt("1596"), + value: "logistic_lda 16Basic tensorflow implementation of logistic latent Dirichlet allocationTensorFlowGenerative" + }, + { + num: NumberInt("1597"), + value: "SimpNet Tensorflow 16A Tensorflow Implementation of the SimpNet Convolutional Neural Network ArchitectureTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1598"), + value: "MachineLearning 16Implementations of machine learning algorithm by Python 3TensorFlowGenerative" + }, + { + num: NumberInt("1599"), + value: "Im2LaTeX 16An implementation of the Show, Attend and Tell paper in Tensorflow, for the OpenAI Im2LaTeX suggested problemTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1600"), + value: "transformer_network_tensorflow 16Tensorflow implementation of transformer network from \"Attention is all you need\" Paper. Also use cases of it!TensorFlowNLPGenerative" + }, + { + num: NumberInt("1601"), + value: "CapsNet tensorflow jupyter 16A simple tensorflow implementation of CapsNet (by Dr. G. Hinton), based on my understanding. This repository is built with an aim to simplify the concept, implement and understand it.TensorFlowGenerative" + }, + { + num: NumberInt("1602"), + value: "SphereFace TensorFlow 16A TensorFlow implementation for SphereFace!The code can be trained on LFW.TensorFlowGenerative" + }, + { + num: NumberInt("1603"), + value: "tf_EEGNet 16It's a tensorflow implemention for EEGNetTensorFlowGenerative" + }, + { + num: NumberInt("1604"), + value: "StackGAN 16StackGAN++ implementation in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1605"), + value: "ResNeXt_TensorFlow2 16A tensorflow2 implementation of ResNeXt(ResNeXt50, ResNeXt101).TensorFlowGenerative" + }, + { + num: NumberInt("1606"), + value: "GAN Tensorflow 16An implementation of GAN using TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("1607"), + value: "TF_EnhanceDPED 16Tensorflow implement of image enhancement base on dped dataset and join PRIM2018 Challenge on Perceptual Image Enhancement on Smartphones (Track B: Image Enhancement). and use image quality assessment model to guide image enhancement to make the enhanced image subjective effect better !TensorFlowCVGenerative" + }, + { + num: NumberInt("1608"), + value: "pytorch_resnet 16A PyTorch implementation of ResNetPyTorchCV" + }, + { + num: NumberInt("1609"), + value: "LFW_Siamese_Pytorch 16This project uses the Labeled Faces in the Wild (LFW) dataset, and the goal is to train variants of deep architectures to learn when a pair of images of faces is the same person or not. It is a pytorch implementation of Siamese network with 19 layers.PyTorchCV" + }, + { + num: NumberInt("1610"), + value: "FocalLoss(CUDA) 16the focal loss in Aritcal Focal Loss for Dense Object DetectionMXNetCV" + }, + { + num: NumberInt("1611"), + value: "LSGAN 16Least Squares Generative Adversarial Network implemented in Chainer\nChainerGenerative" + }, + { + num: NumberInt("1612"), + value: "seq2seq speech 16Repository for fine-tuning Transformers based seq2seq speech models in JAX/Flax.JAXNLPGenerativeAudio" + }, + { + num: NumberInt("1613"), + value: "jax lensing 16A JAX package for weak gravitational lensingJAXGenerative" + }, + { + num: NumberInt("1614"), + value: "deeperwin 16DeepErwin is a python 3.8+ package that implements and optimizes JAX 2.x wave function models for numerical solutions to the multi-electron Schrdinger equation. DeepErwin supports weight-sharing when optimizing wave functions for multiple nuclear geometries and the usage of pre-trained neural network weights to accelerate optimization.JAXNLP" + }, + { + num: NumberInt("1615"), + value: "Keras GAN Library 15Implementation of GAN papers on Keras.TensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("1616"), + value: "alexnet architecture.tensorflow 15Unofficial TensorFlow implementation of \"AlexNet\" architecture.TensorFlowCV" + }, + { + num: NumberInt("1617"), + value: "MRCNN 15TensorFlow Implementation of Manifold Regularized Convolutional Neural Networks.TensorFlowCVGenerative" + }, + { + num: NumberInt("1618"), + value: "DHSGAN 15Official tensorflow implementation of \"DHSGAN: An End to End Dehazing Network for Fog and Smoke\"TensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1619"), + value: "MyAlphaGoZeroOnConnect4 15My Simple Implementation of AlphaGo Zero on Connect4TensorFlowGenerativeRL" + }, + { + num: NumberInt("1620"), + value: "im2p 15Tensorflow implementation of paper: A Hierarchical Approach for Generating Descriptive Image ParagraphsTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1621"), + value: "SOA_DORN_TF 15Tensorflow implementation of Deep Ordinal Regression Network for Monocular Depth EstimationTensorFlowCVGenerative" + }, + { + num: NumberInt("1622"), + value: "DAML 15Original Implementation of Improving Domain-Adapted Sentiment Classification by Deep Adversarial Mutual Learning publicized in AAAI-2020TensorFlowGenerative" + }, + { + num: NumberInt("1623"), + value: "Style Transfer Algorithm 15TensorFlow implementation of \"A Neural Algorithm of Artistic Style\" using total variation denoising as a regularizer. Apply artistic style to an image given some artwork as a source.TensorFlowCVGenerative" + }, + { + num: NumberInt("1624"), + value: "pytorch implementation 15Pytorch implementation(LeNet, VGGNet, GAN, UNet, Mask R-CNN, ...)PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("1625"), + value: "reMUDE 15(re)Implementation of Learning Multi-level Dependencies for Robust Word RecognitionPyTorchNLPGenerative" + }, + { + num: NumberInt("1626"), + value: "WADL first REST Webservice CXF Example 15A simple example how to implement a REST Webservice with Java based CXF and JAX-RSJAXNLP" + }, + { + num: NumberInt("1627"), + value: "sonno 15Sonno is a lightweight PHP framework based loosely on Jersey, a Java ReST framework reference implementation of the JAX-RS specification.JAXNLP" + }, + { + num: NumberInt("1628"), + value: "JAX ResNet CIFAR10 15Simple CIFAR10 ResNet example with JAX.JAXGenerative" + }, + { + num: NumberInt("1629"), + value: "parallel non linear gaussian smoothers 15Companion code in JAX for the paper Parallel Iterated Extended and Sigma-Point Kalman Smoothers.JAXNLPAudio" + }, + { + num: NumberInt("1630"), + value: "maml_flax 15Model Agnostic Meta Learning (MAML) implemented in Flax, the neural network library for JAX.JAXGenerative" + }, + { + num: NumberInt("1631"), + value: "minGPT 15minGPT in JAXJAXCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("1632"), + value: "haikumodels 15Pretrained models for Jax/Haiku; MobileNet, ResNet, VGG, Xception.JAXCV" + }, + { + num: NumberInt("1633"), + value: "VGAN Tensorflow 14Tensorflow implementation for MIT \"Generating Videos with Scene Dynamics\" by Vondrick et al.\nTensorFlowGenerative" + }, + { + num: NumberInt("1634"), + value: "DeepLearningImplementations 14This is a repository of implementations of deep learning papers, along with mini projects and experiments.TensorFlowNLPGenerative" + }, + { + num: NumberInt("1635"), + value: "fbpconv_tf 14tensorflow implementation for FBPConvNetTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1636"), + value: "CoordConv Implementation 14TensorFlow implementation of CoordConv Layer introduced by UBERTensorFlowNLPGenerative" + }, + { + num: NumberInt("1637"), + value: "ResNet 14Tensorflow ResNet implementation on cifar10TensorFlowCVGenerative" + }, + { + num: NumberInt("1638"), + value: "Dynamic Coattention Network for SQuAD 14Tensorflow implementation of DCN for question answering on the Stanford Question Answering Dataset (SQuAD) TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1639"), + value: "Object and facial detection in python 14This repo contains, training material, dlib implementation, tensorflow implementation and an own made complete system implementation with a parse-controller.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1640"), + value: "hindsight_experience_replay 14A tensorflow implementation of hindsight experience replayTensorFlowGenerative" + }, + { + num: NumberInt("1641"), + value: "DLinCV 14posenet+LSTM implementation with Keras& TensorFlowTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1642"), + value: "Center Loss 14This is an implementation of the Center Loss article (2016).TensorFlowCVGenerative" + }, + { + num: NumberInt("1643"), + value: "support vector machine 14An implementation of the L2-SVM for breast cancer detection using the Wisconsin diagnostic dataset. TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1644"), + value: "Efficient_ImageNet_Classification 14An efficient implementation for ImageNet classificationPyTorchCVNLP" + }, + { + num: NumberInt("1645"), + value: "jaxws samples 14Small example projects using JAX-WS technologies.JAXNLP" + }, + { + num: NumberInt("1646"), + value: "problem details 14Problem Details [RFC-7807] Java API, TCK, and implementations for JAX-RS and Spring BootJAXCVNLPGenerative" + }, + { + num: NumberInt("1647"), + value: "pax 14A stateful pytree library for training neural networks.JAXCVGenerative" + }, + { + num: NumberInt("1648"), + value: "medclip 14Fine-tuning a CLIP model on the ROCO medical datasetJAXCVNLPGenerativeAudio" + }, + { + num: NumberInt("1649"), + value: "AdaHessianJax 14Jax implementation of the AdaHessian optimizerJAXNLP" + }, + { + num: NumberInt("1650"), + value: "JAX GalSim 14JAX port of GalSim, for parallelized, GPU accelerated, and differentiable galaxy image simulations.JAXCVNLPGenerative" + }, + { + num: NumberInt("1651"), + value: "pytorch_paper_implementations 13Deep Learning Paper Implementations in PyTorchPyTorchCVNLPGenerative" + }, + { + num: NumberInt("1652"), + value: "amortized_svgd 13A pytorch implementation of Amortized Stein Variational Gradient Descent/ Stein GANPyTorchGenerative" + }, + { + num: NumberInt("1653"), + value: "PSCapsNet 13A PyTorch implementation of Parameter-sharing Capsule Network based on the paper \"Evaluating Generalization Ability of Convolutional Neural Networks and Capsule Networks for Image Classification via Top-2 Classification\"PyTorchCV" + }, + { + num: NumberInt("1654"), + value: "SMAPGAN 13Implement of Paper \"SMAPGAN: Generative Adversarial Network-Based Semi-Supervised Styled Map Tile Generation Method\" at TGRS.PyTorchCVGenerativeGraph" + }, + { + num: NumberInt("1655"), + value: "pynmt 13a simple and complete pytorch implementation of neural machine translation systemPyTorchNLP" + }, + { + num: NumberInt("1656"), + value: "multi-task 13This is the implement of the multi-task image classificaton in MXNet MXNetCV" + }, + { + num: NumberInt("1657"), + value: "flax_nerf 13Unofficial implementation of NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis, using Flax with the Linen APIJAXCVGenerative" + }, + { + num: NumberInt("1658"), + value: "MLPMixer jax2tf 13This repository hosts code for converting the original MLP Mixer models (JAX) to TensorFlow.JAXCVGenerative" + }, + { + num: NumberInt("1659"), + value: "diffqcqp 12Implementations of QP/QCQP solvers using ADMM algorithm PyTorchGenerative" + }, + { + num: NumberInt("1660"), + value: "hover net 12PyTorch implementation of HoverNet as described in https://arxiv.org/abs/1812.06499PyTorchCVGenerative" + }, + { + num: NumberInt("1661"), + value: "Pytorch_AdversarialAttacks 12Pytorch implementation with segmentation model and adversarial attacks PyTorchCVGenerativeHealth" + }, + { + num: NumberInt("1662"), + value: "cmn4recosys 12Collaborative Memory Networks for Recommendation Systems, implementation in PyTorchPyTorchGenerative" + }, + { + num: NumberInt("1663"), + value: "authlete java jaxrs 12Authlete library for JAX-RS (Java) to implement an authorization server supporting OAuth 2.0 & OpenID ConnectJAXNLPGenerative" + }, + { + num: NumberInt("1664"), + value: "s4 jax 12Following research on S4 in jaxJAXGenerativeAudio" + }, + { + num: NumberInt("1665"), + value: "jersey http2 jetty connector 12JAX-RS HTTP/2 Jetty Connector for Java 8+JAXGenerative" + }, + { + num: NumberInt("1666"), + value: "BiT jax2tf 12This repository hosts the code to port NumPy model weights of BiT-ResNets to TensorFlow SavedModel format.JAXGenerative" + }, + { + num: NumberInt("1667"), + value: "omega 12A number of agents (PPO, MuZero) with a Perceiver-based NN architecture that can be trained to achieve goals in nethack/minihack environments.JAXRL" + }, + { + num: NumberInt("1668"), + value: "progan flax 12Flax (JAX) implementation of Progressive Growing of GANs for Improved Quality, Stability, and VariationJAXGenerative" + }, + { + num: NumberInt("1669"), + value: "Rouge L Tensorflow 11ROUGE L metric implementation using tensorflow opsTensorFlowGenerative" + }, + { + num: NumberInt("1670"), + value: "lr momentum scheduler 11Pytorch implementation of arbitrary learning rate and momentum schedules, including the One Cycle PolicyPyTorchNLPRL" + }, + { + num: NumberInt("1671"), + value: "sst 11My implementation (PyTorch) for the paper SST: Single-Stream Temporal Action Proposals (http://vision.stanford.edu/pdf/buch2017cvpr.pdf).PyTorchCV" + }, + { + num: NumberInt("1672"), + value: "pytorch peleenet 11Simple Code Implementation of \"PeleeNet\" architecture in \"Pelee Paper\" using PyTorch.PyTorchCV" + }, + { + num: NumberInt("1673"), + value: "L-GM-Loss 11My implement of Rethinking Feature Distribution for Loss Functions in Image Classification using MXNet/GluonMXNetCV" + }, + { + num: NumberInt("1674"), + value: "spring hibernate jersey 11Spring3 Hibernate4 JAX-RS REST services exampleJAXNLPGenerative" + }, + { + num: NumberInt("1675"), + value: "guide microprofile opentracing 11A guide on how to enable and customize tracing of JAX-RS and non-JAX-RS methods by using MicroProfile OpenTracing: https://openliberty.io/guides/microprofile-opentracing.htmlJAXNLPGenerative" + }, + { + num: NumberInt("1676"), + value: "patching jax rs 11Presents a method for supporting partial resource modifications in JAX-RS applications.JAXNLPRL" + }, + { + num: NumberInt("1677"), + value: "http matchers 11Matchers to test your web service via the standard Java API for RESTful Services (JAX-RS)JAXGenerative" + }, + { + num: NumberInt("1678"), + value: "minGPT flax 11GPT implementation in FlaxJAXNLP" + }, + { + num: NumberInt("1679"), + value: "MlAgents 10This repository contains the implementation of deep reinforcement learning algorithms to solve various unity The Environments.PyTorchGenerativeRL" + }, + { + num: NumberInt("1680"), + value: "PatchVAE 10PyTorch implementation of \"PatchVAE: Learning Local Latent Codes for Recognition\" to appear in CVPR 2020PyTorchCVGenerative" + }, + { + num: NumberInt("1681"), + value: "IRLS_using_DL_frameworks 10IRLS(Iterative re-weighted least square) for Logistic Regression, implemented using tensorflow2.0/pytorchPyTorchGenerative" + }, + { + num: NumberInt("1682"), + value: "GAN_tutorial 10Vanilla GAN and WGAN implementations in PyTorch on the FashionMNIST datasetPyTorchGenerative" + }, + { + num: NumberInt("1683"), + value: "NPID 10A PyTorch implementation of NPID based on CVPR 2018 paper \"Unsupervised Feature Learning via Non-Parametric Instance Discrimination\"PyTorchCVUnsupervised" + }, + { + num: NumberInt("1684"), + value: "discovering reinforcement learning algorithms 10A Jax/Stax implementation of the general meta learning paper: Oh, J., Hessel, M., Czarnecki, W.M., Xu, Z., van Hasselt, H.P., Singh, S. and Silver, D., 2020. Discovering reinforcement learning algorithms. Advances in Neural Information Processing Systems, 33.JAXRL" + }, + { + num: NumberInt("1685"), + value: "swagger4jaxrs 10This is a Grails plugin that adds Swagger support to document REST APIs of any Grails projects that use the Grails JAX-RS (JSR 311) plugin.JAXNLP" + }, + { + num: NumberInt("1686"), + value: "AndroidJAXBLib 10AndroidJAXBLibJAXGenerative" + }, + { + num: NumberInt("1687"), + value: "jive sdk java jersey 10This is an implementation of the Jive SDK written in Java, implemented for JEE6 using Jersey (JAX RS 2.0), Spring Core 3.2.5 and JSP.JAXNLP" + }, + { + num: NumberInt("1688"), + value: "jax chacha prng 10A cryptographically-secure pseudo-random number generator for JAX based on the 20 round ChaCha cipher.JAXNLPGraph" + }, + { + num: NumberInt("1689"), + value: "jax gat 10JAX implementation of Graph Attention NetworksJAXGraph" + }, + { + num: NumberInt("1690"), + value: "siren jax 10Unofficial implementation of Siren with Jax for image representation.JAXCV" + }, + { + num: NumberInt("1691"), + value: "fastpbrl 10Vectorization techniques for fast population-based training.JAXCVRL" + }, + { + num: NumberInt("1692"), + value: "GANJax 10Implementation of different GAN in JAX/Haiku.JAXCVGenerative" + }, + { + num: NumberInt("1693"), + value: "alphago 9Reference implementation of DeepMinds AlphaGo based on \"Deep Learning and the Game of Go\"TensorFlowNLPRL" + }, + { + num: NumberInt("1694"), + value: "voice filter 9Unofficial Tensorflow/Keras implementation of Google AI VoiceFilterTensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1695"), + value: "PhotoWCT 9Unofficial implementation of \"A Closed-form Solution to Photorealistic Image Stylization\"TensorFlowCV" + }, + { + num: NumberInt("1696"), + value: "GAN tensorflow 9This's a re-implementation of generative adversarial networks using tensorflow.TensorFlowGenerative" + }, + { + num: NumberInt("1697"), + value: "lda2vec pytorch 9lda2vec pytorch implementationPyTorchNLP" + }, + { + num: NumberInt("1698"), + value: "TranSearch 9Implementation for our MM'18 paper --- Multi-modal Preference Modeling for Product Search.PyTorchCVGenerative" + }, + { + num: NumberInt("1699"), + value: "VAE Pytorch 9Implementation of Variational Autoencoder in PytorchPyTorchCVGenerativeAudio" + }, + { + num: NumberInt("1700"), + value: "chainer_superresolution 9Image super-resolution\nChainerCV" + }, + { + num: NumberInt("1701"), + value: "jaxb delegate plugin 9Enhances generated JAXB classes with arbitrary methods in Java or other programming languagesJAXNLP" + }, + { + num: NumberInt("1702"), + value: "yahtzotron 9The friendly robot that beats you in Yahtzee JAXRL" + }, + { + num: NumberInt("1703"), + value: "flaxo 9Educational platform for git-based programming courses.JAXNLPGenerativeGraph" + }, + { + num: NumberInt("1704"), + value: "EfficientDet tensorflow2 8A Tensorflow2.x implementation of EfficientDetTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1705"), + value: "random wired nn tensorflow 8Tensorflow implementation of \"Exploring Randomly Wired Neural Networks for Image Recognition\"TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1706"), + value: "language detection speech using dnn 8This is the implementation of a DNN in tensorflow for language detection in an audio fileTensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1707"), + value: "bayesian neural networks 8Edward implementation of Bayesian Neural NetworksTensorFlowGenerative" + }, + { + num: NumberInt("1708"), + value: "ABCNN 8TensorFlow Implementation of ABCNN (ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs)TensorFlowGenerative" + }, + { + num: NumberInt("1709"), + value: "multi process UNREAL 8Multi-processing implementation of \"Reinforcement Learning with Unsupervised Auxiliary Tasks\"(UNREAL) with tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1710"), + value: "pyrrha pynode 8Python node implementation for Pyrrha version of Pandora BoxchainTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1711"), + value: "HOG 8HOG implementation for pedestrian detection.TensorFlowCV" + }, + { + num: NumberInt("1712"), + value: "custom pooling 8A few unconventional pooling layers implemented in Pytorch Or TensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1713"), + value: "superconv 8TensorFlow/Keras implementation of the paper: 'Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates'TensorFlowGenerativeRL" + }, + { + num: NumberInt("1714"), + value: "sam tf 8TensorFlow implementation of \"Sample-efficient Imitation Learning via Generative Adversarial Nets\"TensorFlowGenerative" + }, + { + num: NumberInt("1715"), + value: "GANs Slides Code Paper 8Tutorial introduction slides to GANs. Code implementations and links of relevant papers.TensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("1716"), + value: "tf neural style 8TensorFlow implementation of the paper \"A Neural Algorithm of Artistic Style\" by Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge.TensorFlowCVGenerative" + }, + { + num: NumberInt("1717"), + value: "Machine Learning 8My Implementation of Machine Learning models TensorFlowHealth" + }, + { + num: NumberInt("1718"), + value: "semantic style transfer 8Tensorflow implementation of semantic style transfer based on guided Gram MatricesTensorFlowCVGenerative" + }, + { + num: NumberInt("1719"), + value: "Phaser 8BCDI phase retrieval module written in Python 3.x. GPU implementation done using Tensorflow 2.1, with an older library available that uses Tensorflow 1.x.TensorFlowCVGenerative" + }, + { + num: NumberInt("1720"), + value: "mountain car continuous 8Implementations of solutions to the continuous mountain car problem. Using OpenAI Gym and Tensorflow 1.1.TensorFlowGenerativeRL" + }, + { + num: NumberInt("1721"), + value: "CycleGAN_TF2.2_multiGPU 8Modified CycleGAN implemented in Tensorflow 2.2 with custom training loop for CPU, vCPU, GPU or multi GPU environments.TensorFlowCVGenerative" + }, + { + num: NumberInt("1722"), + value: "viraal 8PyTorch implementation of VirAAL: Virtual Adversarial Active Learning (https://arxiv.org/abs/2005.07287)PyTorchGenerative" + }, + { + num: NumberInt("1723"), + value: "Pointcloud based Row Detection using ShellNet and PyTorch 8PyTorch implementation of ShellNet, which is used for pointcloud-based row detection. ROS integration for robots is available.PyTorchCVGenerative" + }, + { + num: NumberInt("1724"), + value: "mdn_pyro 8Implementation of a Mixture Density Network in the deep probabilistic programming language Pyro.PyTorchNLP" + }, + { + num: NumberInt("1725"), + value: "lightning semi supervised learning 8Implementation of semi-supervised learning using PyTorch LightningPyTorchGenerative" + }, + { + num: NumberInt("1726"), + value: "semantic robustness 8implementation of the paper: \"Towards Analyzing Semantic Robustness of Deep Neural Networks\" (ECCV 2020 workshop)PyTorchCVGenerative" + }, + { + num: NumberInt("1727"), + value: "Neural Image Caption 8This is a simple implementaion of paper Neural Image Caption based on mxnet.MXNetCVNLP" + }, + { + num: NumberInt("1728"), + value: "unrolled-gan 8Unrolled-ga\nChainerGenerative" + }, + { + num: NumberInt("1729"), + value: "fn jrestless example 8Run JAX-RS applications on Fn using JRestless JAXCV" + }, + { + num: NumberInt("1730"), + value: "cql jax 8Conservative Q Learning in JAX.JAXGenerativeRL" + }, + { + num: NumberInt("1731"), + value: "vit flax 8Implementation of Vision Transformers in FlaxJAXNLP" + }, + { + num: NumberInt("1732"), + value: "jax fid 8FID computation in Jax/Flax.JAXCV" + }, + { + num: NumberInt("1733"), + value: "jax skip gram negative sampling 8A Jax implementation of word2vec's skip-gram model with negative sampling as described in Mikolov et al., 2013JAXNLP" + }, + { + num: NumberInt("1734"), + value: "Flax 8Create and manage fibers in C++JAXNLP" + }, + { + num: NumberInt("1735"), + value: "ASU Net 7ASU-Net: Attention to Scale with U-Net for Semantic Segmentation (Implemented with TensorFlow)TensorFlowCVGenerative" + }, + { + num: NumberInt("1736"), + value: "Hotdog Not Hotdog 7Personal implementation of HBO Silicon Valley's app Hotdog or Not HotdogTensorFlowCVGenerative" + }, + { + num: NumberInt("1737"), + value: "TinyImageNet Benchmarks 7Benchmarking various Computer Vision models on TinyImageNet DatasetTensorFlowCV" + }, + { + num: NumberInt("1738"), + value: "image captioning 7Image Caption Generator implemented using Tensorflow and Keras in a Python Jupyter Notebook. The goal is to describe the content of an image by using a CNN and RNN. TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1739"), + value: "WassersteinGAN Tensorflow 7Tensorflow implementation of WGAN (Wasserstein Generative Adversarial Networks)TensorFlowCVGenerative" + }, + { + num: NumberInt("1740"), + value: "lstm tensorflow 7Implementation of Long Short Term Memory networks in TensorflowTensorFlowGenerativeGraph" + }, + { + num: NumberInt("1741"), + value: "Capsule_Network_Tensorflow 7Capsule Network implementation in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1742"), + value: "pixelrnn 7Implementation of a, simple, recurrent neural network used for a image classification.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1743"), + value: "ShuffleNetV2_tensorflow 7a tensorflow based implementation of ShuffleNetV2 on the Tiny ImageNet datasetTensorFlowCVGenerative" + }, + { + num: NumberInt("1744"), + value: "adversarialconvex 7Tensorflow implementation for generating adversarial examples using convex programmingTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1745"), + value: "videogan_tensorflow 7Implementation of VideoGAN in TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("1746"), + value: "tf gans 7Tensorflow implementation of Generative Adversarial NetworksTensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("1747"), + value: "modular_SSD_tensorflow 7Modularized SSD implementation in TensorFlow. Inspiration: Speed/accuracy trade-offs for modern convolutional object detectors.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1748"), + value: "InfoGAN Tensorflow 7InfoGAN implementation using tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1749"), + value: "gan_basic 7An implementation of GANs in tensorflow for understanding basic generative adversarial networks. GANs, DCGANs, WGANs and Encoder.TensorFlowCVGenerative" + }, + { + num: NumberInt("1750"), + value: "Document Image Unwarping tensorflow 7Tensorflow implementation and extension of DocUnet: Document Image Unwarping via A Stacked U-NetTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1751"), + value: "deep posemachine 7This is an deep learning implementation in tensorpackTensorFlowGenerative" + }, + { + num: NumberInt("1752"), + value: "SSD 7Tensorflow implementation of SSD (Single Shot Multibox Detector) TensorFlowGenerative" + }, + { + num: NumberInt("1753"), + value: "shake shake tensorflow 7Simple Code Implementation of \"Shake-Shake Regularization using TensorFlow.TensorFlowCVGenerative" + }, + { + num: NumberInt("1754"), + value: "SuperPointPretrainCpp_TensorFlow 7SuperPoint with pretrain model and implement in Tensorflow C++TensorFlowGenerative" + }, + { + num: NumberInt("1755"), + value: "U Net 7Tensorflow implementation of U-Net for Segmentation of neuronal structures in EM stacksTensorFlowCVGenerativeHealth" + }, + { + num: NumberInt("1756"), + value: "Dynamic Memory Network Plus 7Implementation of Dynamic Memory Network Plus for Question-Answering. Tested on Induction tasks of bAbi 10K dataset. TensorFlowGenerative" + }, + { + num: NumberInt("1757"), + value: "feature eng 7Implements classes for feature engineering including one for Singular Spectrum Analysis (SSA) decomposition, SSA prediction or an heuristic function of an input dataset that may be used as training signal.TensorFlowNLP" + }, + { + num: NumberInt("1758"), + value: "1D_GAN 7Tensorflow implementation of 1D Generative Adversarial NetworkTensorFlowGenerative" + }, + { + num: NumberInt("1759"), + value: "MnasNet 7A TensorFlow 2.0 implementation of MnasNet: Platform-Aware Neural Architecture Search for Mobile.TensorFlowCVGenerative" + }, + { + num: NumberInt("1760"), + value: "PyTorch Linear GAN 7A PyTorch notebook and implementation of a normal linear GANPyTorchCVGenerative" + }, + { + num: NumberInt("1761"), + value: "RDGAN 7RDGAN(Rebalancing Data Generative Adversarial Network) implementation.PyTorchGenerative" + }, + { + num: NumberInt("1762"), + value: "SpatialTransformer 7Implementation of Spatial Transformer Networks in Pytorch.PyTorchNLP" + }, + { + num: NumberInt("1763"), + value: "skeleton based action recognition 7This repository provides implementation of a baseline method and our proposed methods for efficient Skeleton-based Human Action Recognition. PyTorchCVNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1764"), + value: "Image colorization 7This is an attempt to implement Pix2pix network using Python and MXNetMXNetCV" + }, + { + num: NumberInt("1765"), + value: "retrieval chatbot 7This repo use mxnet to implement baselines for retrieval chatbotMXNetNLP" + }, + { + num: NumberInt("1766"), + value: "began 7BEGAN\nChainerGenerative" + }, + { + num: NumberInt("1767"), + value: "jax dreamer 7Dreamer on JAXJAXRL" + }, + { + num: NumberInt("1768"), + value: "coodoo listing 7JavaEE JPA/JAX-RS Listing FrameworkJAXGenerative" + }, + { + num: NumberInt("1769"), + value: "micronaut jaxrs 7Support for the JAX-RS API in MicronautJAXNLPGenerative" + }, + { + num: NumberInt("1770"), + value: "holon jaxrs 7Holon Platform JAX-RS integration module, including RestClient implementation, Swagger/OpenAPI integration and Spring Boot auto-configuration for Jersey and RestEasyJAXNLPGenerative" + }, + { + num: NumberInt("1771"), + value: "jax_transformations3d 7Implementation of transformations.py that is JAX compatibleJAXNLP" + }, + { + num: NumberInt("1772"), + value: "jax enhance 7minimal library for image super-resolution implemented in jaxJAXCVGenerative" + }, + { + num: NumberInt("1773"), + value: "tme 7Taylor moment expansion in Python (JaX and SymPy) and MatlabJAXNLPGenerative" + }, + { + num: NumberInt("1774"), + value: "SOM 6This is python implementation for Kohonen Self Organizing map using numpy and tensorTensorFlowGenerative" + }, + { + num: NumberInt("1775"), + value: "Neural Style Transfer Tensorflow Keras 6Tensorflow(using keras pretrained model) implementation of 'Image Style Transfer Using Convolutional Neural Networks'TensorFlowCVGenerative" + }, + { + num: NumberInt("1776"), + value: "arbitrary style transfer 6Tensorflow 2 implementation of Arbitrary Style Transfer in Real-time with Adaptive Instance NormalizationTensorFlowCVGenerative" + }, + { + num: NumberInt("1777"), + value: "VAE GAN Autoencoding Beyond Pixels Using a Similarity Metric 6Simple Tensorflow implementation of the paper Autoencoding Beyond Pixels Using a Similarity MetricTensorFlowCVGenerative" + }, + { + num: NumberInt("1778"), + value: "neural style 6TensorFlow implementation of \"A Neural Algorithm of Artistic Style\" by Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1779"), + value: "sequence labeling 6Sequence Labeling implemented by BiLSTM using TensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1780"), + value: "Image Classification 6Implement a few key architectures for image classification by using neural networkTensorFlowCVGenerativeRL" + }, + { + num: NumberInt("1781"), + value: "Deeplabv3plus Tensorflow 6A Tensorflow implementation of Deeplabv3+ trained on VOC2012.TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1782"), + value: "CoTeaching 6A TensorFlow implementation of \"Co-teaching: Robust Training of Deep Neural Networks with Extremely Noisy Labels\"TensorFlowGenerative" + }, + { + num: NumberInt("1783"), + value: "DeepLearning Papers Implementation 6Deep learning Papers Implementation using Tensorflow-kerasTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1784"), + value: "tf transformer 6A Tensorflow implementation of Transformer in version 1.12TensorFlowNLPGenerative" + }, + { + num: NumberInt("1785"), + value: "PSMNet.tf 6Tensorflow implementation for PSMNetTensorFlowGenerative" + }, + { + num: NumberInt("1786"), + value: "style_transfer 6Implementation of Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. 2016. Image Style Transfer Using Convolutional Neural Networks.TensorFlowCVGenerative" + }, + { + num: NumberInt("1787"), + value: "3dbpconv 6tensorflow implementation for 3D BPConvNetTensorFlowGenerative" + }, + { + num: NumberInt("1788"), + value: "Inception Module Tensorflow 6Tensorflow implementation of Inception ModuleTensorFlowGenerative" + }, + { + num: NumberInt("1789"), + value: "tf transliteration 6TensorFlow implementation of Google i18n Transliteration ModelTensorFlowGenerative" + }, + { + num: NumberInt("1790"), + value: "pix2pix tensorflow 6pix2pix tensorflow implementationTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1791"), + value: "categorical variational autoencoder 6Keras, Tensorflow eager execution implementation of Categorical Variational AutoencoderTensorFlowCVGenerative" + }, + { + num: NumberInt("1792"), + value: "FactorVAE 6A TensorFlow implementation of FactorVAE, proposed in \"Disentangling by Factorising\" by Kim et al.TensorFlowGenerative" + }, + { + num: NumberInt("1793"), + value: "tf glow tts 6Tensorflow implementation of Glow-TTSTensorFlowNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1794"), + value: "Voice Authentication CNN 6Voice authentication system implementation using PythonTensorFlowAudio" + }, + { + num: NumberInt("1795"), + value: "tensorflow CVAE 6Implementation of the Conditional Variational Auto-Encoder (CVAE) in TensorflowTensorFlowCVGenerative" + }, + { + num: NumberInt("1796"), + value: "GridMask_Tensorflow 6non-official implementation of GridMask data augmentation with tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1797"), + value: "text flask 6A web implementation of text detection and recognitionTensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1798"), + value: "Sparse Auto Encoder 6implementation of the paper \"k-sparse autoencoders.\"TensorFlowGenerative" + }, + { + num: NumberInt("1799"), + value: "tensorflow DTN 6A Tensorflow implementation of Domain Transfer Network.TensorFlowCVGenerativeUnsupervised" + }, + { + num: NumberInt("1800"), + value: "nec_tensorflow 6Custom implementation of Deepmind's Neural Episodic Control.TensorFlowCVGenerative" + }, + { + num: NumberInt("1801"), + value: "RNN pixel prediction 6In-painting: Implement LSTM based pixel prediction to predict the missing pixel in an imageTensorFlowCVGenerative" + }, + { + num: NumberInt("1802"), + value: "tf ft 6Implementation on tensorflow fine tuning of generic CNN based modelTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1803"), + value: "dqn 6This repository contains a python implementation of a Deep Q-Network (DQN) for Atari gameplay using tensorflow.TensorFlowCVGenerativeRL" + }, + { + num: NumberInt("1804"), + value: "X ray images classification with Keras TensorFlow 6ConvNet (CNN) implementation to classify x-ray medical images TensorFlowCVGenerative" + }, + { + num: NumberInt("1805"), + value: "AdaptiveAttention 6pytorch implementation of adaptive attention : Knowing when to lookPyTorchCVNLP" + }, + { + num: NumberInt("1806"), + value: "ali mnist 6Simple PyTorch implementation of Adversarially Learned InferencePyTorchGenerative" + }, + { + num: NumberInt("1807"), + value: "depth_eigen 6An implementation of https://arxiv.org/abs/1406.2283 in PyTorch.PyTorchCV" + }, + { + num: NumberInt("1808"), + value: "skip gram negative sampling 6A PyTorch Implementation of the Skipgram Negative Sampling Word2Vec Model as Described in Mikolov et al.PyTorchNLP" + }, + { + num: NumberInt("1809"), + value: "pytorch fcn 6 Fully Convolutional Networks Implemented in PyTorchPyTorchCV" + }, + { + num: NumberInt("1810"), + value: "charades algorithms 6Train and Read Charades Dataset, implemented on Python and PyTorch, on WindowsPyTorchGenerative" + }, + { + num: NumberInt("1811"), + value: "text2image(Gluon:star 6Text to Image Synthesis in MXNETMXNetCV" + }, + { + num: NumberInt("1812"), + value: "mxnet_kaldi 6This is the speech demo from mxnet, but for some reason, they removed this demo.MXNetNLPAudio" + }, + { + num: NumberInt("1813"), + value: "vrp attention jax 6Reimplementation of the paper \"Attention, Learn to Solve Routing Problems!\" in jax/flax.JAXGenerative" + }, + { + num: NumberInt("1814"), + value: "jax meta learning 6Simple, extensible implementations of some meta-learning algorithms in JaxJAXRL" + }, + { + num: NumberInt("1815"), + value: "MLP Mixer 6Minimal Flax implementation of MLP-Mixer from \"MLP-Mixer: An all-MLP Architecture for Vision\" (https://arxiv.org/abs/2105.01601)JAXCV" + }, + { + num: NumberInt("1816"), + value: "jax workshop 6JAX workshop for Simo Srkk's groupJAXGenerativeGraph" + }, + { + num: NumberInt("1817"), + value: "grax 6Graph Networks with JaxJAXNLPGraph" + }, + { + num: NumberInt("1818"), + value: "jax rs linker 6Compile-time resource link resolution for JAX-RSJAXNLP" + }, + { + num: NumberInt("1819"), + value: "windmill api 6The Windmill REST API is a Java EE 8 implementation written in Java 8 using JAX-RS. The codebase is about 7.5k LOC.JAXNLPGraph" + }, + { + num: NumberInt("1820"), + value: "deep illusion 6Adversarial attack toolbox for Pytorch, Tensorflow, and JaxJAXCVNLPGenerative" + }, + { + num: NumberInt("1821"), + value: "DeepQLearning 6small experiments with agents learning atari games, implemented in jax/numpyJAXRL" + }, + { + num: NumberInt("1822"), + value: "Vision Transformer Pytorch Lightning 6Pytorch Lightning implementation of Vision Transformer with support for loading checkpoints saved in official Flax implementation. JAXCV" + }, + { + num: NumberInt("1823"), + value: "HeroCrabPlugin 6HeroCrabPlugin is an authoritative network messaging framework for games developed with Flax Engine.JAXNLPGraph" + }, + { + num: NumberInt("1824"), + value: "dbn_tf 5Deep belief network implemented using tensorflow.TensorFlowCVGenerative" + }, + { + num: NumberInt("1825"), + value: "Tensorflow_project_template 5This is a Tensorflow implemention of VGG 16TensorFlowCVGenerative" + }, + { + num: NumberInt("1826"), + value: "rlntm tensorflow 5(In development) Tensorflow implementation of RL-NTMTensorFlowGenerative" + }, + { + num: NumberInt("1827"), + value: "CapsNet 5Tensorflow implementation of capsule network (CapsNet) for traffic prediction.TensorFlowCVGenerative" + }, + { + num: NumberInt("1828"), + value: "yolov3 5TensorFlow implementation of YOLOv3TensorFlowCVGenerative" + }, + { + num: NumberInt("1829"), + value: "StarGAN Tensorflow 5Tensorflow implement of StarGANTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1830"), + value: "CNN_Implementations 5Data and Trained models can be downloaded from https://goo.gl/7PrKD2TensorFlowCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("1831"), + value: "chatbot_al 5An implementation of Chatbot using Adversarial Learning and Reinforcement Learning based on TensorFlow framework.TensorFlowNLPGenerativeRL" + }, + { + num: NumberInt("1832"), + value: "pytfBusterNet 5Keras Implementation of BusterNet with TPU TensorFlowCVGenerative" + }, + { + num: NumberInt("1833"), + value: "ESIM 5Tensorflow implementation of ESIM model described in paper Enhanced LSTM for Natural Language InferenceTensorFlowGenerative" + }, + { + num: NumberInt("1834"), + value: "tensorflow pix2pix 5Tensorflow implementation of pix2pix for various datasets.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1835"), + value: "actor critic 5Implementation of A2C and ACKTR in TensorFlow.TensorFlowNLPGenerativeRL" + }, + { + num: NumberInt("1836"), + value: "CycleGAN Tensorflow 5A Tensorflow implementation of CycleGAN using Eager Execution, tf.keras.layers, and tf.data.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1837"), + value: "convolutional draw 5Tensorflow implementation of Convolutional DRAW by Gregor et al. (2016)TensorFlowGenerative" + }, + { + num: NumberInt("1838"), + value: "scrnn tensorflow 5Tensorflow implementation of SCRNN cellTensorFlowGenerative" + }, + { + num: NumberInt("1839"), + value: "CapsNet python tensorflow 5This is python TensorFlow implementation of [Dynamic Routing Between Capsules](https://arxiv.org/pdf/1710.09829.pdf) ()TensorFlowCVGenerative" + }, + { + num: NumberInt("1840"), + value: "deep convolutional highway network 5This is the implementation of Highway version of Deep convolutional network, based on https://arxiv.org/pdf/1505.00387.pdf.TensorFlowNLPGenerative" + }, + { + num: NumberInt("1841"), + value: "MAMNet Tensorflow 2 5Tensorflow 2.0 implementation of MAMNetTensorFlowCVGenerative" + }, + { + num: NumberInt("1842"), + value: "arch deepspeech 5Arch Linux packages to install CPU versions of Mozilla's Deep Speech implementationTensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1843"), + value: "dl_stereo_matching 5A Tensorflow implementation of the models described in the paper \"Efficient Deep Learning for Stereo Matching\"TensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1844"), + value: "toyRNNText 5This is a toy implementation of RNNText on zhihu tag classification dataset.TensorFlowGenerative" + }, + { + num: NumberInt("1845"), + value: "Deep Q Network using Tensorflow 5This repository contains Deep Q-Networks and Double DQN implementation in tensorflow for Open AI Gym environments.TensorFlowGenerativeRL" + }, + { + num: NumberInt("1846"), + value: "Fully convolutional networks TF 5A TensorFlow implementation of Fully Convolutional Networks (by http://fcn.berkeleyvision.org) which can be used for any segmentation dataset with any number of classesTensorFlowCVGenerative" + }, + { + num: NumberInt("1847"), + value: "ddpg_agent 5Tensorflow implementation of the DDPG algorithmTensorFlowGenerativeRL" + }, + { + num: NumberInt("1848"), + value: "residual network 5The implementation of ResNet using Tensorflow. This implementation is based on this paper: https://arxiv.org/pdf/1603.05027.pdfTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1849"), + value: "nifi deepspeech 5Using Mozilla TensorFlow implementation of Baidu's Deep SpeechTensorFlowCVNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1850"), + value: "YOLOv4 Swift for TensorFlow 5Exact Implementation of YOLOv4 in Swift for TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("1851"), + value: "Neural_Turing_Machine 5A Neural Turing Machine implemented in TensorFlow 2.0 alphaTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1852"), + value: "deepdream 5Simple implementation of the DeepDream algorithm in TensorFlowTensorFlowCVGenerative" + }, + { + num: NumberInt("1853"), + value: "Neural Machine Translation 5Tensorflow 2.0 implementation of Neural Machine Translation using Transformer ModelTensorFlowNLPGenerative" + }, + { + num: NumberInt("1854"), + value: "QNN 5Implementation of a quantum neural network using Strawberry Fields and TensorFlowTensorFlowGenerative" + }, + { + num: NumberInt("1855"), + value: "Faster RCNN RPN 5Region Proposal Network (RPN) of Faster R-CNN implementation in Python and Tensorflow 1.8 with explanations.TensorFlowCV" + }, + { + num: NumberInt("1856"), + value: "WSSDCNN 5The unofficial implementation of Weakly- and Self-Supervised Learning for Content-Aware Deep Image Retargeting via TensorFlowTensorFlowCVGenerativeSelf-Supervised" + }, + { + num: NumberInt("1857"), + value: "asynchronous_1step 5TensorFlow implementation of the two 1-step methods from \"Asynchronous Deep Reinforcement Learning Methods\" by Mnih et. al., 2016 for OpenAIs Gym-environment.TensorFlowGenerativeRL" + }, + { + num: NumberInt("1858"), + value: "Image2Image_Translation 5Tensorflow implementation of StarGAN. Feature translation between images using Generative Adversarial Networks (GANs). It allows to modify a physical characteristic such as the hair color.TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1859"), + value: "Attention Chatbot 5Chatbot for Twitter Customer Support. A Seq2seq Neural Network with Multiplicative Attention mechanism implemented in TensorFlow 2.TensorFlowNLPGenerativeGraph" + }, + { + num: NumberInt("1860"), + value: "Quick NLP 5A collection of feedforward NLP models that combine self attention and convolution implemented in TensorFlow with simplicity modifiability in mindTensorFlowGenerativeUnsupervised" + }, + { + num: NumberInt("1861"), + value: "SkipGram Model 5Implemented the skip-gram model for Word2Vec, complete with data pre-processing and a sweet word embedding visualizer in tensorboardTensorFlowGenerativeGraph" + }, + { + num: NumberInt("1862"), + value: "tdnn_tensorflow 5tdnn (time delay neural network) tensorflow implementationTensorFlowNLPGenerativeAudio" + }, + { + num: NumberInt("1863"), + value: "vdsr 5TensorFlow implementation of VDSRTensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1864"), + value: "image captioning 5Implementation of a Multimodal Neural Network for Image Captioning in Tensorflow.TensorFlowCVNLPGenerativeGraph" + }, + { + num: NumberInt("1865"), + value: "Paper Implementations 5Pytorch implementations of popular Deep Learning papersPyTorchCV" + }, + { + num: NumberInt("1866"), + value: "Text Normalization in pyTorch 5pyTorch implementation for Text Normalization ChallengePyTorchNLP" + }, + { + num: NumberInt("1867"), + value: "LSGAN with PyTorch 5PyTorch implementation of the Least Squares Generative Adversarial NetworksPyTorchGenerative" + }, + { + num: NumberInt("1868"), + value: "etos tts 5Deep Learning TTS, Based on PyTorch Implementation of Tacotron: A Fully End-To-End Text-To-Speech Synthesis Model. PyTorchNLPAudio" + }, + { + num: NumberInt("1869"), + value: "detection experiments 5Playground of various object detection models implemented in PyTorchPyTorchCVGenerative" + }, + { + num: NumberInt("1870"), + value: "neural style 5Py-Torch implementation of neural style algorithm(Style-transfer)PyTorchCVGraph" + }, + { + num: NumberInt("1871"), + value: "pytorch DISN 5Pytorch Implementation of DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction (Xu et al., 2019)PyTorchCVGenerative" + }, + { + num: NumberInt("1872"), + value: "DL Playground 5A modular implementation of some popular papers and architectures in deep learning.PyTorchGenerative" + }, + { + num: NumberInt("1873"), + value: "SRCNN 5This repo reproduces a prototype of the classical algorithm for Single Image Super resolution (SISR) with convolutional neural network based on MXNET.MXNetCV" + }, + { + num: NumberInt("1874"), + value: "chainer-srcnn 5Image super-resolution\nChainerCV" + }, + { + num: NumberInt("1875"), + value: "JaxCQL 5Conservative Q learning in JaxJAXGenerative" + }, + { + num: NumberInt("1876"), + value: "jaxb 5JRuby scripting of Java Architecture for XML Binding classesJAXNLP" + }, + { + num: NumberInt("1877"), + value: "vkJAX 5JAX interpreter for VulkanJAXCV" + }, + { + num: NumberInt("1878"), + value: "glow_jax 5An implementation of the Glow generative model in jax and flaxJAXGenerative" + }, + { + num: NumberInt("1879"), + value: "bart base jax 5JAX implementation of the BART modelJAXNLPGenerative" + }, + { + num: NumberInt("1880"), + value: "bottleneck transformer flax 5A JAX/Flax implementation of Bottleneck Transformers for Visual RecognitionJAXCV" + }, + { + num: NumberInt("1881"), + value: "mech 5Mechanics functions with end-to-end support for deep learning developers, written in Ivy.JAXCVGenerative" + }, + { + num: NumberInt("1882"), + value: "rl_with_jax 5clear single-file JAX implementations of common RL algorithmsJAXRL" + }, + { + num: NumberInt("1883"), + value: "stylegan2.jax 5Re-implementation of StyleGan2 in JAXJAXGenerative" + }, + { + num: NumberInt("1884"), + value: "RBM 4Implementation for RBM - Restricted Bolzmann Machine for Collaborative FilteringTensorFlowCVGenerative" + }, + { + num: NumberInt("1885"), + value: "Show and Tell 4Tensorflow implementation of \"Show and Tell\"TensorFlowCVNLPGenerative" + }, + { + num: NumberInt("1886"), + value: "RGB_to_GRAYSCALE_Autoencoder 4This an implementation of Undercomplete Autoencoder which converts an RGB image to an GRAY scale image. TensorFlowCVGenerative" + }, + { + num: NumberInt("1887"), + value: "VDSR TensorFlow 4TensorFlow implementation of \"Accurate Image Super-Resolution Using Very Deep Convolutional Network\" (CVPR 2016)TensorFlowCVGenerative" + }, + { + num: NumberInt("1888"), + value: "tensor_fcn 4Tensorflow implementation of Fully Convolutional Networks for Semantic SegmentationTensorFlowCVGenerative" + }, + { + num: NumberInt("1889"), + value: "Learning Chaos 4Unofficial Python implementation of the DQN (Mnih et al., 2015) with tensorflowTensorFlowGenerative" + }, + { + num: NumberInt("1890"), + value: "Cartpole OpenAI Tensorflow 4A Tensorflow implementation of a Actor Mimic RL agent to balance a Cartpole from OpenAI GymTensorFlowGenerativeRL" + }, + { + num: NumberInt("1891"), + value: "I3D_Master 4implementation of Inflated 3D ConvNet in TensorFlowTensorFlowGenerative" + }, + { + num: NumberInt("1892"), + value: "speechdenoising 4This repo has a Tensorflow implementation of speech denoising with an API service as well. TensorFlowNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1893"), + value: "text siamese network 4Text Siamese Network provides a CNN based implementation of Siamese Network to solve Quora duplicate questions identification problem.TensorFlowGenerativeHealth" + }, + { + num: NumberInt("1894"), + value: "InfoGAN_Tensorflow2.0 4Quick Tensorflow 2.0 implementation of InfoGAN trained on MNIST.TensorFlowGenerative" + }, + { + num: NumberInt("1895"), + value: "Dive into Machine Learning 4Machine learning implementationTensorFlowCVGenerativeGraph" + }, + { + num: NumberInt("1896"), + value: "cVAE in pytorch 4implementation of convolutional VAE in pytorchPyTorchCVGenerative" + }, + { + num: NumberInt("1897"), + value: "pytorch Tiny Darknet 4 PyTorch implementation of the Tiny Darknet Image Classification algorithm PyTorchCV" + }, + { + num: NumberInt("1898"), + value: "improved ContentDisentanglement 4PyTorch implementation of \"Emerging Disentanglement in Auto-Encoder Based Unsupervised Image Content Transfer\" - tuned versionPyTorchCVUnsupervised" + }, + { + num: NumberInt("1899"), + value: "bayes by backprop 4Implementing Bayes by Backprop with PyTorch. Applied on time-series prediction.PyTorchGenerativeGraph" + }, + { + num: NumberInt("1900"), + value: "Spectral Stein Gradient 4PyTorch Implementation of the Spectral Stein Gradient EstimatorPyTorchGenerative" + }, + { + num: NumberInt("1901"), + value: "PyTorch RNNs 4Implementation of RNN variants from scratch in PyTorchPyTorchCV" + }, + { + num: NumberInt("1902"), + value: "Disentangling_by_Factorising 4PyTorch Implementation of Disentangling by Factorising, Variational Auto EncodersPyTorchGenerative" + }, + { + num: NumberInt("1903"), + value: "DDR 4This repository is the demo implementation of [Deep Dimension Reduction for Supervised Representation Learning]. PyTorchCV" + }, + { + num: NumberInt("1904"), + value: "centernet detection kitti 4This project implemented CenterNet for 2D object detection and tested on the KITTI dataset.PyTorchCV" + }, + { + num: NumberInt("1905"), + value: "SSD+FPN 4SSD is an unified framework for object detection with a single network.MXNetCV" + }, + { + num: NumberInt("1906"), + value: "jax nn template 4Deep Learning Template with JAXJAXGenerative" + }, + { + num: NumberInt("1907"), + value: "tensorf jax 4Unofficial implementation of Tensorial Radiance Fields (Chen & Xu 22)JAXCV" + }, + { + num: NumberInt("1908"), + value: "jax reactor 4Differentiable and hardware accelerated chemical kinetics simulations in python using JAXJAXGenerative" + }, + { + num: NumberInt("1909"), + value: "unet jax 4Image segmentation with a U-Net-like architecture based on https://keras.io/examples/vision/oxford_pets_image_segmentation/JAXCVGenerative" + }, + { + num: NumberInt("1910"), + value: "openapi jaxb 4OpenApi annotation in XSD -> DTO generationJAXNLP" + }, + { + num: NumberInt("1911"), + value: "JAX RS JPA CRUD 4Provides extendable classes to create JAX-RS CRUD Web Services tied to JPA entity classesJAXGenerative" + }, + { + num: NumberInt("1912"), + value: "SpringBootEcommerceApiJersey 4Ecommerce Api application built with Spring Boot + JAX-RS JerseyJAXCVGenerativeRL" + }, + { + num: NumberInt("1913"), + value: "rsmvc 4Prototype for a MVC web framework based on JAX-RSJAXNLP" + }, + { + num: NumberInt("1914"), + value: "JAX RL 4JAX implementations of various deep reinforcement learning algorithms.JAXRL" + }, + { + num: NumberInt("1915"), + value: "svgd jax 4Stein Variational Gradient Descent, Implemented in JaxJAXGenerative" + }, + { + num: NumberInt("1916"), + value: "sxml jaxp 4Clojure library for using SXML-inspired XML respresentations with JAXP.JAXCVNLPAudio" + }, + { + num: NumberInt("1917"), + value: "jaxb format plugin 4Plugin for the JAXB (Java API for XML Binding) Schema-to-Source compiler (XJC) that generates code to format instances of generated classes via an XPath expressionJAXNLPGraph" + }, + { + num: NumberInt("1918"), + value: "swin_transformer_v2_jax 4This project compares the performance of Swin-Transformer v2 implemented in JAX and PyTorch.JAXCVGenerative" + }, + { + num: NumberInt("1919"), + value: "pathfinder 4JAX implementation of \"Pathfinder: Parallel quasi-Newton variational inference\"JAXGenerative" + }, + { + num: NumberInt("1920"), + value: "dynaql 4A GraphQL Client in Java (inspired by JAX-RS Client)JAXCVNLPGenerativeGraph" + }, + { + num: NumberInt("1921"), + value: "sympais 4Symbolic Parallel Adaptive Importance Sampling for Probabilistic Program Analysis in JAXJAXCVNLPGenerativeAudioGraph" + }, + { + num: NumberInt("1922"), + value: "trajectory optimisation in learned multimodal dynamical systems 4Trajectory optimisation in learned multimodal dynamical systems via latent-space collocation - JAX.JAXGenerative" + }, + { + num: NumberInt("1923"), + value: "lift json jsr311 provider 4JSR-311 / JAX-RS Provider for using Lift-Json to map between Json and Scala Case ClassesJAXNLP" + }, + { + num: NumberInt("1924"), + value: "Trust Region Policy Optimization 3My implementation of TRPOPyTorchRL" + }, + { + num: NumberInt("1925"), + value: "EfficientNet PyTorch 3A PyTorch implementation of EfficientNetPyTorchCVGenerative" + }, + { + num: NumberInt("1926"), + value: "dcgan celeba 3PyTorch Implementation of DCGAN (on CelebA dataset)PyTorchCVGenerative" + }, + { + num: NumberInt("1927"), + value: "speech2face 3A PyTorch implementation of MIT CSAIL's Speech2Face research paper from IEEE CVPR 2019PyTorchCVNLPAudioGraph" + }, + { + num: NumberInt("1928"), + value: "pytorch implementations 3Pytorch implementation examples of Neural Networks etcPyTorchCVGenerative" + }, + { + num: NumberInt("1929"), + value: "nnutils 3CPU & CUDA implementation of several neural network utilsPyTorchCV" + }, + { + num: NumberInt("1930"), + value: "DRN PyTorch 3PyTorch implementation of Dilated Residual Networks for semantic image segmentationPyTorchCVNLP" + }, + { + num: NumberInt("1931"), + value: "dcgan 3A PyTorch implementation of \"Deep Convolutional Generative Adversarial Networks\" with Multiple Discriminator.PyTorchGenerative" + }, + { + num: NumberInt("1932"), + value: "ColorizeDepthNet 3PyTorch implementation for Colorization of Depth Map via DisentanglementPyTorchCV" + }, + { + num: NumberInt("1933"), + value: "unet pytorch 3pytorch implementation of basic unetPyTorchCV" + }, + { + num: NumberInt("1934"), + value: "meta_learning 3Implementation of Meta Learning AlgorithmPyTorchGenerativeRL" + }, + { + num: NumberInt("1935"), + value: "disturblabel pytorch 3PyTorch implementation of DisturbLabelPyTorchCV" + }, + { + num: NumberInt("1936"), + value: "deepdeblur 3Unofficial PyTorch implementation of DeepDeblurPyTorchCVGenerative" + }, + { + num: NumberInt("1937"), + value: "SNGAN 3A Pytorch implementation of \"Spectral Normalization for Generative Adversarial Networks\"PyTorchCVGenerative" + }, + { + num: NumberInt("1938"), + value: "MobileNetV2 3Implementation of MobileNetV2 with pyTorchPyTorchCV" + }, + { + num: NumberInt("1939"), + value: "VDSR pytorch tf2 3VDSR implementation with PyTorch and Tensorflow 2PyTorchGenerative" + }, + { + num: NumberInt("1940"), + value: "yolov3 3An implementation of yolov3 using pytorch.PyTorchCV" + }, + { + num: NumberInt("1941"), + value: "openpose pytorch 3openpose implementation in pytorchPyTorchCV" + }, + { + num: NumberInt("1942"), + value: "DenseNet pytorch 3Implementation of DenseNets Using PyTorchPyTorchGraph" + }, + { + num: NumberInt("1943"), + value: "deep coloring 3This is a PyTorch implementation of the paper Colorful Image ColorizationPyTorchCV" + }, + { + num: NumberInt("1944"), + value: "Mobilenet CustomData 3This is a pytorch version of mobilenet implemented by Jupyter Notebook, the dataset consists of imagenet dataset and custom dataset.PyTorchCV" + }, + { + num: NumberInt("1945"), + value: "neural style 3Style transfer implemented in pytorchPyTorchCV" + }, + { + num: NumberInt("1946"), + value: "CapsuleNet 3a pytorch implementation of CapsuleNetPyTorchCV" + }, + { + num: NumberInt("1947"), + value: "scene_text_segmentation 3Pytorch implementation for pixel-wise scene text segmentation based on DeepLabV3+ PyTorchCVGenerative" + }, + { + num: NumberInt("1948"), + value: "VST 3Video Summarization Transformer: Implementation in PyTorch of the Transformer model for video summarisationPyTorchCVNLPRLUnsupervised" + }, + { + num: NumberInt("1949"), + value: "deep learning cnn 3Convolutional Neural Network implementation from scratch in PyTorch on a big image datasetPyTorchCVGraph" + }, + { + num: NumberInt("1950"), + value: "pt splitter 3 PyTorch implementation of Splitter graph node embeddingsPyTorchGraph" + }, + { + num: NumberInt("1951"), + value: "Self Attention GAN master_pytorch 3 Pytorch implementation of Self-Attention Generative Adversarial Networks (SAGAN) of non-cuda user s and its also used by cuda user.PyTorchCVGenerativeUnsupervised" + }, + { + num: NumberInt("1952"), + value: "NSCUPA pytorch 3(Deprecated) Pytorch implementation of Neural Sentiment Classification with User & Product AttentionPyTorchCVGraph" + }, + { + num: NumberInt("1953"), + value: "forces 3PyTorch implementation of \"What happens if...\" Learning to Predict the Effect of Forces in Images, ECCV'16PyTorchCV" + }, + { + num: NumberInt("1954"), + value: "caps em routing cifar 3The code implements Hinton's matrix capsule with em routing for Cifar-10 datasetPyTorchGenerative" + }, + { + num: NumberInt("1955"), + value: "image_colorization 3SAGAN implementation in pytorch for image colorization task. PyTorchCVGenerative" + }, + { + num: NumberInt("1956"), + value: "AlphaDraughts 3A PyTorch implementation of AlphaGo Zero applied to DraughtsPyTorchGraph" + }, + { + num: NumberInt("1957"), + value: "Pytorch in NLP research 3a list of implementations using Pytorch in NLP researchPyTorchGraph" + }, + { + num: NumberInt("1958"), + value: "Deep Reinforcement Learning 3Deep Reinforcement Learning - Implementations and Theory: A path to masteryPyTorchGenerativeRL" + }, + { + num: NumberInt("1959"), + value: "MinGrid Improved RL Methods 3Applying curiosity and curriculum to MinGrid from gym using an RL implementation with PPO.PyTorchRLGraphSelf-Supervised" + }, + { + num: NumberInt("1960"), + value: "pytorch unsupervised domain adatation 3Pytorch implementation of unsupervised domain adaptation methods for deep transfer learning PyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("1961"), + value: "TD3 Pytorch 3Using Pytorch to implement TD3 and play with bipedalPyTorchNLP" + }, + { + num: NumberInt("1962"), + value: "Image Style Transfer 3TensorFlow 1.1.x and PyTorch 1.4 implementationPyTorchCVGenerative" + }, + { + num: NumberInt("1963"), + value: "Indices Net 3Own implementation of the Indices-Net model proposed in [Xue et al, 2017]. This code was written as a baseline to compare with my own model presented in STACOM 2018 [Debus and Ferrante, 2018]. PyTorchCV" + }, + { + num: NumberInt("1964"), + value: "translatR 3Lightweight tools for translation tasks with mxnet R.MXNetNLP" + }, + { + num: NumberInt("1965"), + value: "chainer-gan-trainer 3Chainer GAN Trainer\nChainerGenerative" + }, + { + num: NumberInt("1966"), + value: "gradle java rest api 3This plugin generates Java REST APIs for Micronaut, Spring and JAX-RS from a JSON specificationJAXGenerative" + }, + { + num: NumberInt("1967"), + value: "jaxdl 3JAX (Flax) Deep Learning LibraryJAXRLGraph" + }, + { + num: NumberInt("1968"), + value: "jaxdb 3JAX-DB (Java Architecture Extension for [Relational] Database Binding) is a framework that cohesively binds the Java Application Layer to a Vendor Agnostic RDBMS Layer.JAXGenerative" + }, + { + num: NumberInt("1969"), + value: "jackson jakarta rs providers 3Multi-module project that contains Jackson-based \"new\" Jakarta-RS (nee \"JAX-RS\" -- ones under `jakarta.ws.rs`) providers for JSON, XML, YAML, Smile, CBOR formatsJAXNLP" + }, + { + num: NumberInt("1970"), + value: "jax anchors 3Anchors JAX is a simple Python package fully implemented with JAX to simplify the generation of anchors for object detection modelsJAXCV" + }, + { + num: NumberInt("1971"), + value: "jax rs labs 3JAX-RS: Java API for RESTful Web Services is a Java programming language API spec that provides support in creating web services according to the Representational State Transfer architectural pattern.JAXGenerative" + }, + { + num: NumberInt("1972"), + value: "siren flax 3SIREN neural networks in FlaxJAXCV" + }, + { + num: NumberInt("1973"), + value: "a2c jax 3jax + flax - based implementation of a2cJAXRL" + }, + { + num: NumberInt("1974"), + value: "learning drl 3I'm learning a deep reinforcement learning with jax and flax which is numpy on steroids.JAXRL" + }, + { + num: NumberInt("1975"), + value: "hyper nn 3Easy Hypernetworks in Pytorch and JaxJAXRL" + }, + { + num: NumberInt("1976"), + value: "player_zoo 2Deep reinforcement learning implementationsPyTorchCVRL" + }, + { + num: NumberInt("1977"), + value: "pt_unet 2pytorch unet implementationPyTorchCV" + }, + { + num: NumberInt("1978"), + value: "semantic segmentation 2hrnet pytorch implementationPyTorchCV" + }, + { + num: NumberInt("1979"), + value: "Generative_Adversarial_Networks 2Implements a GAN in PyTorchPyTorchGenerativeUnsupervised" + }, + { + num: NumberInt("1980"), + value: "PPO PyTorch 2Implementation of Proximal Policy Optimization(PPO)PyTorchRL" + }, + { + num: NumberInt("1981"), + value: "Variational Autoencoder Pytorch 2Implementation of the variational autoencoder with PyTorch and FastaiPyTorchGenerative" + }, + { + num: NumberInt("1982"), + value: "Hierarchical Question-Imagee Co-Attention 2This is MXNet implementation of Hierarchical Question-Image Co-Attention for Visual Question Answering(https://arxiv.org/abs/1606.00061)MXNetCV" + }, + { + num: NumberInt("1983"), + value: "lpips j 2Minimal JAX/Flax port of `lpips` supporting `vgg16`, with pre-trained weights stored in the Hugging Face hub.JAXGenerative" + }, + { + num: NumberInt("1984"), + value: "flaxOptimizersBenchmark 2Benchmarking code to evaluate Flax optimizersJAXCVGenerative" + }, + { + num: NumberInt("1985"), + value: "flax 2A flux implementation to be used with ReactJSJAXGenerative" + }, + { + num: NumberInt("1986"), + value: "speech jax 2Speech in Flax/JAXJAXNLPGenerativeAudio" + }, + { + num: NumberInt("1987"), + value: "nerf_jax_flax_practice 2Practice repository for jax and flax implementing NeRF: Representing Scenes as Neural Radiance Fields JAXGenerative" + }, + { + num: NumberInt("1988"), + value: "PaLM flax 2Implementation of the SOTA Transformer architecture from PaLM - Scaling Language Modeling with Pathways in JAX/FlaxJAXGenerative" + }, + { + num: NumberInt("1989"), + value: "gMLP 2Flax implementation of gMLP from \"Pay Attention to MLPs\" (https://arxiv.org/abs/2105.08050)JAXCV" + }, + { + num: NumberInt("1990"), + value: "xpag 2a modular reinforcement learning library with JAX agentsJAXNLPRL" + }, + { + num: NumberInt("1991"), + value: "NeRF 2Implementation of NeRF in JAX, based on Google Research's codebase with W&B LoggingJAXCV" + }, + { + num: NumberInt("1992"), + value: "h former 2H-Former is a VAE for generating in-between fonts (or combining fonts). Its encoder uses a Point net and transformer to compute a code vector of glyph. Its decoder is composed of multiple independent decoders which act on a code vector to reconstruct a point cloud representing a glpyh.JAXCVGenerativeGraph" + }, + { + num: NumberInt("1993"), + value: "flax u2net 2JAX/Flax implementation of U-2 Net for salient object detection.JAXCVGenerative" + }, + { + num: NumberInt("1994"), + value: "EBGAN CelebA 1Pytorch implementation of Energy Based GAN for CelebA datasetPyTorchGenerative" + }, + { + num: NumberInt("1995"), + value: "Evolutionary Reinforcement Learning for OpenAI Gym 1Implementation of Augmented-Random-Search for OpenAI Gym environmentsPyTorchRL" + }, + { + num: NumberInt("1996"), + value: "pytorch_sac 1Pytorch implementation of Soft Actor-Critic algorithmPyTorchRL" + }, + { + num: NumberInt("1997"), + value: "flax 1Fully featured and easy to use ECS library for rustJAXGenerativeHealth" + }, + { + num: NumberInt("1998"), + value: "protein_bert_jax 1ProteinBERT for Huggingface JAX/Flax community weekJAXNLPHealth" + }, + { + num: NumberInt("1999"), + value: "set_transformer 1Amortized clustering with a set transformer in JAX/Flax.JAXCVGenerative" + }, + { + num: NumberInt("2000"), + value: "nedem 1Neural implicit digital elevation modelJAXCV" + }, + { + num: NumberInt("2001"), + value: "flax extra 1The package provides extra flexibility to Flax using ideas originated at Trax.JAXCVNLPGenerativeAudio" + }, + { + num: NumberInt("2002"), + value: "ResMLP Flax 1Minimal Flax implementation of \"ResMLP: Feedforward networks for image classification with data-efficient training\" (https://arxiv.org/abs/2105.03404)JAXCV" + }, + { + num: NumberInt("2003"), + value: "implementation deep learningImplementation of deep learning modelsPyTorchCVGenerativeGraph" + }, + { + num: NumberInt("2004"), + value: "Zero DCEA Jax/Flax implementation of TIP 2021 paper \"Learning to Enhance Low-Light Image via Zero-Reference Deep Curve Estimation\"JAXCVNLP" + }, + { + num: NumberInt("2005"), + value: "TF_TORCH_JAXThis repository will be recording my week long private programming session. I am planning to present 5 diffenent projects starting from simple classification problems to complex NLP modeling in all three frameworks(Tensorflow,Torch,Jax/Flax)JAXGenerative" + }, + { + num: NumberInt("2006"), + value: "DeepViT flaxImplementation of Deep Vision Transformer in FlaxJAXCV" + }, + { + num: NumberInt("2007"), + value: "fourier neural operator flaxAn unofficial implementation of the Fourier Neural Operator in FlaxJAXRL" + }, + { + num: NumberInt("2008"), + value: "Flax_T5_Pre trainingT5 Pre-training Using Transformers and FlaxJAXGenerative" + }, + { + num: NumberInt("2009"), + value: "ml params flaxFlaxatop JAXimplementation of ml-params CLI APIJAXGenerative" + }, + { + num: NumberInt("2010"), + value: "jax ddimJax/Flax implementation of Denoising Diffusion Implicit ModelsJAXGenerative" + }, + { + num: NumberInt("2011"), + value: "jax rl finetuningFinetuning Large Language Models via RL (with Flax/Jax)JAXRL" + }, + { + num: NumberInt("2012"), + value: "Human body segmentationImage segmentation project, implemented in Pytorch, and JAX written in python.JAXCV" + }, + { + num: NumberInt("2013"), + value: "Simple RL JaxSome bare bones implementations of standard reinforcement learning algorithms that use Flax/JaxJAXRL" + }, + { + num: NumberInt("2014"), + value: "AdversarialCryptoProtecting communications with adversarial neural cryptography.\nTensorFlowGenerative" + }, + { + num: NumberInt("2015"), + value: "AdversarialTextSemi-supervised sequence learning with adversarial training.\nTensorFlowGenerative" + }, + { + num: NumberInt("2016"), + value: "AttentionOCRA model for real-world image text extraction.\nTensorFlowCV" + }, + { + num: NumberInt("2017"), + value: "AudiosetModels and supporting code for use with AudioSet.\nTensorFlowAudio" + }, + { + num: NumberInt("2018"), + value: "BrainCoderProgram synthesis with reinforcement learning.\nTensorFlowRL" + }, + { + num: NumberInt("2019"), + value: "CognitiveMappinGANPlanningImplementation of a spatial memory based mapping and planning architecture for visual navigation.\nTensorFlowGenerative" + }, + { + num: NumberInt("2020"), + value: "CompressionCompressing and decompressing images using a pre-trained Residual GRU network.\nTensorFlowCV" + }, + { + num: NumberInt("2021"), + value: "DeepSpeechAutomatic speech recognition.\nTensorFlowNLPAudio" + }, + { + num: NumberInt("2022"), + value: "DeepLabDeep labeling for semantic image segmentation.\nTensorFlowCV" + }, + { + num: NumberInt("2023"), + value: "DELFDeep local features for image matching and retrieval.\nTensorFlowCV" + }, + { + num: NumberInt("2024"), + value: "GANGenerative adversarial networks.\nTensorFlowGenerative" + }, + { + num: NumberInt("2025"), + value: "Im2txtImage-to-text neural network for image captioning.\nTensorFlowCVNLP" + }, + { + num: NumberInt("2026"), + value: "LearningUnsupervisedLearningA meta-learned unsupervised learning update rule.\nTensorFlowUnsupervised" + }, + { + num: NumberInt("2027"), + value: "LFADSSequential variational autoencoder for analyzing neuroscience data.\nTensorFlowGenerative" + }, + { + num: NumberInt("2028"), + value: "MaskGANText generation with GANs.\nTensorFlowGenerative" + }, + { + num: NumberInt("2029"), + value: "ObjectDetectionLocalizing and identifying multiple objects in a single image.\nTensorFlowCV" + }, + { + num: NumberInt("2030"), + value: "PCLRLCode for several reinforcement learning algorithms, including Path Consistency Learning.\nTensorFlowRL" + }, + { + num: NumberInt("2031"), + value: "SLIMImage classification models in TF-Slim.\nTensorFlowCV" + }, + { + num: NumberInt("2032"), + value: "StreetIdentify the name of a street (in France) from an image using a Deep RNN.\nTensorFlowCV" + }, + { + num: NumberInt("2033"), + value: "Vid2depthLearning depth and ego-motion unsupervised from raw monocular video.\nTensorFlowUnsupervised" + }, + { + num: NumberInt("2034"), + value: "Policy GradientFor Playing Atari Ping Pong\nTensorFlowRL" + }, + { + num: NumberInt("2035"), + value: "Fully Convolutional Networks for Semantic Segmentation (FCNs)These models are described in the paper: Fully Convolutional Models for Semantic Segmentation Jonathan Long, Evan Shelhamer, Trevor Darrell CVPR 2015 arXiv:1411.4038Details, model definitions, pre-trained weights, and code are public on github: https://github.com/shelhamer/fcn.berkeleyvision.org.These models are compatible with Caffe master, unlike earlier FCNs that required a pre-release branch (note: this reference edition of the models is still in progress and not all of the models have yet been ported to master).CaffeCV" + }, + { + num: NumberInt("2036"), + value: "Deep Learning of Binary Hash Codes for Fast Image RetrievalWe present an effective deep learning framework to create the hash-like binary codes for fast image retrieval.CaffeCV" + }, + { + num: NumberInt("2037"), + value: "GoogLeNet_cars on car model classificationGoogLeNet_cars is the GoogLeNet model pre-trained on ImageNet classification task and fine-tuned on 431 car models in CompCars dataset.CaffeCV" + }, + { + num: NumberInt("2038"), + value: "SegNet and Bayesian SegNetSegNet is a real-time semantic segmentation architecture for scene understanding.CaffeCV" + }, + { + num: NumberInt("2039"), + value: "Emotion Recognition in the Wild via Convolutional Neural Networks and Mapped Binary PatternsWe provide models for facial emotion classification for different image representation obtained using mapped binary patterns.CaffeCV" + }, + { + num: NumberInt("2040"), + value: "ResNetsThis repository contains the original models (ResNet-50, ResNet-101, and ResNet-152) described in the paper \"Deep Residual Learning for Image Recognition\" (http://arxiv.org/abs/1512.03385).CaffeCV" + }, + { + num: NumberInt("2041"), + value: "CNN Object Proposal Models for Salient Object DetectionCNN models for the following CVPR'16 paper: Unconstrained Salient Object Detection via Proposal Subset Optimization J.CaffeCV" + }, + { + num: NumberInt("2042"), + value: "Deep HandWe provide pretrained CNN models of our CVPR'16 paper (Oral): Deep Hand: How to Train a CNN on 1 Million Hand Images When Your Data Is Continuous and Weakly Labelled O.CaffeCV" + }, + { + num: NumberInt("2043"), + value: "Inception-BN full ImageNet modelInception-v2 model trained on full ImageNet dataset with 14,197,087 images in 21,841 classes.CaffeCV" + }, + { + num: NumberInt("2044"), + value: "DeepYeast11-layer convolutional neural network trained on two-channel microscopy images of yeast cells carrying fluorescent proteins with different subcellular localizations.[Web] [Paper] [Model]CaffeCV" + }, + { + num: NumberInt("2045"), + value: "ImageNet pre-trained models with batch normalizationCNN models pre-trained on 1000 ImageNet categories.CaffeCV" + }, + { + num: NumberInt("2046"), + value: "ResNet-101 for regressing 3D morphable face models (3DMM) from single imagesThis project page contains a ResNet-101 deep network model for 3DMM regression (3D shape and texture)The download includes both the network itself and the parameters required to map the 3DMM parameters regressed by the network back to 3D shapes(e.g., the basis vectors for the face shape and the average face shape).CaffeCV" + }, + { + num: NumberInt("2047"), + value: "Cascaded Fully Convolutional Networks for Biomedical Image SegmentationThese models segment liver and liver tumor in CT volumes using the UNET architecture proposed by Ronnerberger et al.CaffeCV" + }, + { + num: NumberInt("2048"), + value: "Deep Networks for Earth ObservationThese models have been trained to perform semantic segmentation on aerial images, as proposed by Audebert et al.CaffeCV" + }, + { + num: NumberInt("2049"), + value: "Supervised Learning of Semantics-Preserving Hash via Deep Convolutional Neural NetworksWe present a simple yet effective supervised deep hash approach that constructs binary hash codes from labeled data for large-scale image search.CaffeCV" + }, + { + num: NumberInt("2050"), + value: "BVLC AlexNetThis model is a replication of the model described in the AlexNet publication.\nCaffe2CV" + }, + { + num: NumberInt("2051"), + value: "BVLC Reference CaffeNetThis model is the result of following the Caffe ImageNet model training instructions.\nCaffe2CV" + }, + { + num: NumberInt("2052"), + value: "DetectronDetectron is Facebook AI Research's software system that implements state-of-the-art object detection algorithms, including Mask R-CNN. It is written in Python and powered by the Caffe2 deep learning framework.\nCaffe2CV" + }, + { + num: NumberInt("2053"), + value: "ResNet-50An implementation of ResNet, deep residual learning for image recognition.\nCaffe2CV" + }, + { + num: NumberInt("2054"), + value: "InfoGANKeras implementation of InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial NetsKerasGenerative" + }, + { + num: NumberInt("2055"), + value: "pix2pixKeras implementation of Image-to-Image Translation with Conditional Adversarial Networks by Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, Alexei A.KerasCVNLPGenerative" + }, + { + num: NumberInt("2056"), + value: "Colorful Image colorizationB&W to color\nKerasCV" + }, + { + num: NumberInt("2057"), + value: "Auxiliary Classifier GANImplementation of _Auxiliary Classifier Generative Adversarial Network_. Paper: https://arxiv.org/abs/1610.0958\nKerasGenerative" + }, + { + num: NumberInt("2058"), + value: "Adversarial AutoencoderImplementation of _Adversarial Autoencoder_. Paper: https://arxiv.org/abs/1511.0564\nKerasGenerative" + }, + { + num: NumberInt("2059"), + value: "Bidirectional GANImplementation of _Bidirectional Generative Adversarial Network_. Paper: https://arxiv.org/abs/1605.0978\nKerasGenerative" + }, + { + num: NumberInt("2060"), + value: "Boundary-Seeking GANImplementation of _Boundary-Seeking Generative Adversarial Networks_. Paper: https://arxiv.org/abs/1702.0843\nKerasGenerative" + }, + { + num: NumberInt("2061"), + value: "Conditional GANImplementation of _Semi-Supervised Learning with Context-Conditional Generative Adversarial Networks_. Paper: https://arxiv.org/abs/1611.06430\nKerasGenerative" + }, + { + num: NumberInt("2062"), + value: "Context-Conditional GANImplementation of _Conditional Generative Adversarial Nets_. Paper:https://arxiv.org/abs/1411.178\nKerasGenerative" + }, + { + num: NumberInt("2063"), + value: "Coupled GANsImplementation of _Coupled generative adversarial networks_. Paper: https://arxiv.org/abs/1606.0753\nKerasGenerative" + }, + { + num: NumberInt("2064"), + value: "CycleGANImplementation of _Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks_. Paper: https://arxiv.org/abs/1703.1059\nKerasCVNLPGenerative" + }, + { + num: NumberInt("2065"), + value: "Deep Convolutional GANImplementation of _Deep Convolutional Generative Adversarial Network_. Paper: https://arxiv.org/abs/1511.0643\nKerasGenerative" + }, + { + num: NumberInt("2066"), + value: "DiscoGANImplementation of _Learning to Discover Cross-Domain Relations with Generative Adversarial Networks_. Paper: https://arxiv.org/abs/1703.0519\nKerasGenerative" + }, + { + num: NumberInt("2067"), + value: "DualGANImplementation of _DualGAN: Unsupervised Dual Learning for Image-to-Image Translation_. Paper: https://arxiv.org/abs/1704.0251\nKerasCVNLPGenerativeUnsupervised" + }, + { + num: NumberInt("2068"), + value: "Generative Adversarial NetworkImplementation of _Generative Adversarial Network_ with a MLP generator and discriminator. Paper: https://arxiv.org/abs/1406.266\nKerasGenerative" + }, + { + num: NumberInt("2069"), + value: "InfoGANImplementation of _InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets_. Paper: https://arxiv.org/abs/1606.0365\nKerasGenerative" + }, + { + num: NumberInt("2070"), + value: "LSGANImplementation of _Least Squares Generative Adversarial Networks_. Paper: https://arxiv.org/abs/1611.0407\nKerasGenerative" + }, + { + num: NumberInt("2071"), + value: "Pix2PixImplementation of _Image-to-Image Translation with Conditional Adversarial Networks_. Paper: https://arxiv.org/abs/1611.0700\nKerasCVNLPGenerative" + }, + { + num: NumberInt("2072"), + value: "PixelDAImplementation of _Unsupervised Pixel-Level Domain Adaptation with Generative Adversarial Networks_. Paper: https://arxiv.org/abs/1612.0542\nKerasGenerativeUnsupervised" + }, + { + num: NumberInt("2073"), + value: "Semi-Supervised GANImplementation of _Semi-Supervised Generative Adversarial Network_. Paper: https://arxiv.org/abs/1606.0158\nKerasGenerative" + }, + { + num: NumberInt("2074"), + value: "Super-Resolution GANImplementation of _Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network_. Paper: https://arxiv.org/abs/1609.0480\nKerasCVGenerative" + }, + { + num: NumberInt("2075"), + value: "Wasserstein GANImplementation of _Wasserstein GAN_ (with DCGAN generator and discriminator). Paper: https://arxiv.org/abs/1701.0787\nKerasGenerative" + }, + { + num: NumberInt("2076"), + value: "Wasserstein GAN GPImplementation of _Improved Training of Wasserstein GANs_. Paper: https://arxiv.org/abs/1704.0002\nKerasGenerative" + }, + { + num: NumberInt("2077"), + value: "chainer_encoder_decoderNeural Encoder-Decoder Machine Translation\nChainerNLP" + }, + { + num: NumberInt("2078"), + value: "Generative Adversarial Nets (GAN)Generative Adversarial Nets (GAN)\nChainerGenerative" + }, + { + num: NumberInt("2079"), + value: "HyperFace TensorFlow implementation 68HyperFaceTensorFlowGenerative" + }, + { + num: NumberInt("2080"), + value: "Adversarial Auto-encoders 181argparsePyTorchGenerative" + }, + { + num: NumberInt("2081"), + value: "DCGAN(Gluon:star 12MXNetGenerative" + }, + { + num: NumberInt("2082"), + value: "DCGAN face generation(Gluon:star 8MXNetGenerative" + }, + { + num: NumberInt("2083"), + value: "Variational Autoencoder with deconvolutionsKerasGenerative" + }, + { + num: NumberInt("2084"), + value: "t-SNE of image CNN fc7 activationsKerasCV" + }, + { + num: NumberInt("2085"), + value: "Uni Fold jax 144JAXGenerativeHealth" + }, + { + num: NumberInt("2086"), + value: "jaxline 111JAXCVGenerative" + }, + { + num: NumberInt("2087"), + value: "tf2jax 50JAXNLPGenerativeGraph" + }, + { + num: NumberInt("2088"), + value: "transformer_in_transformer_flax 20JAXCV" + }, + { + num: NumberInt("2089"), + value: "jax influence 17JAXNLP" + }, + { + num: NumberInt("2090"), + value: "iree jax 16JAXGenerativeGraph" + }, + { + num: NumberInt("2091"), + value: "jaxb visitor 13JAXNLPGenerativeGraph" + }, + { + num: NumberInt("2092"), + value: "sb3_jax 12JAXRL" + }, + { + num: NumberInt("2093"), + value: "swagger spring jaxrs sample app 9JAXNLP" + }, + { + num: NumberInt("2094"), + value: "jaxb fi 7JAXGenerativeRL" + }, + { + num: NumberInt("2095"), + value: "RL JAX 5JAXRL" + }, + { + num: NumberInt("2096"), + value: "python flax id 5JAXGraph" + }, + { + num: NumberInt("2097"), + value: "CaiT Flax 3JAXCV" + }, + { + num: NumberInt("2098"), + value: "Simple ViT flax 2JAXCV" + }, + { + num: NumberInt("2099"), + value: "flax cifar 1JAXCV" + }, + { + num: NumberInt("2100"), + value: "docker flaxJAXCV" + }, + { + num: NumberInt("2101"), + value: "CrossViT flaxJAXCV" + }, + { + num: NumberInt("2102"), + value: "NesT flaxJAXCV" + }, + { + num: NumberInt("2103"), + value: "pytorch-pretrained-BERT 61900PyTorch version of Google AI's BERT model with script to load Google's pre-trained models\nPyTorch" + }, + { + num: NumberInt("2104"), + value: "transformers 61900Huggingface Transformers: State-of-the-art Natural Language Processing for TensorFlow 2.0 and PyTorch. huggingface.co/transformers\nPyTorch" + }, + { + num: NumberInt("2105"), + value: "fastai 22200The fast.ai deep learning library, lessons, and tutorials\nPyTorch" + }, + { + num: NumberInt("2106"), + value: "pytorch-lightning 18200Rapid research framework for Pytorch. The researcher's version of keras.\nPyTorch" + }, + { + num: NumberInt("2107"), + value: "Magenta 17600Research project to advance the state of the art in machine intelligence for music and art generation\nTensorFlow" + }, + { + num: NumberInt("2108"), + value: "pytorch_geometric 14500Geometric Deep Learning Extension Library for PyTorch\nPyTorch" + }, + { + num: NumberInt("2109"), + value: "**InsightFace** 11700By Jia Guo and Jiankang DengMXNet" + }, + { + num: NumberInt("2110"), + value: "Kubeflow 11500Kubeflow is a Cloud Native platform for machine learning based on Googles internal machine learning pipelines.TensorFlow" + }, + { + num: NumberInt("2111"), + value: "Kaldi 11500To build the toolkit: see ./INSTALL.Caffe" + }, + { + num: NumberInt("2112"), + value: "flair 11500A very simple framework for state-of-the-art Natural Language Processing (NLP)\nPyTorch" + }, + { + num: NumberInt("2113"), + value: "pytorch vision 11500Datasets, Transforms and Models specific to Computer Vision.\nPyTorch" + }, + { + num: NumberInt("2114"), + value: "AllenNLP 11000An open-source NLP research library, built on PyTorch.\nPyTorch" + }, + { + num: NumberInt("2115"), + value: "dgl 9400Python package built to ease deep learning on graph, on top of existing DL frameworks. http://dgl.ai. \nPyTorch" + }, + { + num: NumberInt("2116"), + value: "yolov3 8600YOLOv3: Training and inference in PyTorch pjreddie.com/darknet/yolo\nPyTorch" + }, + { + num: NumberInt("2117"), + value: "pretrained-models.pytorch 8500The goal of this repo is to help to reproduce research papers results. \nPyTorch" + }, + { + num: NumberInt("2118"), + value: "Faster R-CNN 7700The official Faster R-CNN code (written in MATLAB) is available here.Caffe" + }, + { + num: NumberInt("2119"), + value: "pyro 7400Deep universal probabilistic programming with Python and PyTorch http://pyro.ai\nPyTorch" + }, + { + num: NumberInt("2120"), + value: "Keras YOLOv3 7000A Keras implementation of YOLOv3 (Tensorflow backend).\nKeras" + }, + { + num: NumberInt("2121"), + value: "EfficientNet PyTorch 6900It contains an op-for-op PyTorch reimplementation of EfficientNet, along with pre-trained models and examples.\nPyTorch" + }, + { + num: NumberInt("2122"), + value: "Collection of Generative Models with PyTorch 6800Collection of generative models, e.g.PyTorch" + }, + { + num: NumberInt("2123"), + value: "attention-is-all-you-need-pytorch 6500A PyTorch implementation of the Transformer model in \"Attention is All You Need\".https://github.com/thnkim/OpenFacePytorch\nPyTorch" + }, + { + num: NumberInt("2124"), + value: "Striving for Simplicity 6500The All Convolutional Net\nPyTorch" + }, + { + num: NumberInt("2125"), + value: "DensePose 6300Dense Human Pose Estimation In The WildCaffe2" + }, + { + num: NumberInt("2126"), + value: "pytext 6300A natural language modeling framework based on PyTorch fb.me/pytextdocs\nPyTorch" + }, + { + num: NumberInt("2127"), + value: "kornia 6300Differentiable computer vision library.\nPyTorch" + }, + { + num: NumberInt("2128"), + value: "apex 6300An Experimental PyTorch Extension(will be deprecated at a later point)\nPyTorch" + }, + { + num: NumberInt("2129"), + value: "torchgeometry 6300TGM: PyTorch Geometry\nPyTorch" + }, + { + num: NumberInt("2130"), + value: "pulse 6300Self-Supervised Photo Upsampling via Latent Space Exploration of Generative Models\nPyTorch" + }, + { + num: NumberInt("2131"), + value: "AlphaPose 6100Alpha Pose is an accurate multi-person pose estimator, which is the first open-source system that achieves 70+ mAP (72.3 mAP) on COCO dataset and 80+ mAP (82.1 mAP) on MPII dataset.\nTensorFlow" + }, + { + num: NumberInt("2132"), + value: "Deep Residual Networks 5900By Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun.Caffe" + }, + { + num: NumberInt("2133"), + value: "pytorch3d 5900PyTorch3D is FAIR's library of reusable components for deep learning with 3D data pytorch3d.org\nPyTorch" + }, + { + num: NumberInt("2134"), + value: "face-alignment 5700Pytorch implementation of the paper \"How far are we from solving the 2D & 3D Face Alignment problem? (and a dataset of 230,000 3D facial landmarks)\", ICCV 2017\nPyTorch" + }, + { + num: NumberInt("2135"), + value: "Neural Style 5500An implementation of neural style\nTensorFlow" + }, + { + num: NumberInt("2136"), + value: "Sentence Classification with CNN 5500TensorFlow implementation of \"Convolutional Neural Networks for Sentence Classification\" with a blog post\nTensorFlow" + }, + { + num: NumberInt("2137"), + value: "pythia 4900A software suite for Visual Question Answering\nPyTorch" + }, + { + num: NumberInt("2138"), + value: "BERT-PyTorch 4900Pytorch implementation of Google AI's 2018 BERT, with simple annotation\nPyTorch" + }, + { + num: NumberInt("2139"), + value: "Realtime Multi-Person Pose Estimation 4800We present a bottom-up approach for realtime multi-person pose estimation, without using any person detector.\nTensorFlow" + }, + { + num: NumberInt("2140"), + value: "grad-cam 4800Pytorch implementation of Grad-CAM\nPyTorch" + }, + { + num: NumberInt("2141"), + value: "Single Shot MultiBox Detector 4600A PyTorch Implementation of Single Shot MultiBox Detector. \nPyTorch" + }, + { + num: NumberInt("2142"), + value: "CIFAR-10 on Pytorch with VGG, ResNet and DenseNet 4600I'm playing with PyTorch on the CIFAR10 dataset.PyTorch" + }, + { + num: NumberInt("2143"), + value: "denseNet 4500This repository contains the code for DenseNet introduced in the following paper Caffe" + }, + { + num: NumberInt("2144"), + value: "inferno-sklearn 4500A scikit-learn compatible neural network library that wraps pytorch.\nPyTorch" + }, + { + num: NumberInt("2145"), + value: "skorch 4500A scikit-learn compatible neural network library that wraps pytorch\nPyTorch" + }, + { + num: NumberInt("2146"), + value: "pytorch-metric-learning 4400The easiest way to use metric learning in your application. Modular, flexible, and extensible. Written in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2147"), + value: "mesh transformer jax 4310Model parallel transformers in JAX and HaikuJAX" + }, + { + num: NumberInt("2148"), + value: "pygcn 4200Graph Convolutional Networks in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2149"), + value: "Reading Wikipedia to Answer Open-Domain Questions 4200This is a PyTorch implementation of the DrQA system described in the ACL 2017 paper Reading Wikipedia to Answer Open-Domain Questions.PyTorch" + }, + { + num: NumberInt("2150"), + value: "NeMo 4200Neural Modules: a toolkit for conversational AI nvidia.github.io/NeMo\nPyTorch" + }, + { + num: NumberInt("2151"), + value: "torchdiffeq 4100Differentiable ODE solvers with full GPU support and O(1)-memory backpropagation.\nPyTorch" + }, + { + num: NumberInt("2152"), + value: "ignite 4000Ignite is a high-level library to help with training neural networks in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2153"), + value: "CapsNet-Tensorflow 3800A Tensorflow implementation of CapsNet based on Geoffrey Hinton's paper, Dynamic Routing Between Capsules.\nTensorFlow" + }, + { + num: NumberInt("2154"), + value: "**Faster RCNN+Deeplab+R-FCN+Deformable-ConvNets+FPN+SoftNMS** 3700The major contributors of this repository include Yuwen Xiong, Haozhi Qi, Guodong Zhang, Yi Li, Jifeng Dai, Bin Xiao, Han Hu and Yichen Wei.MXNet" + }, + { + num: NumberInt("2155"), + value: "simple-faster-rcnn-pytorch 3600A simplified implemention of Faster R-CNN with competitive performance.\nPyTorch" + }, + { + num: NumberInt("2156"), + value: "Tensorflow-Project-Template 3500A simple and well-designed template for your tensorflow project.\nTensorFlow" + }, + { + num: NumberInt("2157"), + value: "tacotron2 3500Tacotron 2 - PyTorch implementation with faster-than-realtime inference.\nPyTorch" + }, + { + num: NumberInt("2158"), + value: "pytorch-summary 3500Model summary in PyTorch similar to model.summary() in Keras\nPyTorch" + }, + { + num: NumberInt("2159"), + value: "pytorch-OpCounter 3400Count the FLOPs of your PyTorch model.\nPyTorch" + }, + { + num: NumberInt("2160"), + value: "Minigo 3300A minimalist Go engine modeled after AlphaGo Zero, built on MuGo. This is NOT an official version of AlphaGo.\nTensorFlow" + }, + { + num: NumberInt("2161"), + value: "3D-ResNets-PyTorch 33003D ResNets for Action Recognition.\nPyTorch" + }, + { + num: NumberInt("2162"), + value: "ELF 3300ELF: a platform for game research.\nPyTorch" + }, + { + num: NumberInt("2163"), + value: "Person-reID_pytorch 3200PyTorch for Person re-ID. \nPyTorch" + }, + { + num: NumberInt("2164"), + value: "TCN 3200Sequence modeling benchmarks and temporal convolutional networks locuslab/TCN\nPyTorch" + }, + { + num: NumberInt("2165"), + value: "3DDFA 3200The pytorch improved re-implementation of TPAMI 2017 paper: Face Alignment in Full Pose Range: A 3D Total Solution.\nPyTorch" + }, + { + num: NumberInt("2166"), + value: "Fast R-CNN 3100Created by Ross Girshick at Microsoft Research, Redmond.Caffe" + }, + { + num: NumberInt("2167"), + value: "Transformer-XL 3100Transformer-XL: Attentive Language Models Beyond a Fixed-Length Contexthttps://github.com/kimiyoung/transformer-xl\nPyTorch" + }, + { + num: NumberInt("2168"), + value: "Neural Style 3000This is a TensorFlow implementation of several techniques described in the papers: TensorFlow" + }, + { + num: NumberInt("2169"), + value: "pytorch text 3000Torch text related contents. \nPyTorch" + }, + { + num: NumberInt("2170"), + value: "LASER 3000Language-Agnostic SEntence Representations\nPyTorch" + }, + { + num: NumberInt("2171"), + value: "kaolin 3000PyTorch library aimed at accelerating 3D deep learning research\nPyTorch" + }, + { + num: NumberInt("2172"), + value: "AdaBound 2900An optimizer that trains as fast as Adam and as good as SGD.a\nPyTorch" + }, + { + num: NumberInt("2173"), + value: "Catalyst 2900High-level utils for PyTorch DL & RL research. It was developed with a focus on reproducibility, fast experimentation and code/ideas reusing. Being able to research/develop something new, rather than write another regular train loop.\nPyTorch" + }, + { + num: NumberInt("2174"), + value: "Detectron.pytorch 2800A pytorch implementation of Detectron. Both training from scratch and inferring directly from pretrained Detectron weights are available.\nPyTorch" + }, + { + num: NumberInt("2175"), + value: "facenet-pytorch 2800Pretrained Pytorch face detection and recognition models ported from davidsandberg/facenet.\nPyTorch" + }, + { + num: NumberInt("2176"), + value: "DeepJazz 2800Uses Keras & Theano, two deep learning libraries, to generate jazz music. \nKeras" + }, + { + num: NumberInt("2177"), + value: "gpytorch 2700GPyTorch is a Gaussian Process library, implemented using PyTorch. It is designed for creating flexible and modular Gaussian Process models with ease, so that you don't have to be an expert to use GPs.\nPyTorch" + }, + { + num: NumberInt("2178"), + value: "spotlight 2700Deep recommender models using PyTorch.\nPyTorch" + }, + { + num: NumberInt("2179"), + value: "gpytorch 2700A highly efficient and modular implementation of Gaussian Processes in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2180"), + value: "FlowNet 2.0 2600FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks\nPyTorch" + }, + { + num: NumberInt("2181"), + value: "XLM 2600PyTorch original implementation of Cross-lingual Language Model Pretraining.\nPyTorch" + }, + { + num: NumberInt("2182"), + value: "ENAS-pytorch 2500PyTorch implementation of \"Efficient Neural Architecture Search via Parameters Sharing\". \nPyTorch" + }, + { + num: NumberInt("2183"), + value: "neuralcoref 2500State-of-the-art coreference resolution based on neural nets and spaCy huggingface.co/coref\nPyTorch" + }, + { + num: NumberInt("2184"), + value: "pytorch-optimizer 2400Collections of modern optimization algorithms for PyTorch, includes: AccSGD, AdaBound, AdaMod, DiffGrad, Lamb, RAdam, RAdam, Yogi.\nPyTorch" + }, + { + num: NumberInt("2185"), + value: "CapsNet-Keras 2400A Keras implementation of CapsNet in the paper: Sara Sabour, Nicholas Frosst, Geoffrey E Hinton. Dynamic Routing Between Capsules. NIPS 2017\nKeras" + }, + { + num: NumberInt("2186"), + value: "pytorch-playground 2300Base pretrained models and datasets in pytorch (MNIST, SVHN, CIFAR10, CIFAR100, STL10, AlexNet, VGG16, VGG19, ResNet, Inception, SqueezeNet)**.\nPyTorch" + }, + { + num: NumberInt("2187"), + value: "pytorch-generative-model-collections 2300Collection of generative models in Pytorch version.\nPyTorch" + }, + { + num: NumberInt("2188"), + value: "botorch 2300Bayesian optimization in PyTorch\nPyTorch" + }, + { + num: NumberInt("2189"), + value: "InferSent 2200Sentence embeddings (InferSent) and training code for NLI.\nPyTorch" + }, + { + num: NumberInt("2190"), + value: "TorchCV 2200A PyTorch-Based Framework for Deep Learning in Computer Vision. \nPyTorch" + }, + { + num: NumberInt("2191"), + value: "pytorchviz 2200A small package to create visualizations of PyTorch execution graphs. \nPyTorch" + }, + { + num: NumberInt("2192"), + value: "minimalRL 2153Implementations of basic RL algorithms with minimal lines of codes! (pytorch based)PyTorch" + }, + { + num: NumberInt("2193"), + value: "SqueezeNet 2100The Caffe-compatible files that you are probably looking for:Caffe" + }, + { + num: NumberInt("2194"), + value: "PyTorch-NLP 2100Text utilities and datasets for PyTorch pytorchnlp.readthedocs.io\nPyTorch" + }, + { + num: NumberInt("2195"), + value: "Neural Style Transfer 2100Implementation of Neural Style Transfer from the paper A Neural Algorithm of Artistic Style in Keras 2.0+Keras" + }, + { + num: NumberInt("2196"), + value: "loss-landscape 2000Loss-landscape Code for visualizing the loss landscape of neural nets.\nPyTorch" + }, + { + num: NumberInt("2197"), + value: "MMAction2 2000MMAction2 is OpenMMLab's next generation action understanding toolbox and benchmark, a part of the OpenMMLab project.\nPyTorch" + }, + { + num: NumberInt("2198"), + value: "Averaged Stochastic Gradient Descent with Weight Dropped LSTM 1900This repository contains the code used for two Salesforce Research papers:PyTorch" + }, + { + num: NumberInt("2199"), + value: "MMPose 1900MMPose is a pose estimation toolbox and benchmark, a part of the OpenMMLab project.\nPyTorch" + }, + { + num: NumberInt("2200"), + value: "PyTorch-Encoding 1900PyTorch Deep Texture Encoding Network http://hangzh.com/PyTorch-Encoding\nPyTorch" + }, + { + num: NumberInt("2201"), + value: "pytorch-faster-rcnn 1800A pytorch implementation of faster RCNN detection framework based on Xinlei Chen's tf-faster-rcnn.\nPyTorch" + }, + { + num: NumberInt("2202"), + value: "Data Augmentation and Sampling for Pytorch 1800This package provides a few things:PyTorch" + }, + { + num: NumberInt("2203"), + value: "Ax 1800Adaptive Experimentation Platform\nPyTorch" + }, + { + num: NumberInt("2204"), + value: "learn2learn 1800PyTorch Meta-learning Framework for Researchers http://learn2learn.net\nPyTorch" + }, + { + num: NumberInt("2205"), + value: "Mask R-CNN 1800An MXNet implementation of Mask R-CNN.MXNet" + }, + { + num: NumberInt("2206"), + value: "pytorch - fid 1700A Port of Fréchet Inception Distance (FID score) to PyTorch\nPyTorch" + }, + { + num: NumberInt("2207"), + value: "reformer-pytorch 1700Reformer, the efficient Transformer, in Pytorch\nPyTorch" + }, + { + num: NumberInt("2208"), + value: "pytorch-fcn 1600PyTorch implementation of Fully Convolutional Networks. \nPyTorch" + }, + { + num: NumberInt("2209"), + value: "SparseConvNet 1600Submanifold sparse convolutional networks.\nPyTorch" + }, + { + num: NumberInt("2210"), + value: "lightly 1600Lightly is a computer vision framework for self-supervised learning.PyTorch" + }, + { + num: NumberInt("2211"), + value: "MinkowskiEngine 1600Minkowski Engine is an auto-diff library for generalized sparse convolutions and high-dimensional sparse tensors.\nPyTorch" + }, + { + num: NumberInt("2212"), + value: "PyTorch/XLA 1600PyTorch/XLA is a Python package that uses the XLA deep learning compiler to connect the PyTorch deep learning framework and Cloud TPUs.\nPyTorch" + }, + { + num: NumberInt("2213"), + value: "FCIS 1600The major contributors of this repository include Haozhi Qi, Yi Li, Guodong Zhang, Haochen Zhang, Jifeng Dai, and Yichen Wei.MXNet" + }, + { + num: NumberInt("2214"), + value: "style-transfer 1500This repository contains a pyCaffe-based implementation of \"A Neural Algorithm of Artistic Style\" by L.Caffe" + }, + { + num: NumberInt("2215"), + value: "YOLO2 1500YOLOv2 in PyTorch. \nPyTorch" + }, + { + num: NumberInt("2216"), + value: "poincare-embeddings 1500PyTorch implementation of the NIPS-17 paper \"Poincaré Embeddings for Learning Hierarchical Representations\". \nPyTorch" + }, + { + num: NumberInt("2217"), + value: "Pytorch Geometric Temporal 1500A temporal extension library for PyTorch Geometric \nPyTorch" + }, + { + num: NumberInt("2218"), + value: "ChainerCV 1500Versatile set of tools for Deep Learning based Computer Vision\nChainer" + }, + { + num: NumberInt("2219"), + value: "end-to-end-negotiator 1400Deal or No Deal? End-to-End Learning for Negotiation Dialogues\nPyTorch" + }, + { + num: NumberInt("2220"), + value: "efficient_densenet_pytorch 1400A memory-efficient implementation of DenseNets\nPyTorch" + }, + { + num: NumberInt("2221"), + value: "pytorch-openai-transformer-lm 1400This is a PyTorch implementation of the TensorFlow code provided with OpenAI's paper \"Improving Language Understanding by Generative Pre-Training\" by Alec Radford, Karthik Narasimhan, Tim Salimans and Ilya Sutskever.\nPyTorch" + }, + { + num: NumberInt("2222"), + value: "jiant 1400The jiant sentence representation learning toolkit. \nPyTorch" + }, + { + num: NumberInt("2223"), + value: "QNNPACK 1400Quantized Neural Network PACKage - mobile-optimized implementation of quantized neural network operators.\nPyTorch" + }, + { + num: NumberInt("2224"), + value: "higher 1400Higher is a pytorch library allowing users to obtain higher order gradients over losses spanning training loops rather than individual training steps.\nPyTorch" + }, + { + num: NumberInt("2225"), + value: "CRF-RNN 1300 http://crfasrnn.torr.vision Caffe" + }, + { + num: NumberInt("2226"), + value: "attention-transfer 1300Attention transfer in pytorch, read the paper here. \nPyTorch" + }, + { + num: NumberInt("2227"), + value: "cvxpylayers 1300Cvxpylayers is a Python library for constructing differentiable convex optimization layers in PyTorch\nPyTorch" + }, + { + num: NumberInt("2228"), + value: "RepDistiller 1300Contrastive Representation Distillation (CRD), and benchmark of recent knowledge distillation methods\nPyTorch" + }, + { + num: NumberInt("2229"), + value: "Deep Feature Flow 1300The major contributors of this repository include Xizhou Zhu, Yuwen Xiong, Jifeng Dai, Lu Yuan, and Yichen Wei.MXNet" + }, + { + num: NumberInt("2230"), + value: "Pretty Tensor 1200Pretty Tensor provides a high level builder API\nTensorFlow" + }, + { + num: NumberInt("2231"), + value: "Center Loss 1200Caffe is a deep learning framework made with expression, speed, and modularity in mind.Caffe" + }, + { + num: NumberInt("2232"), + value: "Realtime_Multi-Person_Pose_Estimation 1200This is a pytorch version of Realtime_Multi-Person_Pose_Estimation, origin code is here .\nPyTorch" + }, + { + num: NumberInt("2233"), + value: "pytorch-qrnn 1200PyTorch implementation of the Quasi-Recurrent Neural Network - up to 16 times faster than NVIDIA's cuDNN LSTM\nPyTorch" + }, + { + num: NumberInt("2234"), + value: "deep-head-pose 1200Deep Learning Head Pose Estimation using PyTorch.\nPyTorch" + }, + { + num: NumberInt("2235"), + value: "inplace_abn 1200In-Place Activated BatchNorm for Memory-Optimized Training of DNNs\nPyTorch" + }, + { + num: NumberInt("2236"), + value: "torchstat 1200Model analyzer in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2237"), + value: "redner 1200A differentiable Monte Carlo path tracer\nPyTorch" + }, + { + num: NumberInt("2238"), + value: "pytorch-toolbelt 1200PyTorch extensions for fast R&D prototyping and Kaggle farming\nPyTorch" + }, + { + num: NumberInt("2239"), + value: "NVlabs/DG-Net 1200A PyTorch implementation of \"Joint Discriminative and Generative Learning for Person Re-identification\" (CVPR19 Oral). \nPyTorch" + }, + { + num: NumberInt("2240"), + value: "Human Pose Estimation with TensorFlow 1100Here you can find the implementation of the Human Body Pose Estimation algorithm, presented in the ArtTrack and DeeperCut papers.\nTensorFlow" + }, + { + num: NumberInt("2241"), + value: "CapsGNN 1100Capsule Graph Neural Network. (ICLR 2019).\nPyTorch" + }, + { + num: NumberInt("2242"), + value: "Dilated ResNet combination with Dilated Convolutions 1100This code provides various models combining dilated convolutions with residual networks.PyTorch" + }, + { + num: NumberInt("2243"), + value: "bindsnet 1100A Python package used for simulating spiking neural networks (SNNs) on CPUs or GPUs using PyTorch\nPyTorch" + }, + { + num: NumberInt("2244"), + value: "hub 1100Pytorch Hub is a pre-trained model repository designed to facilitate research reproducibility.\nPyTorch" + }, + { + num: NumberInt("2245"), + value: "CrypTen 1100CrypTen is a Privacy Preserving Machine Learning framework written using PyTorch that allows researchers and developers to train models using encrypted data. CrypTen currently supports Secure multi-party computation as its encryption mechanism.\nPyTorch" + }, + { + num: NumberInt("2246"), + value: "**sockeye** 1100This package contains the Sockeye project,MXNet" + }, + { + num: NumberInt("2247"), + value: "Single Shot MultiBox Detector 1100For more details, please refer to arXiv paper.Keras" + }, + { + num: NumberInt("2248"), + value: "PyTorchText 10551st Place Solution for Zhihu Machine Learning Challenge . Implementation of various text-classification models.()PyTorch" + }, + { + num: NumberInt("2249"), + value: "Neural Turing Machine in TensorFlow 1000Implementation of Neural Turing Machine\nTensorFlow" + }, + { + num: NumberInt("2250"), + value: "TensorNets 1000High level network definitions with pre-trained weights in TensorFlow (tested with >= 1.1.0).TensorFlow" + }, + { + num: NumberInt("2251"), + value: "pytorch-pose 1000A PyTorch toolkit for 2D Human Pose Estimation.\nPyTorch" + }, + { + num: NumberInt("2252"), + value: "BERT-NER 1000Pytorch-Named-Entity-Recognition-with-BERT. \nPyTorch" + }, + { + num: NumberInt("2253"), + value: "pytorch-struct 1000A library of vectorized implementations of core structured prediction algorithms (HMM, Dep Trees, CKY, ..,)\nPyTorch" + }, + { + num: NumberInt("2254"), + value: "pytorch-retinanet 987RetinaNet in PyTorch\nPyTorch" + }, + { + num: NumberInt("2255"), + value: "tsn-pytorch 985Temporal Segment Networks (TSN) in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2256"), + value: "Video Frame Interpolation via Adaptive Separable Convolution 975News: Check our new CVPR 2018 paper on a faster and higher-quality frame interpolation method.PyTorch" + }, + { + num: NumberInt("2257"), + value: "Mask-RCNN 963A PyTorch implementation of the architecture of Mask RCNN, serves as an introduction to working with PyTorch\nPyTorch" + }, + { + num: NumberInt("2258"), + value: "Cnn-text classification 930This is the implementation of Kim's Convolutional Neural Networks for Sentence Classification paper in PyTorch. \nPyTorch" + }, + { + num: NumberInt("2259"), + value: "pytorch-deform-conv 880PyTorch implementation of Deformable Convolution. \nPyTorch" + }, + { + num: NumberInt("2260"), + value: "SfmLearner-Pytorch 858Pytorch version of SfmLearner from Tinghui Zhou et al.\nPyTorch" + }, + { + num: NumberInt("2261"), + value: "PyTorch-Style-Transfer 849PyTorch Implementation of Multi-style Generative Network for Real-time Transfer\nPyTorch" + }, + { + num: NumberInt("2262"), + value: "torchMoji 839A pyTorch implementation of the DeepMoji model: state-of-the-art deep learning model for analyzing sentiment, emotion, sarcasm etc.\nPyTorch" + }, + { + num: NumberInt("2263"), + value: "probtorch 836Probabilistic Torch is library for deep generative models that extends PyTorch.\nPyTorch" + }, + { + num: NumberInt("2264"), + value: "LM-LSTM-CRF 825Empower Sequence Labeling with Task-Aware Language Model http://arxiv.org/abs/1709.04109\nPyTorch" + }, + { + num: NumberInt("2265"), + value: "voicefilter 819Unofficial PyTorch implementation of Google AI's VoiceFilter system http://swpark.me/voicefilter\nPyTorch" + }, + { + num: NumberInt("2266"), + value: "pytorch-pruning 815PyTorch Implementation of [1611.06440] Pruning Convolutional Neural Networks for Resource Efficient Inference\nPyTorch" + }, + { + num: NumberInt("2267"), + value: "pytorch-wavenet 802An implementation of WaveNet with fast generation\nPyTorch" + }, + { + num: NumberInt("2268"), + value: "yusuketomoto/chainer-fast-neuralstyle 794Perceptual Losses for Real-Time Style Transfer and Super-Resolution\nChainer" + }, + { + num: NumberInt("2269"), + value: "relational-networks 793Pytorch implementation of \"A simple neural network module for relational reasoning\" (Relational Networks) https://arxiv.org/pdf/1706.01427.pdf\nPyTorch" + }, + { + num: NumberInt("2270"), + value: "pytorch2keras 793Convert PyTorch dynamic graph to Keras model.\nPyTorch" + }, + { + num: NumberInt("2271"), + value: "webdataset 790WebDataset is a PyTorch Dataset (IterableDataset) implementation providing efficient access to datasets stored in POSIX tar archives.\nPyTorch" + }, + { + num: NumberInt("2272"), + value: "Prototypical-Networks-for-Few-shot-Learning-PyTorch 784Implementation of Prototypical Networks for Few Shot Learning (arxiv.org/abs/1703.05175) in Pytorch\nPyTorch" + }, + { + num: NumberInt("2273"), + value: "CNN visualization using Tensorflow 775Tensorflow implementation of \"Visualizing and Understanding Convolutional Networks\"\nTensorFlow" + }, + { + num: NumberInt("2274"), + value: "graphsage-simple 774Simple reference implementation of GraphSAGE.\nPyTorch" + }, + { + num: NumberInt("2275"), + value: "medicaltorch 773A medical imaging framework for Pytorch http://medicaltorch.readthedocs.io\nPyTorch" + }, + { + num: NumberInt("2276"), + value: "pytorch center loss 765Pytorch implementation of Center LossPyTorch" + }, + { + num: NumberInt("2277"), + value: "Keras Realtime Multi-Person Pose Estimation 764This is a Keras version of Realtime Multi-Person Pose Estimation project.\nKeras" + }, + { + num: NumberInt("2278"), + value: "Inferring and Executing Programs for Visual Reasoning 763This is the code for the paperPyTorch" + }, + { + num: NumberInt("2279"), + value: "extension-cpp 763C++ extensions in PyTorch\nPyTorch" + }, + { + num: NumberInt("2280"), + value: "FaceBoxes.PyTorch 761A PyTorch Implementation of FaceBoxes.\nPyTorch" + }, + { + num: NumberInt("2281"), + value: "densenet 750This is a PyTorch implementation of the DenseNet-BC architecture as described in the paper Densely Connected Convolutional Networks by G. Huang, Z. Liu, K. Weinberger, and L. van der Maaten. This implementation gets a CIFAR-10+ error rate of 4.77 with a 100-layer DenseNet-BC with a growth rate of 12. Their official implementation and links to many other third-party implementations are available in the liuzhuang13/DenseNet repo on GitHub. \nPyTorch" + }, + { + num: NumberInt("2282"), + value: "3D Convolutional Neural Networks in TensorFlow 740Implementation of \"3D Convolutional Neural Networks for Speaker Verification application\" in TensorFlow by Torfi et al.\nTensorFlow" + }, + { + num: NumberInt("2283"), + value: "Character-Aware Neural Language Models 733TensorFlow implementation of Character-Aware Neural Language Models\nTensorFlow" + }, + { + num: NumberInt("2284"), + value: "translate 732Translate - a PyTorch Language Library.\nPyTorch" + }, + { + num: NumberInt("2285"), + value: "flownet 727Pytorch implementation of FlowNet by Dosovitskiy et al. \nPyTorch" + }, + { + num: NumberInt("2286"), + value: "gpt-2-Pytorch 720Simple Text-Generator with OpenAI gpt-2 Pytorch Implementation\nPyTorch" + }, + { + num: NumberInt("2287"), + value: "texar-pytorch 716Toolkit for Machine Learning and Text Generation, in PyTorch texar.io\nPyTorch" + }, + { + num: NumberInt("2288"), + value: "breast_cancer_classifier 715Deep Neural Networks Improve Radiologists' Performance in Breast Cancer Screening arxiv.org/abs/1903.08297\nPyTorch" + }, + { + num: NumberInt("2289"), + value: "bottom-up-attention-vqa 714Vqa, bottom-up-attention, pytorch\nPyTorch" + }, + { + num: NumberInt("2290"), + value: "Convolutional LSTM Network 711A multi-layer convolution LSTM modulePyTorch" + }, + { + num: NumberInt("2291"), + value: "Densely Connected Convolutional Networks 711DenseNet implementation of the paper Densely Connected Convolutional Networks in KerasKeras" + }, + { + num: NumberInt("2292"), + value: "NCRF 709Cancer metastasis detection with neural conditional random field (NCRF)\nPyTorch" + }, + { + num: NumberInt("2293"), + value: "MTCNN (original detector) 700This is a python/mxnet implementation of Zhang's work .MXNet" + }, + { + num: NumberInt("2294"), + value: "Flow-Guided Feature Aggregation 694This repository is implemented by Yuqing Zhu, Shuhao Fu, and Xizhou Zhu, when they are interns at MSRA.MXNet" + }, + { + num: NumberInt("2295"), + value: "CondenseNet 692CondenseNet: An Efficient DenseNet using Learned Group Convolutions.\nPyTorch" + }, + { + num: NumberInt("2296"), + value: "neural-style-pt 687A PyTorch implementation of Justin Johnson's Neural-style.\nPyTorch" + }, + { + num: NumberInt("2297"), + value: "pytorch-cnn-finetune 687Fine-tune pretrained Convolutional Neural Networks with PyTorch.\nPyTorch" + }, + { + num: NumberInt("2298"), + value: "Generative Handwriting Demo using TensorFlow 680An attempt to implement the random handwriting generation portion of Alex Graves' paper\nTensorFlow" + }, + { + num: NumberInt("2299"), + value: "sphereface_pytorch 671A PyTorch Implementation of SphereFace.\nPyTorch" + }, + { + num: NumberInt("2300"), + value: "former 667Simple transformer implementation from scratch in pytorch.PyTorch" + }, + { + num: NumberInt("2301"), + value: "federated learning 665A PyTorch Implementation of Federated Learning http://doi.org/10.5281/zenodo.4321561PyTorch" + }, + { + num: NumberInt("2302"), + value: "FlashTorch 664Visualization toolkit for neural networks in PyTorch!\nPyTorch" + }, + { + num: NumberInt("2303"), + value: "vqa.pytorch 657Visual Question Answering in Pytorch\nPyTorch" + }, + { + num: NumberInt("2304"), + value: "PVANet 655by Sanghoon Hong, Byungseok Roh, Kye-hyeon Kim, Yeongjae Cheon, Minje Park (Intel Imaging and Camera Technology)Caffe" + }, + { + num: NumberInt("2305"), + value: "torchgpipe 653A GPipe implementation in PyTorch torchgpipe.readthedocs.io\nPyTorch" + }, + { + num: NumberInt("2306"), + value: "ClusterGCN 646A PyTorch implementation of \"Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks\" (KDD 2019).\nPyTorch" + }, + { + num: NumberInt("2307"), + value: "illustration2vec 642Illustration2vec\nChainer" + }, + { + num: NumberInt("2308"), + value: "torchbeast 635A PyTorch Platform for Distributed RL\nPyTorch" + }, + { + num: NumberInt("2309"), + value: "torchbearer 628Torchbearer: A model training library for researchers using PyTorch.\nPyTorch" + }, + { + num: NumberInt("2310"), + value: "Random-Erasing 624This code has the source code for the paper \"Random Erasing Data Augmentation\".\nPyTorch" + }, + { + num: NumberInt("2311"), + value: "euclidesdb 624A multi-model machine learning feature embedding database http://euclidesdb.readthedocs.io \nPyTorch" + }, + { + num: NumberInt("2312"), + value: "pytorch-capsule 619Pytorch implementation of Hinton's Dynamic Routing Between Capsules.\nPyTorch" + }, + { + num: NumberInt("2313"), + value: "Deep-Compression-AlexNet 602This is a demo of Deep Compression compressing AlexNet from 233MB to 8.9MB without loss of accuracy.Caffe" + }, + { + num: NumberInt("2314"), + value: "pytorch-deeplab-resnet 600Pytorch-deeplab-resnet-model.\nPyTorch" + }, + { + num: NumberInt("2315"), + value: "MTCNN 596this repository is the implementation of MTCNN in MXnetMXNet" + }, + { + num: NumberInt("2316"), + value: "AlexNet, VGG 16, VGG 19, and class heatmap visualization 591NOTE: This repo is outdated and no longer updated.Keras" + }, + { + num: NumberInt("2317"), + value: "torchprof 585A minimal dependency library for layer-by-layer profiling of Pytorch models.\nPyTorch" + }, + { + num: NumberInt("2318"), + value: "DUC 581by Panqu Wang, Pengfei Chen, Ye Yuan, Ding Liu, Zehua Huang, Xiaodi Hou, and Garrison Cottrell.MXNet" + }, + { + num: NumberInt("2319"), + value: "DiracNets 580Training Very Deep Neural Networks Without Skip-Connections\nPyTorch" + }, + { + num: NumberInt("2320"), + value: "Wide ResNet model in PyTorch 577Model definitions and pretrained weights for PyTorch and TensorflowPyTorch" + }, + { + num: NumberInt("2321"), + value: "pytorch-pose-hg-3d 568PyTorch implementation for 3D human pose estimation\nPyTorch" + }, + { + num: NumberInt("2322"), + value: "geoopt 551Riemannian Adaptive Optimization Methods with pytorch optim\nPyTorch" + }, + { + num: NumberInt("2323"), + value: "Spatial Transformer Networks 544Ported from https://github.com/qassemoquab/stnbhwd according to pytorch tutorial.PyTorch" + }, + { + num: NumberInt("2324"), + value: "MXNet Face 544Using mxnet for face-related algorithm, here now only provide :MXNet" + }, + { + num: NumberInt("2325"), + value: "pytorch2caffe 543Convert PyTorch model to Caffemodel\nPyTorch" + }, + { + num: NumberInt("2326"), + value: "ConvE 541Convolutional 2D Knowledge Graph Embeddings\nPyTorch" + }, + { + num: NumberInt("2327"), + value: "DPN 532This repository contains the code and trained models of:MXNet" + }, + { + num: NumberInt("2328"), + value: "qp solver 525A fast and differentiable QP solver for PyTorch. Crafted by Brandon Amos and J. Zico Kolter. \nPyTorch" + }, + { + num: NumberInt("2329"), + value: "pytorch-flows 524PyTorch implementations of algorithms for density estimation\nPyTorch" + }, + { + num: NumberInt("2330"), + value: "YOLO in caffe 523__Update 12-05-2016__: __Currently, only yolo v1 (http://pjreddie.com/darknet/yolov1/) is supported.Caffe" + }, + { + num: NumberInt("2331"), + value: "ResNet 521Install MXNet on a machine with CUDA GPU, and it's better also installed with cuDNN v5MXNet" + }, + { + num: NumberInt("2332"), + value: "pytoune 519A Keras-like framework and utilities for PyTorch\nPyTorch" + }, + { + num: NumberInt("2333"), + value: "Poutyne 519A Keras-like framework for PyTorch that handles much of the boilerplating code needed to train neural networks.\nPyTorch" + }, + { + num: NumberInt("2334"), + value: "treelstm.pytorch 518Tree LSTM implementation in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2335"), + value: "colorization-pytorch 517PyTorch reimplementation of Interactive Deep Colorization richzhang.github.io/ideepcolor\nPyTorch" + }, + { + num: NumberInt("2336"), + value: "RoIAlign.pytorch 516This is a PyTorch version of RoIAlign. This implementation is based on crop_and_resize and supports both forward and backward on CPU and GPU.\nPyTorch" + }, + { + num: NumberInt("2337"), + value: "convert_torch_to_pytorch 513Convert torch t7 model to pytorch model and source.\nPyTorch" + }, + { + num: NumberInt("2338"), + value: "pytorch_cluster 508PyTorch Extension Library of Optimised Graph Cluster Algorithms.\nPyTorch" + }, + { + num: NumberInt("2339"), + value: "pytorch-ntm 504Pytorch ntm implementation. \nPyTorch" + }, + { + num: NumberInt("2340"), + value: "pytorch-dense-correspondence 500Code for \"Dense Object Nets: Learning Dense Visual Object Descriptors By and For Robotic Manipulation\" arxiv.org/pdf/1806.08756.pdf\nPyTorch" + }, + { + num: NumberInt("2341"), + value: "pytorch-maml 497PyTorch implementation of MAML: arxiv.org/abs/1703.03400\nPyTorch" + }, + { + num: NumberInt("2342"), + value: "ban-vqa 492Bilinear attention networks for visual question answering. \nPyTorch" + }, + { + num: NumberInt("2343"), + value: "matchbox 490Write PyTorch code at the level of individual examples, then run it efficiently on minibatches.\nPyTorch" + }, + { + num: NumberInt("2344"), + value: "NeuralArt 489Implementation of A Neural Algorithm of Artistic Style\nTensorFlow" + }, + { + num: NumberInt("2345"), + value: "STN OCR 489This repository contains the code for the paper: STN-OCR: A single Neural Network for Text Detection and Text RecognitionMXNet" + }, + { + num: NumberInt("2346"), + value: "pytorch-made 487MADE (Masked Autoencoder Density Estimation) implementation in PyTorch\nPyTorch" + }, + { + num: NumberInt("2347"), + value: "Structured-Self-Attention 485Implementation for the paper A Structured Self-Attentive Sentence Embedding, which is published in ICLR 2017: arxiv.org/abs/1703.03130 .\nPyTorch" + }, + { + num: NumberInt("2348"), + value: "attn2d 485Pervasive Attention: 2D Convolutional Networks for Sequence-to-Sequence Prediction\nPyTorch" + }, + { + num: NumberInt("2349"), + value: "Arnold 480Arnold - DOOM Agent\nPyTorch" + }, + { + num: NumberInt("2350"), + value: "SMASH 478An experimental technique for efficiently exploring neural architectures.\nPyTorch" + }, + { + num: NumberInt("2351"), + value: "Visual question answering 477Click here to go to the accompanying blog post.Keras" + }, + { + num: NumberInt("2352"), + value: "pytorch-coviar 475Compressed Video Action Recognition\nPyTorch" + }, + { + num: NumberInt("2353"), + value: "SimGNN 470SimGNN: A Neural Network Approach to Fast Graph Similarity Computation.\nPyTorch" + }, + { + num: NumberInt("2354"), + value: "CapsNet-pytorch 467PyTorch implementation of NIPS 2017 paper Dynamic Routing Between Capsules.\nPyTorch" + }, + { + num: NumberInt("2355"), + value: "ResNeXt.pytorch 465Reproduces ResNet-V3 (Aggregated Residual Transformations for Deep Neural Networks) with pytorch.\nPyTorch" + }, + { + num: NumberInt("2356"), + value: "GraphWaveletNeuralNetwork 462This is a Pytorch implementation of Graph Wavelet Neural Network. ICLR 2019. \nPyTorch" + }, + { + num: NumberInt("2357"), + value: "STEAL 459STEAL - Learning Semantic Boundaries from Noisy Annotations nv-tlabs.github.io/STEAL\nPyTorch" + }, + { + num: NumberInt("2358"), + value: "Lucent 456Tensorflow and OpenAI Clarity's Lucid adapted for PyTorch.\nPyTorch" + }, + { + num: NumberInt("2359"), + value: "honk 454PyTorch reimplementation of Google's TensorFlow CNNs for keyword spotting.\nPyTorch" + }, + { + num: NumberInt("2360"), + value: "trellisnet 453Trellis Networks for Sequence Modeling\nPyTorch" + }, + { + num: NumberInt("2361"), + value: "OpenChem 452OpenChem: Deep Learning toolkit for Computational Chemistry and Drug Design Research mariewelt.github.io/OpenChem \nPyTorch" + }, + { + num: NumberInt("2362"), + value: "pixyz 450A library for developing deep generative models in a more concise, intuitive and extendable way. \nPyTorch" + }, + { + num: NumberInt("2363"), + value: "PyTorch-LBFGS 449A PyTorch implementation of L-BFGS.\nPyTorch" + }, + { + num: NumberInt("2364"), + value: "wavetorch 445Numerically solving and backpropagating through the wave equation arxiv.org/abs/1904.12831\nPyTorch" + }, + { + num: NumberInt("2365"), + value: "yolo2-pytorch 436The YOLOv2 is one of the most popular one-stage object detector. This project adopts PyTorch as the developing framework to increase productivity, and utilize ONNX to convert models into Caffe 2 to benifit engineering deployment.\nPyTorch" + }, + { + num: NumberInt("2366"), + value: "Xlearn 431Transfer Learning Library\nPyTorch" + }, + { + num: NumberInt("2367"), + value: "A Structured Self-Attentive Sentence Embedding 427An open-source implementation of the paper ``A Structured Self-Attentive Sentence Embedding'' published by IBM and MILA.PyTorch" + }, + { + num: NumberInt("2368"), + value: "FlappyBird DQN 425A single 200 lines of python code to demostrate DQN with KerasKeras" + }, + { + num: NumberInt("2369"), + value: "vsepp 420Code for the paper \"VSE++: Improved Visual Semantic Embeddings\"\nPyTorch" + }, + { + num: NumberInt("2370"), + value: "neural ode 420Jupyter notebook with Pytorch implementation of Neural Ordinary Differential EquationsPyTorch" + }, + { + num: NumberInt("2371"), + value: "deformable-convolution-pytorch 412PyTorch implementation of Deformable Convolution. \nPyTorch" + }, + { + num: NumberInt("2372"), + value: "Shufflenet-v2-Pytorch 410This is a Pytorch implementation of faceplusplus's ShuffleNet-v2. \nPyTorch" + }, + { + num: NumberInt("2373"), + value: "fast-neural-style 402Pytorch implementation of fast-neural-style, The model uses the method described in Perceptual Losses for Real-Time Style Transfer and Super-Resolution along with Instance Normalization.\nPyTorch" + }, + { + num: NumberInt("2374"), + value: "ggnn.pytorch 401A PyTorch Implementation of Gated Graph Sequence Neural Networks (GGNN). \nPyTorch" + }, + { + num: NumberInt("2375"), + value: "densebody_pytorch 399PyTorch implementation of CloudWalk's recent paper DenseBody.\nPyTorch" + }, + { + num: NumberInt("2376"), + value: "Pytorch Human Pose Estimation 399Implementation of various human pose estimation models in pytorch on multiple datasets (MPII & COCO) along with pretrained modelsPyTorch" + }, + { + num: NumberInt("2377"), + value: "DeepPose 394Deep pose\nChainer" + }, + { + num: NumberInt("2378"), + value: "optnet 386This repository is by Brandon Amos and J. Zico Kolter and contains the PyTorch source code to reproduce the experiments in our paper OptNet: Differentiable Optimization as a Layer in Neural Networks. \nPyTorch" + }, + { + num: NumberInt("2379"), + value: "DrQA 386A pytorch implementation of Reading Wikipedia to Answer Open-Domain Questions.\nPyTorch" + }, + { + num: NumberInt("2380"), + value: "Pytorch-contrib 386It contains reviewed implementations of ideas from recent machine learning papers.\nPyTorch" + }, + { + num: NumberInt("2381"), + value: "PytorchNeuralStyleTransfer 382Implementation of Neural Style Transfer in Pytorch. \nPyTorch" + }, + { + num: NumberInt("2382"), + value: "glow-pytorch 382PyTorch implementation of Glow, Generative Flow with Invertible 1x1 Convolutions (arxiv.org/abs/1807.03039) \nPyTorch" + }, + { + num: NumberInt("2383"), + value: "NGCN 379A Higher-Order Graph Convolutional Layer. NeurIPS 2018.\nPyTorch" + }, + { + num: NumberInt("2384"), + value: "NGCN 379A Higher-Order Graph Convolutional Layer. NeurIPS 2018.\nPyTorch" + }, + { + num: NumberInt("2385"), + value: "CoordConv-pytorch 378Pytorch implementation of CoordConv introduced in 'An intriguing failing of convolutional neural networks and the CoordConv solution' paper. (arxiv.org/pdf/1807.03247.pdf)\nPyTorch" + }, + { + num: NumberInt("2386"), + value: "JointBERT 376Pytorch implementation of JointBERT: \"BERT for Joint Intent Classification and Slot Filling\"PyTorch" + }, + { + num: NumberInt("2387"), + value: "torch2coreml 374Torch7 -> CoreML\nPyTorch" + }, + { + num: NumberInt("2388"), + value: "pywick 370High-level batteries-included neural network training library for Pytorch\nPyTorch" + }, + { + num: NumberInt("2389"), + value: "Precipitation Nowcasting 370pytorch implemention of trajGRU.PyTorch" + }, + { + num: NumberInt("2390"), + value: "torchnca 370A PyTorch implementation of Neighbourhood Components Analysis.PyTorch" + }, + { + num: NumberInt("2391"), + value: "pytorch-i-revnet 365Pytorch implementation of i-RevNets.\nPyTorch" + }, + { + num: NumberInt("2392"), + value: "Weakly_detector 361Implementation of \"Learning Deep Features for Discriminative Localization\"\nTensorFlow" + }, + { + num: NumberInt("2393"), + value: "magnet 360Deep Learning Projects that Build Themselves http://magnet-dl.readthedocs.io/\nPyTorch" + }, + { + num: NumberInt("2394"), + value: "deepfloat 358This repository contains the SystemVerilog RTL, C++, HLS (Intel FPGA OpenCL to wrap RTL code) and Python needed to reproduce the numerical results in \"Rethinking floating point for deep learning\" \nPyTorch" + }, + { + num: NumberInt("2395"), + value: "GoogleNet Convolutional Neural Network Groups Movie Scenes By Setting 353Search, filter, and describe videos based on objects, places, and other things that appear in them\nTensorFlow" + }, + { + num: NumberInt("2396"), + value: "tbd-nets 352PyTorch implementation of \"Transparency by Design: Closing the Gap Between Performance and Interpretability in Visual Reasoning\" arxiv.org/abs/1803.05268 \nPyTorch" + }, + { + num: NumberInt("2397"), + value: "Pytorch-Toolbox 352This is toolbox project for Pytorch. Aiming to make you write Pytorch code more easier, readable and concise.\nPyTorch" + }, + { + num: NumberInt("2398"), + value: "BMXNet 350A fork of the deep learning framework mxnet to study and implement quantization and binarization in neural networks.MXNet" + }, + { + num: NumberInt("2399"), + value: "nonechucks 346Skip bad items in your PyTorch DataLoader, use Transforms as Filters, and more!\nPyTorch" + }, + { + num: NumberInt("2400"), + value: "GradientEpisodicMemory 344Continuum Learning with GEM: Gradient Episodic Memory. https://arxiv.org/abs/1706.08840\nPyTorch" + }, + { + num: NumberInt("2401"), + value: "QANet-pytorch 342An implementation of QANet with PyTorch (EM/F1 = 70.5/77.2 after 20 epoches for about 20 hours on one 1080Ti card.)\nPyTorch" + }, + { + num: NumberInt("2402"), + value: "End-To-End Memory Networks 339Implementation of End-To-End Memory Networks\nTensorFlow" + }, + { + num: NumberInt("2403"), + value: "YOLOv2 336YOLOv2\nChainer" + }, + { + num: NumberInt("2404"), + value: "pyvarinf 335Python package facilitating the use of Bayesian Deep Learning methods with Variational Inference for PyTorch. \nPyTorch" + }, + { + num: NumberInt("2405"), + value: "ResNet-38 335Visual applications by the University of AdelaideMXNet" + }, + { + num: NumberInt("2406"), + value: "R2Plus1D-PyTorch 332PyTorch implementation of the R2Plus1D convolution based ResNet architecture described in the paper \"A Closer Look at Spatiotemporal Convolutions for Action Recognition\"\nPyTorch" + }, + { + num: NumberInt("2407"), + value: "argus-tensor-stream 331A library for real-time video stream decoding to CUDA memory tensorstream.argus-ai.com\nPyTorch" + }, + { + num: NumberInt("2408"), + value: "pytorch-dqn 327Deep Q-Learning Network in pytorch. \nPyTorch" + }, + { + num: NumberInt("2409"), + value: "ESIM 327Implementation of the ESIM model for natural language inference with PyTorchPyTorch" + }, + { + num: NumberInt("2410"), + value: "TripletLoss(FaceNet) 326This aims to reproduce the loss function used in Google's FaceNet paper.Caffe" + }, + { + num: NumberInt("2411"), + value: "pytorch-es 326This is a PyTorch implementation of Evolution Strategies . \nPyTorch" + }, + { + num: NumberInt("2412"), + value: "caffemodel2pytorch 318Convert Caffe models to PyTorch.\nPyTorch" + }, + { + num: NumberInt("2413"), + value: "MNIST_center_loss_pytorch 314A PyTorch implementation of center loss on MNISTPyTorch" + }, + { + num: NumberInt("2414"), + value: "pytorch-explain-black-box 311PyTorch implementation of Interpretable Explanations of Black Boxes by Meaningful Perturbation\nPyTorch" + }, + { + num: NumberInt("2415"), + value: "linformer pytorch 311My take on a practical implementation of Linformer for Pytorch.PyTorch" + }, + { + num: NumberInt("2416"), + value: "GrouPy 311Group Equivariant Convolutional Neural Networks\nChainer" + }, + { + num: NumberInt("2417"), + value: "generative-query-network-pytorch 309Generative Query Network (GQN) in PyTorch as described in \"Neural Scene Representation and Rendering\"\nPyTorch" + }, + { + num: NumberInt("2418"), + value: "torchani 309Accurate Neural Network Potential on PyTorch aiqm.github.io/torchani\nPyTorch" + }, + { + num: NumberInt("2419"), + value: "pytorch_fft 307PyTorch wrapper for FFTs\nPyTorch" + }, + { + num: NumberInt("2420"), + value: "context_encoder_pytorch 306PyTorch Implement of Context Encoders\nPyTorch" + }, + { + num: NumberInt("2421"), + value: "Face_Attention_Network 306Pytorch implementation of face attention network as described in Face Attention Network: An Effective Face Detector for the Occluded Faces.\nPyTorch" + }, + { + num: NumberInt("2422"), + value: "gensen 306Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning.\nPyTorch" + }, + { + num: NumberInt("2423"), + value: "Tensorflow FastText 301A simple embedding based text classifier inspired by Facebook's fastText.\nTensorFlow" + }, + { + num: NumberInt("2424"), + value: "nmp_qc 301Neural Message Passing for Computer Vision\nPyTorch" + }, + { + num: NumberInt("2425"), + value: "APPNP 301Combining Neural Networks with Personalized PageRank for Classification on Graphs. ICLR 2019.\nPyTorch" + }, + { + num: NumberInt("2426"), + value: "salad 301Semi-Supervised Learning and Domain Adaptation.\nPyTorch" + }, + { + num: NumberInt("2427"), + value: "gogh 301Implementation of \"A neural algorithm of Artistic style\"\nChainer" + }, + { + num: NumberInt("2428"), + value: "pytorch_NER_BiLSTM_CNN_CRF 297End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF implement in pyotrch PyTorch" + }, + { + num: NumberInt("2429"), + value: "RetinaNet 296An implementation of RetinaNet in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2430"), + value: "dnc 294Differentiable Neural Computers, for Pytorch\nPyTorch" + }, + { + num: NumberInt("2431"), + value: "Snapshot Ensembles 294Train 1, Get M for Free\nKeras" + }, + { + num: NumberInt("2432"), + value: "EfficientNets-PyTorch 293A PyTorch implementation of EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks.\nPyTorch" + }, + { + num: NumberInt("2433"), + value: "Learning to learn by gradient descent by gradient descent 292PyTorch implementation of Learning to learn by gradient descent by gradient descent.\nPyTorch" + }, + { + num: NumberInt("2434"), + value: "AttentionWalk 291This is a Pytorch implementation of Watch Your Step: Learning Node Embeddings via Graph Attention. NIPS 2018.\nPyTorch" + }, + { + num: NumberInt("2435"), + value: "faster-rcnn 290Faster R-CNN\nChainer" + }, + { + num: NumberInt("2436"), + value: "transfer-nlp 289NLP library designed for flexible research and development\nPyTorch" + }, + { + num: NumberInt("2437"), + value: "pytorch-value-iteration-networks 288Pytorch implementation of Value Iteration Networks (NIPS 2016 best paper) \nPyTorch" + }, + { + num: NumberInt("2438"), + value: "YellowFin_Pytorch 288Auto-tuning momentum SGD optimizer\nPyTorch" + }, + { + num: NumberInt("2439"), + value: "pyscatwave 286Fast Scattering Transform with CuPy/PyTorch,read the paper here\nPyTorch" + }, + { + num: NumberInt("2440"), + value: "graph_convnets_pytorch 286PyTorch implementation of graph ConvNets, NIPS’16\nPyTorch" + }, + { + num: NumberInt("2441"), + value: "Continuous Deep Q-Learning with Model-based Acceleration 285Reimplementation of Continuous Deep Q-Learning with Model-based Acceleration. \nPyTorch" + }, + { + num: NumberInt("2442"), + value: "quick-nlp 284Pytorch NLP library based on FastAI. \nPyTorch" + }, + { + num: NumberInt("2443"), + value: "DeepFM_with_PyTorch 284A PyTorch implementation of DeepFM for CTR prediction problem.PyTorch" + }, + { + num: NumberInt("2444"), + value: "ClariNet 283A Pytorch Implementation of ClariNet arxiv.org/abs/1807.07281\nPyTorch" + }, + { + num: NumberInt("2445"), + value: "pytorch_sac 283PyTorch implementation of Soft Actor-Critic (SAC)PyTorch" + }, + { + num: NumberInt("2446"), + value: "HMM in TensorFlow 281Implementation of viterbi and forward/backward algorithms for HMM\nTensorFlow" + }, + { + num: NumberInt("2447"), + value: "WideResNets 280WideResNets for CIFAR10/100 implemented in PyTorch. This implementation requires less GPU memory than what is required by the official Torch implementation: https://github.com/szagoruyko/wide-residual-networks .\nPyTorch" + }, + { + num: NumberInt("2448"), + value: "pytorch-sgns 279Skipgram Negative Sampling in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2449"), + value: "pytorch-hessian-eigenthings 274Efficient PyTorch Hessian eigendecomposition using the Hessian-vector product and stochastic power iteration. \nPyTorch" + }, + { + num: NumberInt("2450"), + value: "Pytorch-NCE 273The Noise Contrastive Estimation for softmax output written in Pytorch\nPyTorch" + }, + { + num: NumberInt("2451"), + value: "pyinn 271CuPy fused PyTorch neural networks ops\nPyTorch" + }, + { + num: NumberInt("2452"), + value: "vel 271Velocity in deep-learning research.\nPyTorch" + }, + { + num: NumberInt("2453"), + value: "volksdep 271Volksdep is an open-source toolbox for deploying and accelerating PyTorch, Onnx and Tensorflow models with TensorRT.\nPyTorch" + }, + { + num: NumberInt("2454"), + value: "pytorch-dnc 268Neural Turing Machine (NTM) & Differentiable Neural Computer (DNC) with pytorch & visdom. \nPyTorch" + }, + { + num: NumberInt("2455"), + value: "TuckER 266TuckER: Tensor Factorization for Knowledge Graph Completion.\nPyTorch" + }, + { + num: NumberInt("2456"), + value: "neural-art-mini 265Lightweight version of mxnet neural art implementation using ~4.8M SqueezeNet model.MXNet" + }, + { + num: NumberInt("2457"), + value: "simple-effective-text-matching-pytorch 263A pytorch implementation of the ACL2019 paper \"Simple and Effective Text Matching with Richer Alignment Features\".\nPyTorch" + }, + { + num: NumberInt("2458"), + value: "DeepLog 258Pytorch Implementation of DeepLog.PyTorch" + }, + { + num: NumberInt("2459"), + value: "sparktorch 256Train and run Pytorch models on Apache Spark.\nPyTorch" + }, + { + num: NumberInt("2460"), + value: "GAM 252This is a Pytorch implementation of Graph Classification using Structural Attention. KDD 2018.\nPyTorch" + }, + { + num: NumberInt("2461"), + value: "PyramidNet-PyTorch 251A PyTorch implementation for PyramidNets (Deep Pyramidal Residual Networks, arxiv.org/abs/1610.02915)\nPyTorch" + }, + { + num: NumberInt("2462"), + value: "R BERT 249Pytorch implementation of R-BERT: \"Enriching Pre-trained Language Model with Entity Information for Relation Classification\"PyTorch" + }, + { + num: NumberInt("2463"), + value: "pytorch siamese 248Siamese Network implementation using PytorchPyTorch" + }, + { + num: NumberInt("2464"), + value: "Optical Flow Estimation using a Spatial Pyramid Network 247This is a personal reimplementation of Optical Flow Estimation using a Spatial Pyramid Network [1] using PyTorch.PyTorch" + }, + { + num: NumberInt("2465"), + value: "flambe 247An ML framework to accelerate research and its path to production. flambe.ai\nPyTorch" + }, + { + num: NumberInt("2466"), + value: "LoRA 247Code for loralib, an implementation of \"LoRA: Low-Rank Adaptation of Large Language Models\"PyTorch" + }, + { + num: NumberInt("2467"), + value: "Neural programmer-interpreter 246Implementation of Neural Programmer-Interpreters with Keras.Keras" + }, + { + num: NumberInt("2468"), + value: "MTCNN_face_detection_alignment 243This original project is MTCNN.Caffe" + }, + { + num: NumberInt("2469"), + value: "inferno 243A utility library around PyTorch\nPyTorch" + }, + { + num: NumberInt("2470"), + value: "SummaRuNNer 243The PyTorch Implementation of SummaRuNNerPyTorch" + }, + { + num: NumberInt("2471"), + value: "LearningToCompare-Pytorch 242Pytorch Implementation for Paper: Learning to Compare: Relation Network for Few-Shot Learning. \nPyTorch" + }, + { + num: NumberInt("2472"), + value: "pytorch REINFORCE 240PyTorch Implementation of REINFORCE for both discrete & continuous controlPyTorch" + }, + { + num: NumberInt("2473"), + value: "PyTorchWavelets 239PyTorch implementation of the wavelet analysis found in Torrence and Compo (1998)\nPyTorch" + }, + { + num: NumberInt("2474"), + value: "Character CNN 239PyTorch implementation of the Character-level Convolutional Networks for Text Classification paper. \nPyTorch" + }, + { + num: NumberInt("2475"), + value: "YOLO/YOLOv2 239Still under development.MXNet" + }, + { + num: NumberInt("2476"), + value: "relational-rnn-pytorch 238An implementation of DeepMind's Relational Recurrent Neural Networks in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2477"), + value: "SGCN 238This is a Pytorch implementation of Signed Graph Convolutional Network. ICDM 2018.\nPyTorch" + }, + { + num: NumberInt("2478"), + value: "SFD_pytorch 236A PyTorch Implementation of Single Shot Scale-invariant Face Detector.\nPyTorch" + }, + { + num: NumberInt("2479"), + value: "Mask R-CNN 234Implementation of Mask-RCNN in Caffe based on https://arxiv.org/pdf/1703.06870.pdfCaffe" + }, + { + num: NumberInt("2480"), + value: "FewShotLearning 234Pytorch implementation of the paper \"Optimization as a Model for Few-Shot Learning\"\nPyTorch" + }, + { + num: NumberInt("2481"), + value: "DeepRL-Grounding 232This is a PyTorch implementation of the AAAI-18 paper Gated-Attention Architectures for Task-Oriented Language Grounding\nPyTorch" + }, + { + num: NumberInt("2482"), + value: "NCF 227A pytorch implementation of He et al. \"Neural Collaborative Filtering\" at WWW'17PyTorch" + }, + { + num: NumberInt("2483"), + value: "fusenet 227This project contains the models used for the experiments in the paper:MXNet" + }, + { + num: NumberInt("2484"), + value: "tinyTPU 224Implementation of a Tensor Processing Unit for embedded systems and the IoT.TensorFlow" + }, + { + num: NumberInt("2485"), + value: "VRNN 224Pytorch implementation of the Variational RNN (VRNN), from A Recurrent Latent Variable Model for Sequential Data.\nPyTorch" + }, + { + num: NumberInt("2486"), + value: "dni-pytorch 224Decoupled Neural Interfaces using Synthetic Gradients for PyTorch.\nPyTorch" + }, + { + num: NumberInt("2487"), + value: "CS224N 2019 224My completed implementation solutions for CS224N 2021 & 2019PyTorch" + }, + { + num: NumberInt("2488"), + value: "pytorch-transformer 223Pytorch implementation of Attention is all you need.\nPyTorch" + }, + { + num: NumberInt("2489"), + value: "Universal Transformer Pytorch 223Implementation of Universal Transformer in PytorchPyTorch" + }, + { + num: NumberInt("2490"), + value: "pytorch_compact_bilinear_pooling v1 222This repository has a pure Python implementation of Compact Bilinear Pooling and Count Sketch for PyTorch.\nPyTorch" + }, + { + num: NumberInt("2491"), + value: "Skip-Thought Vectors 222An implementation of Skip-Thought Vectors in PyTorch.PyTorch" + }, + { + num: NumberInt("2492"), + value: "pytorch-tools 221Tools for PyTorch\nPyTorch" + }, + { + num: NumberInt("2493"), + value: "delira 220Lightweight framework for fast prototyping and training deep neural networks in medical imaging delira.rtfd.io\nPyTorch" + }, + { + num: NumberInt("2494"), + value: "MINE Mutual Information Neural Estimation 220A pytorch implementation of MINE(Mutual Information Neural Estimation)PyTorch" + }, + { + num: NumberInt("2495"), + value: "embedded spring boot keycloak server 220Keycloak JAX-RS application embedded in a Spring-Boot App.JAX" + }, + { + num: NumberInt("2496"), + value: "Visual Search (Gluon:star 219Demo websiteMXNet" + }, + { + num: NumberInt("2497"), + value: "pytorch tensor decompositions 217PyTorch implementation of [1412.6553] and [1511.06530] tensor decomposition methods for convolutional layers. PyTorch" + }, + { + num: NumberInt("2498"), + value: "ORN 215A PyTorch implementation of the paper \"Oriented Response Networks\" in CVPR 2017. \nPyTorch" + }, + { + num: NumberInt("2499"), + value: "fcn 215Fully Convolutional Networks\nChainer" + }, + { + num: NumberInt("2500"), + value: "DQN 212DQN-in-the-Caffe is an implementation of Deep Q-Network using Caffe.Caffe" + }, + { + num: NumberInt("2501"), + value: "VIN_PyTorch_Visdom 211PyTorch implementation of Value Iteration Networks (VIN): Clean, Simple and Modular. Visualization in Visdom. \nPyTorch" + }, + { + num: NumberInt("2502"), + value: "PyTorch Realtime Multi-Person Pose Estimation 211Pytorch version of Realtime Multi-Person Pose Estimation project.\nPyTorch" + }, + { + num: NumberInt("2503"), + value: "pydlt 210PyTorch based Deep Learning Toolbox\nPyTorch" + }, + { + num: NumberInt("2504"), + value: "Conditional Similarity Networks 208This repository contains a PyTorch implementation of the paper Conditional Similarity Networks presented at CVPR 2017.PyTorch" + }, + { + num: NumberInt("2505"), + value: "per 207Prioritized Experience Replay (PER) implementation in PyTorchPyTorch" + }, + { + num: NumberInt("2506"), + value: "DQN 206This is a very basic DQN (with experience replay) implementation, which uses OpenAI's gym environment and Keras/Theano neural networks.Keras" + }, + { + num: NumberInt("2507"), + value: "HCN-pytorch 204A pytorch reimplementation of { Co-occurrence Feature Learning from Skeleton Data for Action Recognition and Detection with Hierarchical Aggregation }.\nPyTorch" + }, + { + num: NumberInt("2508"), + value: "ChainerMN 204Scalable distributed deep learning with Chainer\nChainer" + }, + { + num: NumberInt("2509"), + value: "FreezeOut 202Accelerate Neural Net Training by Progressively Freezing Layers. \nPyTorch" + }, + { + num: NumberInt("2510"), + value: "DQN-chainer 200Deep Q-Network (DQN)\nChainer" + }, + { + num: NumberInt("2511"), + value: "packnet 199Code for PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning arxiv.org/abs/1711.05769\nPyTorch" + }, + { + num: NumberInt("2512"), + value: "AccSGD 199Implements pytorch code for the Accelerated SGD algorithm.\nPyTorch" + }, + { + num: NumberInt("2513"), + value: "Splitter 196Splitter: Learning Node Representations that Capture Multiple Social Contexts. (WWW 2019).\nPyTorch" + }, + { + num: NumberInt("2514"), + value: "CosFace_pytorch 196Pytorch implementation of CosFacePyTorch" + }, + { + num: NumberInt("2515"), + value: "pytorch adacos 195PyTorch implementation of AdaCosPyTorch" + }, + { + num: NumberInt("2516"), + value: "pt-dilate-rnn 194Dilated RNNs in pytorch. \nPyTorch" + }, + { + num: NumberInt("2517"), + value: "torch-two-sample 194A PyTorch library for two-sample tests\nPyTorch" + }, + { + num: NumberInt("2518"), + value: "GRNet 194Implementation of \"GRNet: Gridding Residual Network for Dense Point Cloud Completion\". (Xie et al., ECCV 2020)PyTorch" + }, + { + num: NumberInt("2519"), + value: "VGG-CAM 194Original matlab implementation and paper here.Keras" + }, + { + num: NumberInt("2520"), + value: "SEAL-CI 193A Hierarchical Graph Perspective. (WWW 2019).\nPyTorch" + }, + { + num: NumberInt("2521"), + value: "DCC 192This repository contains the source code and data for reproducing results of Deep Continuous Clustering paper.\nPyTorch" + }, + { + num: NumberInt("2522"), + value: "pytorch-zssr 190PyTorch implementation of 1712.06087 \"Zero-Shot\" Super-Resolution using Deep Internal Learning\nPyTorch" + }, + { + num: NumberInt("2523"), + value: "beauty-net 190A simple, flexible, and extensible template for PyTorch. It's beautiful.\nPyTorch" + }, + { + num: NumberInt("2524"), + value: "DRRN-pytorch 187An implementation of Deep Recursive Residual Network for Super Resolution (DRRN), CVPR 2017\nPyTorch" + }, + { + num: NumberInt("2525"), + value: "Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling 187Pytorch implementation of \"Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling\" (https://arxiv.org/pdf/1609.01454.pdf)PyTorch" + }, + { + num: NumberInt("2526"), + value: "mctorch 186A manifold optimization library for deep learning. \nPyTorch" + }, + { + num: NumberInt("2527"), + value: "Jax RS Performance Comparison 185:zap: Performance Comparison of Jax-RS implementations and embedded containersJAX" + }, + { + num: NumberInt("2528"), + value: "odin-pytorch 184Principled Detection of Out-of-Distribution Examples in Neural Networks. \nPyTorch" + }, + { + num: NumberInt("2529"), + value: "DeepCORAL 184A PyTorch implementation of 'Deep CORAL: Correlation Alignment for Deep Domain Adaptation.', ECCV 2016\nPyTorch" + }, + { + num: NumberInt("2530"), + value: "pywarm 183A cleaner way to build neural networks for PyTorch. blue-season.github.io/pywarm\nPyTorch" + }, + { + num: NumberInt("2531"), + value: "crnn-mxnet-chinese-text-recognition 181This is an implementation of CRNN (CNN+LSTM+CTC) for chinese text recognition.MXNet" + }, + { + num: NumberInt("2532"), + value: "NALU-pytorch 180Basic pytorch implementation of NAC/NALU from Neural Arithmetic Logic Units arxiv.org/pdf/1808.00508.pdf\nPyTorch" + }, + { + num: NumberInt("2533"), + value: "DGC-Net 180A PyTorch implementation of \"DGC-Net: Dense Geometric Correspondence Network\".\nPyTorch" + }, + { + num: NumberInt("2534"), + value: "tutel 178Tutel MoE: An Optimized Mixture-of-Experts ImplementationPyTorch" + }, + { + num: NumberInt("2535"), + value: "dockerface 177Dockerface is a deep learning replacement for dlib and OpenCV non-deep face detection.Caffe" + }, + { + num: NumberInt("2536"), + value: "pytorch-text-recognition 177Text recognition combo - CRAFT + CRNN.\nPyTorch" + }, + { + num: NumberInt("2537"), + value: "mpl.pytorch 177Pytorch implementation of MaxPoolingLoss.\nPyTorch" + }, + { + num: NumberInt("2538"), + value: "hessian 177Hessian in pytorch. \nPyTorch" + }, + { + num: NumberInt("2539"), + value: "video super resolution 177Video super resolution implemented in PytorchPyTorch" + }, + { + num: NumberInt("2540"), + value: "C3D 175This is 3D convolution (C3D) and video reader implementation in the latest Caffe (Dec 2016).Caffe" + }, + { + num: NumberInt("2541"), + value: "Noisy Networks for Exploration 175NoisyNet [1] (LSTM) asynchronous advantage actor-critic (A3C) [2] on the CartPole-v1 environment.PyTorch" + }, + { + num: NumberInt("2542"), + value: "pyTorchChamferDistance 175Implementation of the Chamfer Distance as a module for pyTorchPyTorch" + }, + { + num: NumberInt("2543"), + value: "convnet-aig 174PyTorch implementation for Convolutional Networks with Adaptive Inference Graphs.\nPyTorch" + }, + { + num: NumberInt("2544"), + value: "smiles transformer 174Original implementation of the paper \"SMILES Transformer: Pre-trained Molecular Fingerprint for Low Data Drug Discovery\" by Shion Honda et al.PyTorch" + }, + { + num: NumberInt("2545"), + value: "OpenFacePytorch 173PyTorch module to use OpenFace's nn4.small2.v1.t7 model \nPyTorch" + }, + { + num: NumberInt("2546"), + value: "PySNN 172Efficient Spiking Neural Network framework, built on top of PyTorch for GPU acceleration.\nPyTorch" + }, + { + num: NumberInt("2547"), + value: "pytorch weights_pruning 172PyTorch Implementation of Weights PruningPyTorch" + }, + { + num: NumberInt("2548"), + value: "fenchel-young-losses 171Probabilistic classification in PyTorch/TensorFlow/scikit-learn with Fenchel-Young losses\nPyTorch" + }, + { + num: NumberInt("2549"), + value: "ChainerUI 171ChainerUI is a visualization and management tool for Chainer.\nChainer" + }, + { + num: NumberInt("2550"), + value: "pytorch-retraining 168Transfer Learning Shootout for PyTorch's model zoo (torchvision)\nPyTorch" + }, + { + num: NumberInt("2551"), + value: "vqa-winner-cvprw-2017 167Pytorch Implementation of winner from VQA Chllange Workshop in CVPR'17. \nPyTorch" + }, + { + num: NumberInt("2552"), + value: "convolution vision transformers 167PyTorch Implementation of CvT: Introducing Convolutions to Vision TransformersPyTorch" + }, + { + num: NumberInt("2553"), + value: "A Hierarchical Latent Structure for Variational Conversation Modeling 167PyTorch Implementation of \"A Hierarchical Latent Structure for Variational Conversation Modeling\" (NAACL 2018 Oral)PyTorch" + }, + { + num: NumberInt("2554"), + value: "chainer-char-rnn 167Recurrent neural network (RNN)\nChainer" + }, + { + num: NumberInt("2555"), + value: "skip-gram-pytorch 166A complete pytorch implementation of skipgram model (with subsampling and negative sampling). The embedding result is tested with Spearman's rank correlation.\nPyTorch" + }, + { + num: NumberInt("2556"), + value: "distance-encoding 166Distance-Encoding - Design Provably More PowerfulGNNs for Structural Representation Learning.\nPyTorch" + }, + { + num: NumberInt("2557"), + value: "Pytorch-Sketch-RNN 165A pytorch implementation of arxiv.org/abs/1704.03477\nPyTorch" + }, + { + num: NumberInt("2558"), + value: "fmpytorch 165A PyTorch implementation of a Factorization Machine module in cython.\nPyTorch" + }, + { + num: NumberInt("2559"), + value: "visual-interaction-networks-pytorch 165This's an implementation of deepmind Visual Interaction Networks paper using pytorch\nPyTorch" + }, + { + num: NumberInt("2560"), + value: "transducer 163A Fast Sequence Transducer Implementation with PyTorch Bindings.\nPyTorch" + }, + { + num: NumberInt("2561"), + value: "QuCumber 162Neural Network Many-Body Wavefunction Reconstruction\nPyTorch" + }, + { + num: NumberInt("2562"), + value: "DeepLabV3_Plus Tensorflow2.0 159DeepLabV3+ implemented in TensorFlow2.0TensorFlow" + }, + { + num: NumberInt("2563"), + value: "e2e-model-learning 159Task-based end-to-end model learning. \nPyTorch" + }, + { + num: NumberInt("2564"), + value: "Bert BiLSTM CRF pytorch 158bert-bilstm-crf implemented in pytorch for named entity recognition.PyTorch" + }, + { + num: NumberInt("2565"), + value: "CompactBilinearPooling-Pytorch v2 157(Yang Gao, et al.) A Pytorch Implementation for Compact Bilinear Pooling.\nPyTorch" + }, + { + num: NumberInt("2566"), + value: "piggyback 157Code for Piggyback: Adapting a Single Network to Multiple Tasks by Learning to Mask Weights arxiv.org/abs/1801.06519\nPyTorch" + }, + { + num: NumberInt("2567"), + value: "lookahead_pytorch 157pytorch implement of Lookahead OptimizerPyTorch" + }, + { + num: NumberInt("2568"), + value: "UntrimmedNets 156We provide the code and models for our CVPR paper (Arxiv Preprint):Caffe" + }, + { + num: NumberInt("2569"), + value: "pytorch-pose-estimation 156PyTorch Implementation of Realtime Multi-Person Pose Estimation project.\nPyTorch" + }, + { + num: NumberInt("2570"), + value: "Real-time style transfer 156This is an attempt at implementing something like Real-Time Style TransferKeras" + }, + { + num: NumberInt("2571"), + value: "rainbow 155A PyTorch implementation of Rainbow DQN agentPyTorch" + }, + { + num: NumberInt("2572"), + value: "SENet 155A MXNet implementation of Squeeze-and-Excitation Networks MXNet" + }, + { + num: NumberInt("2573"), + value: "FractalNet 155I built this network as stated in the paper but fractals are done iterative instead of functional to avoid the extra complexity when merging the fractals.Keras" + }, + { + num: NumberInt("2574"), + value: "gccpm look into person cvpr19.pytorch 154Fast and accurate single-person pose estimation, ranked 10th at CVPR'19 LIP challenge. Contains implementation of \"Global Context for Convolutional Pose Machines\" paper.PyTorch" + }, + { + num: NumberInt("2575"), + value: "FCN-pytorch-easiest 153Trying to be the most easiest and just get-to-use pytorch implementation of FCN (Fully Convolotional Networks)\nPyTorch" + }, + { + num: NumberInt("2576"), + value: "caffe_to_torch_to_pytorch 151[x] Convert caffe model to pytorch modelPyTorch" + }, + { + num: NumberInt("2577"), + value: "deep Q networks 150Implementations of algorithms from the Q-learning family. Implementations inlcude: DQN, DDQN, Dueling DQN, PER+DQN, Noisy DQN, C51PyTorch" + }, + { + num: NumberInt("2578"), + value: "CNN sentence classification pytorch 149Implementation of Convolutional Neural Networks for Sentence Classification (Y.Kim, EMNLP 2014) on Pytorch.PyTorch" + }, + { + num: NumberInt("2579"), + value: "functional transformer 148A pure-functional implementation of a machine learning transformer model in Python/JAXJAX" + }, + { + num: NumberInt("2580"), + value: "Attentive Object Tracking 147Implementation of \"Hierarchical Attentive Recurrent Tracking\"\nTensorFlow" + }, + { + num: NumberInt("2581"), + value: "Attentive Recurrent Comparators 147PyTorch implementation of Attentive Recurrent Comparators by Shyam et al.PyTorch" + }, + { + num: NumberInt("2582"), + value: "HyperNetworks 147PyTorch implementation of HyperNetworks (Ha et al., ICLR 2017) for ResNet (Residual Networks)PyTorch" + }, + { + num: NumberInt("2583"), + value: "MobileNet 146This is a MXNet implementation of Google's MobileNets.MXNet" + }, + { + num: NumberInt("2584"), + value: "ewc.pytorch 145An implementation of Elastic Weight Consolidation (EWC), proposed in James Kirkpatrick et al. Overcoming catastrophic forgetting in neural networks 2016(10.1073/pnas.1611835114).\nPyTorch" + }, + { + num: NumberInt("2585"), + value: "deep-forecast-pytorch 144Wind Speed Prediction using LSTMs in PyTorch (arxiv.org/pdf/1707.08110.pdf)\nPyTorch" + }, + { + num: NumberInt("2586"), + value: "bi lstm crf 144 A PyTorch implementation of the BI-LSTM-CRF model.PyTorch" + }, + { + num: NumberInt("2587"), + value: "pytorch auto augment 143PyTorch implementation of AutoAugment.PyTorch" + }, + { + num: NumberInt("2588"), + value: "bigBatch 142Code used to generate the results appearing in \"Train longer, generalize better: closing the generalization gap in large batch training of neural networks\" \nPyTorch" + }, + { + num: NumberInt("2589"), + value: "Wide Residual Networks 141This repo contains the code to run Wide Residual Networks using Keras.Keras" + }, + { + num: NumberInt("2590"), + value: "StackNN 140A PyTorch implementation of differentiable stacks for use in neural networks.\nPyTorch" + }, + { + num: NumberInt("2591"), + value: "pytorch-sift 140PyTorch implementation of SIFT descriptor. \nPyTorch" + }, + { + num: NumberInt("2592"), + value: "bayes by backprop 140PyTorch implementation of \"Weight Uncertainty in Neural Networks\"PyTorch" + }, + { + num: NumberInt("2593"), + value: "word2vec pytorch 140Extremely simple and fast word2vec implementation with Negative Sampling + Sub-samplingPyTorch" + }, + { + num: NumberInt("2594"), + value: "DeepPose TensorFlow 139TensorFlow implementation of DeepPose.\nTensorFlow" + }, + { + num: NumberInt("2595"), + value: "pytorch-prunes 139Pruning neural networks: is it time to nip it in the bud?\nPyTorch" + }, + { + num: NumberInt("2596"), + value: "Deep Networks with Stochastic Depth 139Keras implementation for \"Deep Networks with Stochastic Depth\" http://arxiv.org/abs/1603.09382Keras" + }, + { + num: NumberInt("2597"), + value: "pytorch_convlstm 138convolutional lstm implementation in pytorchPyTorch" + }, + { + num: NumberInt("2598"), + value: "neural style transfer 135An introduction to PyTorch through the Neural-Style algorithm (https://arxiv.org/abs/1508.06576) developed by Leon A. Gatys, Alexander S. Ecker and Matthias Bethge. \nPyTorch" + }, + { + num: NumberInt("2599"), + value: "pytorch-smoothgrad 135SmoothGrad implementation in PyTorch\nPyTorch" + }, + { + num: NumberInt("2600"), + value: "AOGNet 135This repository contains the code (in MXNet) for: \"AOGNets: Deep AND-OR Grammar Networks for Visual Recognition\" paper by Xilai Li, Tianfu Wu*, Xi Song and Hamid Krim.MXNet" + }, + { + num: NumberInt("2601"), + value: "Smile detection with a CNN 135Smile Detection with a Deep Convolutional Neural Net using Keras.Keras" + }, + { + num: NumberInt("2602"), + value: "FaceDetection-ConvNet-3D 134Yunzhu Li, Benyuan Sun, Tianfu Wu and Yizhou Wang, \"Face Detection with End-to-End Integration of a ConvNet and a 3D Model\", ECCV 2016 (https://arxiv.org/abs/1606.00850)MXNet" + }, + { + num: NumberInt("2603"), + value: "cifar10 134Cifar10\nChainer" + }, + { + num: NumberInt("2604"), + value: "deep-auto-punctuation 133A pytorch implementation of auto-punctuation learned character by character. \nPyTorch" + }, + { + num: NumberInt("2605"), + value: "Knowledge Aware Reader 133PyTorch implementation of the ACL 2019 paper \"Improving Question Answering over Incomplete KBs with Knowledge-Aware Reader\"PyTorch" + }, + { + num: NumberInt("2606"), + value: "ResNet 132Clean, scalable and easy to use ResNet implementation in PytorchPyTorch" + }, + { + num: NumberInt("2607"), + value: "FCNT 131FCNT is an online visual tracking algorithm using fully convolutional neural networks.Caffe" + }, + { + num: NumberInt("2608"), + value: "torch gqn 131PyTorch Implementation of Generative Query NetworkPyTorch" + }, + { + num: NumberInt("2609"), + value: "CNN-LSTM-CTC(Gluon:star 131import mathMXNet" + }, + { + num: NumberInt("2610"), + value: "pix2pix 131Chainer implementation of pix2pix\nChainer" + }, + { + num: NumberInt("2611"), + value: "Neural Decision Forests 130An implementation of the Deep Neural Decision Forests in PyTorchPyTorch" + }, + { + num: NumberInt("2612"), + value: "GoogleNet-V2 129This model is a re-implementation of Batch Normalization publication, and the model is trained with a customized caffe; however, the modifications are minor.Caffe" + }, + { + num: NumberInt("2613"), + value: "DeepBox 127Created by Weicheng Kuo at UC BerkeleyCaffe" + }, + { + num: NumberInt("2614"), + value: "integrated-gradient-pytorch 127This is the pytorch implementation of the paper - Axiomatic Attribution for Deep Networks.\nPyTorch" + }, + { + num: NumberInt("2615"), + value: "logger 126A simple logger for experiments.\nPyTorch" + }, + { + num: NumberInt("2616"), + value: "Dynamic memory networks plus Pytorch 124Implementation of Dynamic memory networks plus in PytorchPyTorch" + }, + { + num: NumberInt("2617"), + value: "Realtime Multi-Person Pose Estimation 124You can download mxnet model and parameters(coco and MPII) from google drive:MXNet" + }, + { + num: NumberInt("2618"), + value: "MSG-Net(Gluon:star 123This repo has been included in official MXNet repo, which provides the implementations of MSG-Net and Neural Style Transfer.MXNet" + }, + { + num: NumberInt("2619"), + value: "RNN-Transducer 123MXNET GPU version of RNN Transducer loss is now available !MXNet" + }, + { + num: NumberInt("2620"), + value: "doomnet 122PyTorch's version of Doom-net implementing some RL models in ViZDoom environment. \nPyTorch" + }, + { + num: NumberInt("2621"), + value: "binary-wide-resnet 122PyTorch implementation of Wide Residual Networks with 1-bit weights by McDonnel (ICLR 2018)\nPyTorch" + }, + { + num: NumberInt("2622"), + value: "DenseNet 121This is a MXNet implementation of DenseNet-BC architecture as described in the paper Densely Connected Convolutional Networks by Gao Huang, Zhuang Liu, Kilian Q.MXNet" + }, + { + num: NumberInt("2623"), + value: "pytorch_NEG_loss 120NEG loss implemented in pytorch. \nPyTorch" + }, + { + num: NumberInt("2624"), + value: "lstms.pth 120PyTorch implementations of LSTM Variants (Dropout + Layer Norm)PyTorch" + }, + { + num: NumberInt("2625"), + value: "3D Action recognition 120PyTorch implementation of Two-stream CNN for 3D action recognitionPyTorch" + }, + { + num: NumberInt("2626"), + value: "radio-transformer-networks 119A PyTorch implementation of Radio Transformer Networks from the paper \"An Introduction to Deep Learning for the Physical Layer\". arxiv.org/abs/1702.00832\nPyTorch" + }, + { + num: NumberInt("2627"), + value: "mixup_pytorch 119A PyTorch implementation of the paper Mixup: Beyond Empirical Risk Minimization in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2628"), + value: "Keras Realtime Multi-Person Pose Estimation 118Keras version of Realtime Multi-Person Pose Estimation project.\nKeras" + }, + { + num: NumberInt("2629"), + value: "NoisyNaturalGradient 117Pytorch Implementation of paper \"Noisy Natural Gradient as Variational Inference\". \nPyTorch" + }, + { + num: NumberInt("2630"), + value: "pytorch_convolutional_rnn 117PyTorch implementation of Convolutional Recurrent Neural NetworkPyTorch" + }, + { + num: NumberInt("2631"), + value: "Draw like Bob Ross 116pip install -r requirements.txtPyTorch" + }, + { + num: NumberInt("2632"), + value: "pytorch-extension 115This is a CUDA extension for PyTorch which computes the Hadamard product of two tensors.\nPyTorch" + }, + { + num: NumberInt("2633"), + value: "DSSD+TDM 114An MXNet implementation of DSSD : Deconvolutional Single Shot Detector.MXNet" + }, + { + num: NumberInt("2634"), + value: "DepthNet 113PyTorch DepthNet Training on Still Box dataset. \nPyTorch" + }, + { + num: NumberInt("2635"), + value: "minimal_glo 113Minimal PyTorch implementation of Generative Latent Optimization from the paper \"Optimizing the Latent Space of Generative Networks\"\nPyTorch" + }, + { + num: NumberInt("2636"), + value: "dni 112Implement Decoupled Neural Interfaces using Synthetic Gradients in Pytorch\nPyTorch" + }, + { + num: NumberInt("2637"), + value: "nmn-pytorch 112Neural Module Network for VQA in Pytorch.\nPyTorch" + }, + { + num: NumberInt("2638"), + value: "SRDenseNet-pytorch 112SRDenseNet-pytorch(ICCV_2017)\nPyTorch" + }, + { + num: NumberInt("2639"), + value: "NALU 112Basic pytorch implementation of NAC/NALU from Neural Arithmetic Logic Units paper by trask et.al arxiv.org/pdf/1808.00508.pdf\nPyTorch" + }, + { + num: NumberInt("2640"), + value: "memory efficient attention 112Memory Efficient Attention (O(sqrt(n)) for Jax and PyTorchJAX" + }, + { + num: NumberInt("2641"), + value: "A3C-PyTorch 111@inproceedings{mnih2016asynchronous,PyTorch" + }, + { + num: NumberInt("2642"), + value: "macarico 111Learning to search in pytorch\nPyTorch" + }, + { + num: NumberInt("2643"), + value: "interaction_network_pytorch 109Pytorch Implementation of Interaction Networks for Learning about Objects, Relations and Physics.\nPyTorch" + }, + { + num: NumberInt("2644"), + value: "PyTorch_GBW_LM 109PyTorch Language Model for Google Billion Word Dataset.\nPyTorch" + }, + { + num: NumberInt("2645"), + value: "neural-dream 109A PyTorch implementation of the DeepDream algorithm. Creates dream-like hallucinogenic visuals.\nPyTorch" + }, + { + num: NumberInt("2646"), + value: "meProp 108Codes for \"meProp: Sparsified Back Propagation for Accelerated Deep Learning with Reduced Overfitting\".\nPyTorch" + }, + { + num: NumberInt("2647"), + value: "Probabilistic Programming and Statistical Inference in PyTorch 108Probabilistic Programming and Statistical Inference in PyTorch.PyTorch" + }, + { + num: NumberInt("2648"), + value: "perceiver io 108Unofficial implementation of Perceiver IOPyTorch" + }, + { + num: NumberInt("2649"), + value: "EigenDamage-Pytorch 107Official implementation of the ICML'19 paper \"EigenDamage: Structured Pruning in the Kronecker-Factored Eigenbasis\".\nPyTorch" + }, + { + num: NumberInt("2650"), + value: "pytorch multi class focal loss 107An (unofficial) implementation of Focal Loss, as described in the RetinaNet paper, generalized to the multi-class case.PyTorch" + }, + { + num: NumberInt("2651"), + value: "Head Pose 107This is a python/mxnet implementation of a very simple CNN that predicts the head poseMXNet" + }, + { + num: NumberInt("2652"), + value: "BIMPM pytorch 106Re-implementation of BIMPM (Bilateral Multi-Perspective Matching for Natural Language Sentences, Zhiguo Wang et al.) on Pytorch.PyTorch" + }, + { + num: NumberInt("2653"), + value: "lang-emerge-parlai 105Implementation of EMNLP 2017 Paper \"Natural Language Does Not Emerge 'Naturally' in Multi-Agent Dialog\" using PyTorch and ParlAI\nPyTorch" + }, + { + num: NumberInt("2654"), + value: "Torchelie 105Torchélie is a set of utility functions, layers, losses, models, trainers and other things for PyTorch. torchelie.readthedocs.org \nPyTorch" + }, + { + num: NumberInt("2655"), + value: "TreeLSTMSentiment 105Pytorch implementation of Sentiment Classification in Improved Semantic Representations From Tree-Structured Long Short-Term Memory NetworksPyTorch" + }, + { + num: NumberInt("2656"), + value: "BiLSTM CRF NER PyTorch 105This repo contains a PyTorch implementation of a BiLSTM-CRF model for named entity recognition task.PyTorch" + }, + { + num: NumberInt("2657"), + value: "CoordConv 104Pytorch implementation of \"An intriguing failing of convolutional neural networks and the CoordConv solution\" - https://arxiv.org/abs/1807.03247PyTorch" + }, + { + num: NumberInt("2658"), + value: "Wide Residual Networks 104Implementation of Wide Residual Networks from the paper Wide Residual Networks in Keras.Keras" + }, + { + num: NumberInt("2659"), + value: "CaptchaRecognition 103End-to-end variable length Captcha recognition using CNN+RNN+Attention/CTC (pytorch implementation). PyTorch" + }, + { + num: NumberInt("2660"), + value: "Match LSTM 103A PyTorch implemention of Match-LSTM, R-NET and M-Reader for Machine Reading ComprehensionPyTorch" + }, + { + num: NumberInt("2661"), + value: "TDD 101Here we provide the code for the extraction of Trajectory-Pooled Deep-Convolutional Descriptors (TDD), from the following paper:Caffe" + }, + { + num: NumberInt("2662"), + value: "mixup 101This is an implement and Improvement on mixup: Beyond Empirical Risk Minimization https://arxiv.org/abs/1710.09412MXNet" + }, + { + num: NumberInt("2663"), + value: "binary_net 101BinaryNet\nChainer" + }, + { + num: NumberInt("2664"), + value: "deep-dream-in-pytorch 100Pytorch implementation of the DeepDream computer vision algorithm. \nPyTorch" + }, + { + num: NumberInt("2665"), + value: "torch-metrics 99Metrics for model evaluation in pytorch\nPyTorch" + }, + { + num: NumberInt("2666"), + value: "toward controlled generation of text pytorch 99A PyTorch Implementation of \"Toward Controlled Generation of Text\"PyTorch" + }, + { + num: NumberInt("2667"), + value: "mia 98A library for running membership inference attacks against ML models. \nPyTorch" + }, + { + num: NumberInt("2668"), + value: "FedNova 97PyTorch implementation of FedNova (NeurIPS 2020), and a class of federated learning algorithms, including FedAvg, FedProx.PyTorch" + }, + { + num: NumberInt("2669"), + value: "sam.pytorch 96A PyTorch implementation of Sharpness-Aware Minimization for Efficiently Improving GeneralizationPyTorch" + }, + { + num: NumberInt("2670"), + value: "Ladder Network 95This is an implementation of Ladder Network in Keras.TensorFlow" + }, + { + num: NumberInt("2671"), + value: "Tiny Face (original detector) 95This is an inference-only implementation for MXNet of tiny face.MXNet" + }, + { + num: NumberInt("2672"), + value: "faux jax 95NO MORE MAINTAINED: Intercept and respond to requests in the browser (AJAX) and Node.js (http(s) module)JAX" + }, + { + num: NumberInt("2673"), + value: "Highway Networks 94This is sample code for convolutional Highway Networks, implemented in Caffe checked out at this state.Caffe" + }, + { + num: NumberInt("2674"), + value: "rl-multishot-reid 94Multi-shot Re-identificationMXNet" + }, + { + num: NumberInt("2675"), + value: "wavenet 94Wavenet\nChainer" + }, + { + num: NumberInt("2676"), + value: "Whale Detector 92So, this repository is my PyTorch solution for the Kaggle whale-detection challenge.PyTorch" + }, + { + num: NumberInt("2677"), + value: "pytorch-mcn 92Convert models from MatConvNet to PyTorch\nPyTorch" + }, + { + num: NumberInt("2678"), + value: "SSD Text Detection 92This is a modified SSD model for text detection.MXNet" + }, + { + num: NumberInt("2679"), + value: "QANet pytorch 91A Pytorch implementation of QANetPyTorch" + }, + { + num: NumberInt("2680"), + value: "pytorch-NeuCom 90Pytorch implementation of DeepMind's differentiable neural computer paper. \nPyTorch" + }, + { + num: NumberInt("2681"), + value: "GoEmotions pytorch 90Pytorch Implementation of GoEmotions PyTorch" + }, + { + num: NumberInt("2682"), + value: "kmeans_pytorch 90pytorch implementation of basic kmeans algorithm(lloyd method with forgy initialization) with gpu supportPyTorch" + }, + { + num: NumberInt("2683"), + value: "sdtw_pytorch 90Implementation of soft dynamic time warping in pytorchPyTorch" + }, + { + num: NumberInt("2684"), + value: "Groundbreaking Papers 90ML Research paper summaries, annotated papers and implementation walkthroughsPyTorch" + }, + { + num: NumberInt("2685"), + value: "jax rs moshi 90A JAX-RS message body reader/writer and parameter converter which uses Moshi to handle JSONJAX" + }, + { + num: NumberInt("2686"), + value: "BPR pytorch 89A pytorch implementation for BPR (Bayesian Personalized Ranking).PyTorch" + }, + { + num: NumberInt("2687"), + value: "Extremely Fine Grained Entity Typing 89PyTorch implementation of our paper \"Imposing Label-Relational Inductive Bias for Extremely Fine-Grained Entity Typing\" (NAACL19)PyTorch" + }, + { + num: NumberInt("2688"), + value: "pt sdae 86PyTorch implementation of SDAE (Stacked Denoising AutoEncoder)PyTorch" + }, + { + num: NumberInt("2689"), + value: "muzero 86A simple implementation of MuZero algorithm for connect4 gamePyTorch" + }, + { + num: NumberInt("2690"), + value: "pytorch tree lstm 85Pytorch implementation of the child-sum Tree-LSTM modelPyTorch" + }, + { + num: NumberInt("2691"), + value: "torch_sampling 85Efficient reservoir sampling implementation for PyTorchPyTorch" + }, + { + num: NumberInt("2692"), + value: "Real time Text Detection DBNet 84PyTorch re-implementation of ''Real-time Scene Text Detection with Differentiable Binarization'' (AAAI 2020)PyTorch" + }, + { + num: NumberInt("2693"), + value: "FFTNet 83Unofficial Implementation of FFTNet vocode paper.\nPyTorch" + }, + { + num: NumberInt("2694"), + value: "triplet reid pytorch 83My implementation of the paper [In Defense of the Triplet Loss for Person Re-Identification]PyTorch" + }, + { + num: NumberInt("2695"), + value: "pytorch-fitmodule 82Super simple fit method for PyTorch modules\nPyTorch" + }, + { + num: NumberInt("2696"), + value: "maskrcnn_benchmark.cpp 82Implementation maskrcnn-benchmark, pytorch c++ frontendPyTorch" + }, + { + num: NumberInt("2697"), + value: "Neural-Style-MMD 81This repository holds the MXNet code for the paperMXNet" + }, + { + num: NumberInt("2698"), + value: "sqeezenet 80Implementation of Squeezenet in pytorch, #### pretrained models on CIFAR10 data to come Plan to train the model on cifar 10 and add block connections too. \nPyTorch" + }, + { + num: NumberInt("2699"), + value: "LOLA_DiCE 79Pytorch implementation of LOLA (arxiv.org/abs/1709.04326) using DiCE (arxiv.org/abs/1802.05098)\nPyTorch" + }, + { + num: NumberInt("2700"), + value: "PyTorch Radial Basis Function Layer 79An implementation of an RBF layer/module using PyTorch.PyTorch" + }, + { + num: NumberInt("2701"), + value: "ADMM 79Implemented ADMM for solving convex optimization problems such as Lasso, Ridge regressionPyTorch" + }, + { + num: NumberInt("2702"), + value: "pytorch_TDNN 78Time Delayed NN implemented in pytorch. \nPyTorch" + }, + { + num: NumberInt("2703"), + value: "molencoder 78Molecular AutoEncoder in PyTorch\nPyTorch" + }, + { + num: NumberInt("2704"), + value: "NASNet-A-Mobile. Ported weights 78The goal of this repo is:PyTorch" + }, + { + num: NumberInt("2705"), + value: "Deep Belief Network pytorch 78This repository has implementation and tutorial for Deep Belief NetworkPyTorch" + }, + { + num: NumberInt("2706"), + value: "PyTorch-value-iteration-networks 77PyTorch implementation of the Value Iteration Networks (NIPS '16) paper \nPyTorch" + }, + { + num: NumberInt("2707"), + value: "quantile-regression-dqn-pytorch 77Quantile Regression DQN a Minimal Working Example\nPyTorch" + }, + { + num: NumberInt("2708"), + value: "DropBlock pytorch 77Implementation of DropBlock in PytorchPyTorch" + }, + { + num: NumberInt("2709"), + value: "yolo_v1_pytorch 77PyTorch implementation of YOLO-v1 including training PyTorch" + }, + { + num: NumberInt("2710"), + value: "EPSR 76Pytorch implementation of Analyzing Perception-Distortion Tradeoff using Enhanced Perceptual Super-resolution Network. This work has won the first place in PIRM2018-SR competition (region 1) held as part of the ECCV 2018.\nPyTorch" + }, + { + num: NumberInt("2711"), + value: "mxnet-model 76MXNet models (only classification for now) and deploy prototxt for resnet, resnext, inception_v3, inception_v4, inception_resnet, wider_resnet, densenet, DPNs and other networks.MXNet" + }, + { + num: NumberInt("2712"), + value: "E2FAR 76This is a MXNet/Gluon Implementation of End-to-end 3D Face Reconstruction with Deep Neural Networks.MXNet" + }, + { + num: NumberInt("2713"), + value: "PSPNet 76Pyramid Scene Parsing Network\nChainer" + }, + { + num: NumberInt("2714"), + value: "imsat 76IMSAT\nChainer" + }, + { + num: NumberInt("2715"), + value: "cogitare 75Cogitare - A Modern, Fast, and Modular Deep Learning and Machine Learning framework in Python. \nPyTorch" + }, + { + num: NumberInt("2716"), + value: "pathnet pytorch 75PyTorch implementation of PathNet: Evolution Channels Gradient Descent in Super Neural NetworksPyTorch" + }, + { + num: NumberInt("2717"), + value: "pytorch_Highway 74Highway network implemented in pytorch.\nPyTorch" + }, + { + num: NumberInt("2718"), + value: "pytorch model parallel 74A memory balanced and communication efficient FullyConnected layer with CrossEntropyLoss model parallel implementation in PyTorchPyTorch" + }, + { + num: NumberInt("2719"), + value: "Federated Averaging PyTorch 74An unofficial PyTorch implementation of a federated learning algorithm, FedAvg.PyTorch" + }, + { + num: NumberInt("2720"), + value: "scalingscattering 73Scaling The Scattering Transform : Deep Hybrid Networks. \nPyTorch" + }, + { + num: NumberInt("2721"), + value: "pytorch_ard 73Pytorch implementation of Variational Dropout Sparsifies Deep Neural NetworksPyTorch" + }, + { + num: NumberInt("2722"), + value: "**CTPN.mxnet** 73A MXNet CTPN implementation mimic of eragonruan's tensorflow implementation with full feature.MXNet" + }, + { + num: NumberInt("2723"), + value: "Character-level convolutional neural nets for text classification 72This is an re-implementation of theKeras" + }, + { + num: NumberInt("2724"), + value: "torchcraft-py 71Python wrapper for TorchCraft, a bridge between Torch and StarCraft for AI research.\nPyTorch" + }, + { + num: NumberInt("2725"), + value: "jax rs kotlinx serialization 71A JAX-RS message body reader/writer and parameter converter which uses Kotlinx SerializationJAX" + }, + { + num: NumberInt("2726"), + value: "entropy sgd 70Lua implementation of Entropy-SGDPyTorch" + }, + { + num: NumberInt("2727"), + value: "nninit 69Weight initialization schemes for PyTorch nn.Modules. This is a port of the popular nninit for Torch7 by @kaixhin. \nPyTorch" + }, + { + num: NumberInt("2728"), + value: "pedestrian attribute recognition with GCN 69Pytorch implementation of pedestrian attribute recognition with graph convolutional networkPyTorch" + }, + { + num: NumberInt("2729"), + value: "kaggle_CIFAR10 69kaggle CIFAR10 compitition code, implement by mxnet gluon.MXNet" + }, + { + num: NumberInt("2730"), + value: "SINE 68This is a Pytorch implementation of SINE: Scalable Incomplete Network Embedding. ICDM 2018.\nPyTorch" + }, + { + num: NumberInt("2731"), + value: "candlegp 68Gaussian Processes in Pytorch. \nPyTorch" + }, + { + num: NumberInt("2732"), + value: "Neural Attentive Session Based Recommendation PyTorch 68A PyTorch implementation of Neural Attentive Session Based Recommendation (NARM)PyTorch" + }, + { + num: NumberInt("2733"), + value: "Recurrent Neural Networks for Sentiment Analysis (Aspect-Based) on SemEval 2014 67Pytorch Example For Aspect-based Sentiment Analysis with RNN / GRUs / LSTMs on SemEval 2014.PyTorch" + }, + { + num: NumberInt("2734"), + value: "RoIAlign RoIPool pytorch 66C++ extension implementation of RoIAlign & RolPool (both GPU and CPU) for PyTorchPyTorch" + }, + { + num: NumberInt("2735"), + value: "graph-cnn 66Chainer implementation of 'Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering' (https://arxiv.org/abs/1606.09375)\nChainer" + }, + { + num: NumberInt("2736"), + value: "DRQN 65DQN-in-the-Caffe is an implementation of Deep Q-Network using Caffe.Caffe" + }, + { + num: NumberInt("2737"), + value: "shampoo.pytorch 65An implementation of shampoo.\nPyTorch" + }, + { + num: NumberInt("2738"), + value: "CSPN_monodepth 65Unofficial Faster PyTorch implementation of Convolutional Spatial Propagation NetworkPyTorch" + }, + { + num: NumberInt("2739"), + value: "MoChA pytorch 65PyTorch Implementation of \"Monotonic Chunkwise Attention\" (ICLR 2018)PyTorch" + }, + { + num: NumberInt("2740"), + value: "Factorized-Bilinear-Network 65This repository holds the MXNet code for the paper:MXNet" + }, + { + num: NumberInt("2741"), + value: "chainer-ssd 65SSD\nChainer" + }, + { + num: NumberInt("2742"), + value: "DAGGER 64For Playing Gym Torcs\nTensorFlow" + }, + { + num: NumberInt("2743"), + value: "forward-thinking-pytorch 64Pytorch implementation of \"Forward Thinking: Building and Training Neural Networks One Layer at a Time\" https://arxiv.org/pdf/1706.02480.pdf \nPyTorch" + }, + { + num: NumberInt("2744"), + value: "CNN Based Text Classification 64A simple implementation of CNN based text classificationPyTorch" + }, + { + num: NumberInt("2745"), + value: "BTTR 63Official implementation for ICDAR 2021 best poster paper \"Handwritten Mathematical Expression Recognition with Bidirectionally Trained Transformer\"PyTorch" + }, + { + num: NumberInt("2746"), + value: "Deep Packet 63Pytorch implementation of deep packet: a novel approach for encrypted traffic classification using deep learningPyTorch" + }, + { + num: NumberInt("2747"), + value: "GE2E Loss 63Pytorch implementation of Generalized End-to-End Loss for speaker verificationPyTorch" + }, + { + num: NumberInt("2748"), + value: "Faster RCNN(Gluon:star 61ya_mxdet provides a simple Faster R-CNNMXNet" + }, + { + num: NumberInt("2749"), + value: "LSTNet 61This repo contains an MXNet implementation of this state of the art time series forecasting model.MXNet" + }, + { + num: NumberInt("2750"), + value: "aorun 60Aorun intend to be a Keras with PyTorch as backend. \nPyTorch" + }, + { + num: NumberInt("2751"), + value: "ko_en_NMT(Gluon:star 592018 .MXNet" + }, + { + num: NumberInt("2752"), + value: "chainer-visualization 59Visualizing and Understanding Convolutional Networks\nChainer" + }, + { + num: NumberInt("2753"), + value: "Tor10 58A Generic Tensor-Network library that is designed for quantum simulation, base on the pytorch.\nPyTorch" + }, + { + num: NumberInt("2754"), + value: "srvp 58Official implementation of the paper Stochastic Latent Residual Video PredictionPyTorch" + }, + { + num: NumberInt("2755"), + value: "the clean transformer 58A clean and structured implementation of Transformer with pytorch-lightning and wandbPyTorch" + }, + { + num: NumberInt("2756"), + value: "pytorch deep sets 58PyTorch re-implementation of parts of \"Deep Sets\" (NIPS 2017)PyTorch" + }, + { + num: NumberInt("2757"), + value: "Attentive Neural Process 58A Pytorch Implementation of Attentive Neural ProcessPyTorch" + }, + { + num: NumberInt("2758"), + value: "Char-RNN(Gluon:star 58RNNMXNet-GluonPyTorchMXNet" + }, + { + num: NumberInt("2759"), + value: "pytorch_highway_networks 57Highway networks implemented in PyTorch. \nPyTorch" + }, + { + num: NumberInt("2760"), + value: "pnn.pytorch 57PyTorch implementation of CVPR'18 - Perturbative Neural Networks http://xujuefei.com/pnn.html.\nPyTorch" + }, + { + num: NumberInt("2761"), + value: "efficientdet.pytorch 57:neckbeard:Unofficial implementation of EfficientDetPyTorch" + }, + { + num: NumberInt("2762"), + value: "Highway Network 56TensorFlow implementation of \"Training Very Deep Networks\" with a blog post\nTensorFlow" + }, + { + num: NumberInt("2763"), + value: "binary-stochastic-neurons 55Binary Stochastic Neurons in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2764"), + value: "MalConv-Pytorch 55Pytorch implementation of MalConv. \nPyTorch" + }, + { + num: NumberInt("2765"), + value: "**Gluon Dynamic-batching**(Gluon:star 55This repository includes simplified implementation of Fold, a helper for dynamic batching.MXNet" + }, + { + num: NumberInt("2766"), + value: "chainer-ResNet 55ResNet\nChainer" + }, + { + num: NumberInt("2767"), + value: "chainer-gogh 55StyleNet (A Neural Algorithm of Artistic Style)\nChainer" + }, + { + num: NumberInt("2768"), + value: "diffdist 54Diffdist is a python library for pytorch. It extends the default functionality of torch.autograd and adds support for differentiable communication between processes. \nPyTorch" + }, + { + num: NumberInt("2769"), + value: "dfw 54Implementation of the Deep Frank-Wolfe Algorithm -- PytorchPyTorch" + }, + { + num: NumberInt("2770"), + value: "co attention 54Pytorch implementation of \"Dynamic Coattention Networks For Question Answering\"PyTorch" + }, + { + num: NumberInt("2771"), + value: "cat-net 53Canonical Appearance Transformations\nPyTorch" + }, + { + num: NumberInt("2772"), + value: "dpwa 53Distributed Learning by Pair-Wise Averaging. \nPyTorch" + }, + { + num: NumberInt("2773"), + value: "generative_zoo 53Generative_zoo is a repository that provides working implementations of some generative models in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2774"), + value: "psmm 52Imlementation of the the Pointer Sentinel Mixture Model, as described in the paper by Stephen Merity et al.\nPyTorch" + }, + { + num: NumberInt("2775"), + value: "osqpth 52The differentiable OSQP solver layer for PyTorch. \nPyTorch" + }, + { + num: NumberInt("2776"), + value: "Sentence similarity classifier for pyTorch 52Re-implementation of Mueller's et al., \"Siamese Recurrent Architectures for Learning Sentence Similarity.\" (AAAI, 2016)PyTorch" + }, + { + num: NumberInt("2777"), + value: "R BERT 52Pytorch re-implementation of R-BERT modelPyTorch" + }, + { + num: NumberInt("2778"), + value: "DarkRank 52This is the repo for our AAAI-18 paper \"DarkRank: Accelerating Deep Metric Learning via Cross Sample Similarities\" MXNet" + }, + { + num: NumberInt("2779"), + value: "Yelp Restaurant Photo Classifacation 52Description of the my approach to this problem was published on the Kaggle's blog.MXNet" + }, + { + num: NumberInt("2780"), + value: "mlp gpt jax 52A GPT, made only of MLPs, in JaxJAX" + }, + { + num: NumberInt("2781"), + value: "MXNet for CTR 51DCNN: A Convolutional Neural Network for Modelling Sentences MXNet" + }, + { + num: NumberInt("2782"), + value: "fast-rcnn 51Fast R-CNN\nChainer" + }, + { + num: NumberInt("2783"), + value: "CapsNet 50A pytorch implementation of Capsule Network.PyTorch" + }, + { + num: NumberInt("2784"), + value: "fluidnet_cxx 49FluidNet re-written with ATen tensor lib. \nPyTorch" + }, + { + num: NumberInt("2785"), + value: "pytorch extras 49Some extra features for pytorch. \nPyTorch" + }, + { + num: NumberInt("2786"), + value: "LSUV pytorch 49Simple implementation of the LSUV initialization in PyTorchPyTorch" + }, + { + num: NumberInt("2787"), + value: "crnn 49This repo contains code written by MXNet for ocr tasks, which uses an cnn-lstm-ctc architecture to do text recognition.MXNet" + }, + { + num: NumberInt("2788"), + value: "CDL 49This is the MXNet version of CDL used in the KDD 2016 hands-on tutorial for MXNet.MXNet" + }, + { + num: NumberInt("2789"), + value: "MobileNetV3 PyTorch 48A PyTorch implementation of MobileNetV3PyTorch" + }, + { + num: NumberInt("2790"), + value: "shake drop_pytorch 48PyTorch implementation of shake-drop regularizationPyTorch" + }, + { + num: NumberInt("2791"), + value: "reseg-pytorch 47PyTorch Implementation of ReSeg (arxiv.org/pdf/1511.07053.pdf)\nPyTorch" + }, + { + num: NumberInt("2792"), + value: "batchbald_redux 47Reusable BatchBALD implementationPyTorch" + }, + { + num: NumberInt("2793"), + value: "prunnable layers pytorch 47Prunable nn layers for pytorch.PyTorch" + }, + { + num: NumberInt("2794"), + value: "chinese word2vec pytorch 47word2vec implementation for skip-gram in pytorchPyTorch" + }, + { + num: NumberInt("2795"), + value: "crnn (with Chinese Support) 47crnn in mxnet.can train with chinese charactersMXNet" + }, + { + num: NumberInt("2796"), + value: "Deep-Leafsnap 46LeafSnap replicated using deep neural networks to test accuracy compared to traditional computer vision methods. \nPyTorch" + }, + { + num: NumberInt("2797"), + value: "CortexNet 46A Generic Network Family for Robust Visual Temporal Representations\nPyTorch" + }, + { + num: NumberInt("2798"), + value: "CRU-Net 46This repository contains the code and trained models of \"Sharing Residual Units Through Collective Tensor Factorization in Deep Neural Networks\".MXNet" + }, + { + num: NumberInt("2799"), + value: "TRPO 45For Continuous and Discrete Action Space by\nTensorFlow" + }, + { + num: NumberInt("2800"), + value: "diffmask 45Pytorch implementation of DiffMaskPyTorch" + }, + { + num: NumberInt("2801"), + value: "shake shake_pytorch 45PyTorch implementation of shake-shake regularizationPyTorch" + }, + { + num: NumberInt("2802"), + value: "mxnet-videoio 45MXNet RecI/O.MXNet" + }, + { + num: NumberInt("2803"), + value: "dropwizard jaxws 45Dropwizard bundle that enables building SOAP web services and clients using JAX-WS APIJAX" + }, + { + num: NumberInt("2804"), + value: "ram 44Recurrent Attention Model\nChainer" + }, + { + num: NumberInt("2805"), + value: "associative_compression_networks 43Associative Compression Networks for Representation Learning. \nPyTorch" + }, + { + num: NumberInt("2806"), + value: "Self Tuning Networks 43PyTorch implementation of \"STNs\" and \"Delta-STNs\"PyTorch" + }, + { + num: NumberInt("2807"), + value: "flow 42Pytorch implementation of ICLR 2018 paper Deep Learning for Physical Processes: Integrating Prior Scientific Knowledge.\nPyTorch" + }, + { + num: NumberInt("2808"), + value: "Contractive_Autoencoder_in_Pytorch 42Pytorch implementation of contractive autoencoder on MNIST datasetPyTorch" + }, + { + num: NumberInt("2809"), + value: "ShuffleNet 42to test on mnistMXNet" + }, + { + num: NumberInt("2810"), + value: "segnet 42SegNet implementation & experiments in Chainer\nChainer" + }, + { + num: NumberInt("2811"), + value: "segnet 42SegNet\nChainer" + }, + { + num: NumberInt("2812"), + value: "simple-fast-rnn 42Fast R-CNN\nChainer" + }, + { + num: NumberInt("2813"), + value: "AlexNet3D 41An implementations of AlexNet3D. Simple AlexNet model but with 3D convolutional layers (conv3d).\nTensorFlow" + }, + { + num: NumberInt("2814"), + value: "e2c-pytorch 41Embed to Control implementation in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2815"), + value: "pytorch_hmax 41Implementation of the HMAX model of vision in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2816"), + value: "pytorch-ctc 41PyTorch-CTC is an implementation of CTC (Connectionist Temporal Classification) beam search decoding for PyTorch. C++ code borrowed liberally from TensorFlow with some improvements to increase flexibility.\nPyTorch" + }, + { + num: NumberInt("2817"), + value: "StrassenNets 41Code to reproduce the experiments in the paper StrassenNets: Deep learning with a multiplication budget, M.MXNet" + }, + { + num: NumberInt("2818"), + value: "Character-level CNN Text Classification (Gluon:star 41This is an automated Markdown generation from the notebook 'Crepe-Gluon.ipynb'MXNet" + }, + { + num: NumberInt("2819"), + value: "pyTorch_NCE 40An implementation of the Noise Contrastive Estimation algorithm for pyTorch. Working, yet not very efficient.\nPyTorch" + }, + { + num: NumberInt("2820"), + value: "PyTorch AutoNEB 40PyTorch AutoNEB implementation to identify minimum energy paths, e.g. in neural network loss landscapesPyTorch" + }, + { + num: NumberInt("2821"), + value: "FacialLandmark 40Facial landmarks training by MXNet.MXNet" + }, + { + num: NumberInt("2822"), + value: "mlpnlp-nmt 40LSTM encoder-decoder with attention mechanism\nChainer" + }, + { + num: NumberInt("2823"), + value: "chainer-ResDrop 40ResDrop\nChainer" + }, + { + num: NumberInt("2824"), + value: "siamese 40Siamese Network\nChainer" + }, + { + num: NumberInt("2825"), + value: "chamfer_distance 39Implementation of the Chamfer Distance as a module for PyTorchPyTorch" + }, + { + num: NumberInt("2826"), + value: "pytorch charRNN 39Character RNN implemented in PyTorchPyTorch" + }, + { + num: NumberInt("2827"), + value: "Triplet deep hash pytorch 39Pytorch implementation of \"Fast Training of Triplet-based Deep Binary Embedding Networks\".PyTorch" + }, + { + num: NumberInt("2828"), + value: "LSTM to predict gender of a name 39Predict the gender of a name using LSTMKeras" + }, + { + num: NumberInt("2829"), + value: "chainer-DenseNet 39DenseNet\nChainer" + }, + { + num: NumberInt("2830"), + value: "Spatial Transformer Networks 38Learn the Transformation Function \nTensorFlow" + }, + { + num: NumberInt("2831"), + value: "proxprop 37Proximal Backpropagation - a neural network training algorithm that takes implicit instead of explicit gradient steps.\nPyTorch" + }, + { + num: NumberInt("2832"), + value: "hred py 37Pytorch implementation of Hierarchical Encoder Decoder Sequence to Sequence ModelPyTorch" + }, + { + num: NumberInt("2833"), + value: "TDNN 37PyTorch implementation of a Time Delay Neural Network (TDNN)PyTorch" + }, + { + num: NumberInt("2834"), + value: "SideWindowFilter 37The Pytorch Implementation of Side Window FilteringPyTorch" + }, + { + num: NumberInt("2835"), + value: "java jaxrs 37OpenTracing Java JAX-RS instrumentationJAX" + }, + { + num: NumberInt("2836"), + value: "ML Optimizers JAX 37Toy implementations of some popular ML optimizers using Python/JAXJAX" + }, + { + num: NumberInt("2837"), + value: "deep_alignment_network_pytorch 36PyTorch Implementation of the Deep Alignment NetworkPyTorch" + }, + { + num: NumberInt("2838"), + value: "netharn 35Parameterized fit and prediction harnesses for pytorch.\nPyTorch" + }, + { + num: NumberInt("2839"), + value: "abcnn_pytorch 35Implementation of ABCNN(Attention-Based Convolutional Neural Network) on PytorchPyTorch" + }, + { + num: NumberInt("2840"), + value: "pytorch nice 35Implementation of non-linear independent components estimation (NICE) in pytorchPyTorch" + }, + { + num: NumberInt("2841"), + value: "torch gel 35Group elastic net implementation in PyTorchPyTorch" + }, + { + num: NumberInt("2842"), + value: "pytorch minimal gaussian process 34A minimal implementation of Gaussian process regression in PyTorchPyTorch" + }, + { + num: NumberInt("2843"), + value: "PBAN PyTorch 33A Position-aware Bidirectional Attention Network for Aspect-level Sentiment Analysis, PyTorch implementation.PyTorch" + }, + { + num: NumberInt("2844"), + value: "mixup.pytorch 33an implementation of mixupPyTorch" + }, + { + num: NumberInt("2845"), + value: "Torchlite 32A high level library on top of(not only) Pytorch\nPyTorch" + }, + { + num: NumberInt("2846"), + value: "learning at home 32\"Towards Crowdsourced Training of Large Neural Networks using Decentralized Mixture-of-Experts\" (NeurIPS 2020), original PyTorch implementationPyTorch" + }, + { + num: NumberInt("2847"), + value: "U-Net(Gluon:star 32This is an Gluon reimplementation of U-Net.MXNet" + }, + { + num: NumberInt("2848"), + value: "eve.pytorch 31An implementation of Eve Optimizer, proposed in Imploving Stochastic Gradient Descent with Feedback, Koushik and Hayashi, 2016. \nPyTorch" + }, + { + num: NumberInt("2849"), + value: "zalando-pytorch 31Various experiments on the Fashion-MNIST dataset from Zalando.\nPyTorch" + }, + { + num: NumberInt("2850"), + value: "word2vec pytorch 31Implementation of the first paper on word2vecPyTorch" + }, + { + num: NumberInt("2851"), + value: "YOLO(Gluon:star 31implement the YOLO algorithm using MXNet/GluonMXNet" + }, + { + num: NumberInt("2852"), + value: "pt-styletransfer 30Neural style transfer as a class in PyTorch.\nPyTorch" + }, + { + num: NumberInt("2853"), + value: "pytorch hessianfree 30PyTorch implementation of Hessian Free optimisationPyTorch" + }, + { + num: NumberInt("2854"), + value: "CapsNet 30This example is MXNet implementation of CapsNet: MXNet" + }, + { + num: NumberInt("2855"), + value: "chainer_stylenet 30StyleNet (A Neural Algorithm of Artistic Style)\nChainer" + }, + { + num: NumberInt("2856"), + value: "OrthNet 29TensorFlow and PyTorch layers for generating Orthogonal Polynomials.\nPyTorch" + }, + { + num: NumberInt("2857"), + value: "mmi_anti_pytorch 29A pytorch implementation for the MMI-anti modelPyTorch" + }, + { + num: NumberInt("2858"), + value: "variational autoencoder 28PyTorch implementation of \"Auto-Encoding Variational Bayes\"PyTorch" + }, + { + num: NumberInt("2859"), + value: "spleeter pytorch 28Spleeter implementation in pytorchPyTorch" + }, + { + num: NumberInt("2860"), + value: "jax_muzero 28An implementation of MuZero in JAX.JAX" + }, + { + num: NumberInt("2861"), + value: "poisson-convolution-sum 27Implements an infinite sum of poisson-weighted convolutions\nPyTorch" + }, + { + num: NumberInt("2862"), + value: "PyTorch-docset 27PyTorch docset! use with Dash, Zeal, Velocity, or LovelyDocs. \nPyTorch" + }, + { + num: NumberInt("2863"), + value: "pytorch-cns 27Compressed Network Search with PyTorch\nPyTorch" + }, + { + num: NumberInt("2864"), + value: "neural-assembly-compiler 27A neural assembly compiler for pyTorch based on adaptive-neural-compilation. \nPyTorch" + }, + { + num: NumberInt("2865"), + value: "PINN 27Simple PyTorch Implementation of Physics Informed Neural Network (PINN)PyTorch" + }, + { + num: NumberInt("2866"), + value: "svm 27Support Vector Machine (SVM)\nChainer" + }, + { + num: NumberInt("2867"), + value: "jaxrs osgi extender 27An OSGi extender for declarative JAX-RS bundlesJAX" + }, + { + num: NumberInt("2868"), + value: "aries jax rs whiteboard 27Apache Aries JAX RS WhiteboardJAX" + }, + { + num: NumberInt("2869"), + value: "YOLOv3 GradCAM 26GradCAM algorithm implementation for YOLOv3PyTorch" + }, + { + num: NumberInt("2870"), + value: "Convolutional Neural Fabrics 25PyTorch implementation of Convolutional Neural Fabrics arxiv:1606.02492PyTorch" + }, + { + num: NumberInt("2871"), + value: "C3D LSTM PyTorch 25C3D-LSTM implementation in PyTorchPyTorch" + }, + { + num: NumberInt("2872"), + value: "OpenPose 25Note for a bug, stage2 and stage 4's output are noise, which has already been fixed.MXNet" + }, + { + num: NumberInt("2873"), + value: "sentiment-analysis(Gluon:star 25Sentiment Analysis with Apache MXNet and GluonMXNet" + }, + { + num: NumberInt("2874"), + value: "lgamma 24Implementations of polygamma, lgamma, and beta functions for PyTorch\nPyTorch" + }, + { + num: NumberInt("2875"), + value: "NonLocal+SENet 24Non-local Neural Networks (https://arxiv.org/abs/1711.07971)MXNet" + }, + { + num: NumberInt("2876"), + value: "VanillaCNN 24This is a mxnet implementation of the Vanilla CNN.MXNet" + }, + { + num: NumberInt("2877"), + value: "everrest 24everREST project it is RESTful application framework along with complete JAX-RS (JSR-311) implementationJAX" + }, + { + num: NumberInt("2878"), + value: "aws lambda servlet 24AWS Lambda adapter for Java's Servlets (and Jersey in particular, JAX-RS implementation)JAX" + }, + { + num: NumberInt("2879"), + value: "pyprob 23A PyTorch-based library for probabilistic programming and inference compilation.\nPyTorch" + }, + { + num: NumberInt("2880"), + value: "pix2code pytorch 23PyTorch implementation of pix2code. PyTorch" + }, + { + num: NumberInt("2881"), + value: "Multi Agent DDPG using PTtorch and ML Agents 23A simple example of how to implement vector based DDPG for MARL tasks using PyTorch and a ML-Agents environment.PyTorch" + }, + { + num: NumberInt("2882"), + value: "SSD+Focal Loss 23This is an unofficial implementation of Focal Loss (https://arxiv.org/abs/1708.02002).MXNet" + }, + { + num: NumberInt("2883"), + value: "Deeplab v2 23CaffeDeepLab v2-LargeFOVMXNet.MXNet" + }, + { + num: NumberInt("2884"), + value: "Federated Learning Implementations 22This repository contains all the implementation of different papers on Federated LearningPyTorch" + }, + { + num: NumberInt("2885"), + value: "Traffic sign classification 22In this notebook, we are going to classify german traffic sign using convolution neural network using mxnet.MXNet" + }, + { + num: NumberInt("2886"), + value: "AC-BLSTM 22MXNet Scala module implementation of my work AC-BLSTM[1].MXNet" + }, + { + num: NumberInt("2887"), + value: "wavenet 22I am trying to reproduce the WaveNet result using MXNet.MXNet" + }, + { + num: NumberInt("2888"), + value: "variational-autoencoder 22Semi-Supervised Learning with Deep Generative Models\nChainer" + }, + { + num: NumberInt("2889"), + value: "im2latex 21Pytorch implementation of math equation images to latex markup language.PyTorch" + }, + { + num: NumberInt("2890"), + value: "galapagos_nao 21_/laps na/_MXNet" + }, + { + num: NumberInt("2891"), + value: "jaxrs versioning 21A framework to version REST services with JAX-RSJAX" + }, + { + num: NumberInt("2892"), + value: "anuvada 20Interpretable Models for NLP using PyTorch.\nPyTorch" + }, + { + num: NumberInt("2893"), + value: "Xception 20This is a MXNet implementation of Xception architecture as described in the paper Xception: Deep Learning with Depthwise Separable Convolutions proposed by Franois Chollet at CVPR 2017 from google.MXNet" + }, + { + num: NumberInt("2894"), + value: "jax rs jersey application sample 20JAX-RS/Jersey JAX" + }, + { + num: NumberInt("2895"), + value: "nxparser 20Java parsers for different RDF serialisations + API + tools + JAX-RS integrationJAX" + }, + { + num: NumberInt("2896"), + value: "hashed_nets 19PyTorch implementation of HashedNetsPyTorch" + }, + { + num: NumberInt("2897"), + value: "SqueezeDet 19This repository is built in Python3.6.MXNet" + }, + { + num: NumberInt("2898"), + value: "Visual-Semantic Embedding 19Keras implementation of https://github.com/ryankiros/visual-semantic-embeddingKeras" + }, + { + num: NumberInt("2899"), + value: "jaxmapp 19JAX-based implementation for multi-agent path planning (MAPP) in continuous spaces.JAX" + }, + { + num: NumberInt("2900"), + value: "flink modelServer 18Generic Model Serving Implementation leveraging FlinkTensorFlow" + }, + { + num: NumberInt("2901"), + value: "DeepHumanPrediction 18A place to 'post' the progress of my master's thesis.MXNet" + }, + { + num: NumberInt("2902"), + value: "Sequential Matching Network(Gluon:star 18Sequential Matching Network(ACL 2017) reimplemented by MXNET1.0-GPU//but you can always use cpuMXNet" + }, + { + num: NumberInt("2903"), + value: "DEF(Gluon:star 18This is an implementation of deep exponential families in MXNet/Gluon.MXNet" + }, + { + num: NumberInt("2904"), + value: "JumpingJax 18A 3D platformer with roots in bunnyhopping and portal strategyJAX" + }, + { + num: NumberInt("2905"), + value: "YOLO/dark2mxnet 17This repo contains: MXNet" + }, + { + num: NumberInt("2906"), + value: "mx-pointnet 17This repository contains a MXNet implementation for the Pointnet.MXNet" + }, + { + num: NumberInt("2907"), + value: "PointCNN.MX 17This is a MXNet implementation of PointCNN.MXNet" + }, + { + num: NumberInt("2908"), + value: "conv-vis 17Convolution Filter Visualization\nChainer" + }, + { + num: NumberInt("2909"), + value: "jaxws spring 17JAX-WS integration with SpringJAX" + }, + { + num: NumberInt("2910"), + value: "Advanced ML techniques 16This repo contains implementation of advanced ML techniques. Includes model ensembles, cost-sensitive learning and dealing with class imbalance. TensorFlow" + }, + { + num: NumberInt("2911"), + value: "SDPoint 16Implementation of \"Stochastic Downsampling for Cost-Adjustable Inference and Improved Regularization in Convolutional Networks\", published in CVPR 2018. \nPyTorch" + }, + { + num: NumberInt("2912"), + value: "IMPALA pytorch 16PyTorch IMPALA implementationPyTorch" + }, + { + num: NumberInt("2913"), + value: "U-Net(kaggle dstl) 16Scripts for the my 6th place solution with MXNet.MXNet" + }, + { + num: NumberInt("2914"), + value: "VQA(Gluon:star 16This repo contrains tutorial on Visual Question Answer task using MXNET gluon based on \"Multimodal Compact Bilinear Pooling for Visual Question Answering and Visual Grounding\".MXNet" + }, + { + num: NumberInt("2915"), + value: "jax ekf 16Generic EKF, with support for non-Euclidean manifoldsJAX" + }, + { + num: NumberInt("2916"), + value: "keras sde net 15Keras implementation of SDE-Net (ICML 2020).TensorFlow" + }, + { + num: NumberInt("2917"), + value: "pytorch_GloVe 15simple pytorch GloVe implementationPyTorch" + }, + { + num: NumberInt("2918"), + value: "Language/dialect identification with multiple character-level CNNs 15Character-level CNN model for the DSL 2016 shared task.Keras" + }, + { + num: NumberInt("2919"), + value: "Zero-shot Intent CapsNet 14GPU-accelerated PyTorch implementation of \"Zero-shot User Intent Detection via Capsule Neural Networks\".\nPyTorch" + }, + { + num: NumberInt("2920"), + value: "Tiny Face (w/ training) 14Finished coding.MXNet" + }, + { + num: NumberInt("2921"), + value: "siamese 14siamise networks[^1] MXNet" + }, + { + num: NumberInt("2922"), + value: "P3D 13This repo implements the network structure of P3D[1] with MXNet, pre-trained model weights are converted from caffemodel, which is supported from the author's repoMXNet" + }, + { + num: NumberInt("2923"), + value: "cnn+Highway Net 13Sentiment classification forked from incubator-mxnet/cnn_text_classification/, i've implemented the Highway Networks architecture.The final train model is CNN + Highway Network structure, and this version can achieve a best dev accuracy of 94.75% with the Chinese corpus.MXNet" + }, + { + num: NumberInt("2924"), + value: "SpectralLDA 13This code implements a Spectral (third order tensor decomposition) learning method for the Latent Dirichlet Allocation model in Python.MXNet" + }, + { + num: NumberInt("2925"), + value: "memnn 13End-to-end memory networks\nChainer" + }, + { + num: NumberInt("2926"), + value: "chainer-example-overfeat-classify 13Overfeat\nChainer" + }, + { + num: NumberInt("2927"), + value: "YOLOtiny_v2 13YOLOtiny_v2\nChainer" + }, + { + num: NumberInt("2928"), + value: "SparseGPAX 13An ultra-lightweight JAX implementation of sparse Gaussian processes via pathwise sampling.JAX" + }, + { + num: NumberInt("2929"), + value: "haiku mup 13A port of muP to JAX/HaikuJAX" + }, + { + num: NumberInt("2930"), + value: "mucko 12Pytorch Implementation of MUCKO(2020 IJCAI)PyTorch" + }, + { + num: NumberInt("2931"), + value: "LightCNN 12mxnet implementation of LightCNN in the paper \"A Light CNN for Deep Face Representation with Noisy Labels\" [Paper]MXNet" + }, + { + num: NumberInt("2932"), + value: "netty jax ws 12JAX-WS on top of NettyJAX" + }, + { + num: NumberInt("2933"), + value: "dxp rest example 12Sample for JAX-RS based REST services on Liferay DXPJAX" + }, + { + num: NumberInt("2934"), + value: "spring boot jaxws demo 12Spring Boot JAX-WS demoJAX" + }, + { + num: NumberInt("2935"), + value: "federated_learning_pytorch 11Simplified implementation of federated learning in PyTorchPyTorch" + }, + { + num: NumberInt("2936"), + value: "Point Transformer Cls 11My own (unofficial) implementation of the Point Transformer Network, currently for classification tasks. PyTorch" + }, + { + num: NumberInt("2937"), + value: "MemN2N 11MXNet implementation of End-To-End Memory Networks for language modelling.MXNet" + }, + { + num: NumberInt("2938"), + value: "RNN-Transducer(RNNT loss using CPP) 11A fast parallel implementation of RNN Transducer (Graves 2013 joint network), on CPU for mxnet.MXNet" + }, + { + num: NumberInt("2939"), + value: "deformable-conv 11Deformable-conv\nChainer" + }, + { + num: NumberInt("2940"), + value: "jax ws client 11client who uses vraptor controller interfaces to create a proxy and access the resourcesJAX" + }, + { + num: NumberInt("2941"), + value: "vert.x jersey 11Integrates Jersey JAX-RS implementation with Vert.x application frameworkJAX" + }, + { + num: NumberInt("2942"), + value: "jax spectral 11Short-time Fourier transform (STFT) for JAXJAX" + }, + { + num: NumberInt("2943"), + value: "Pointwise Convolutional Neural Network 10PyTorch implementation of Pointwise Convolutional Neural Networks in CVPR 2018.PyTorch" + }, + { + num: NumberInt("2944"), + value: "siamese_network_on_omniglot(Gluon:star 10This is a repository consisting of a naive implementation of Siamese Network using MXNet and the nice interface Gluon, and the dataset used here is Omniglot.MXNet" + }, + { + num: NumberInt("2945"), + value: "Tacotron 10A tech demo of MXNet capabilities consisting of a Tacotron implementation.MXNet" + }, + { + num: NumberInt("2946"), + value: "dreamerv2_jax 10Dreamerv2's re-implementation (and slight architectural improvement) in Jax + FlaxJAX" + }, + { + num: NumberInt("2947"), + value: "nerf.jax 10A minimal TPU compatible Jax implementation of NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis.JAX" + }, + { + num: NumberInt("2948"), + value: "st-resnet 9A python version of Spatiotemporal Multiplier Networks based on mxnet.MXNet" + }, + { + num: NumberInt("2949"), + value: "Class Activation Mapping 9This demo shows the method proposed in \"Zhou, Bolei, et al.MXNet" + }, + { + num: NumberInt("2950"), + value: "mxnet-recommender(Gluon:star 9Collaborative Filtering NN and CNN based recommender implemented with MXNetMXNet" + }, + { + num: NumberInt("2951"), + value: "dreamax 9A scalable Dreamer implementation in JAXJAX" + }, + { + num: NumberInt("2952"), + value: "svd2 9A JAX/Numpy implementation of a batched 2x2 SVDJAX" + }, + { + num: NumberInt("2953"), + value: "ngd_in_wide_nn 9simple JAX-/NumPy-based implementations of NGD with exact/approximate Fisher Information Matrix both in parameter-space and function-space (by empirical/analytical NTK).JAX" + }, + { + num: NumberInt("2954"), + value: "perceiver jax 9Perceiver (transformer variant) implemented in JAX and FlaxJAX" + }, + { + num: NumberInt("2955"), + value: "NetworkSample 9Multiplayer sample with players lobby and chat in Flax EngineJAX" + }, + { + num: NumberInt("2956"), + value: "Dynamic Capacity Networks 8Implementation of \"Dynamic Capacity Networks\"\nTensorFlow" + }, + { + num: NumberInt("2957"), + value: "Neural Attention Model Abstractive Summarization 8Implementation of paper: \"A Neural Attention Model for Sentence Summarization\" in TheanoTensorFlow" + }, + { + num: NumberInt("2958"), + value: "torchplus 8Implements the + operator on PyTorch modules, returning sequences.\nPyTorch" + }, + { + num: NumberInt("2959"), + value: "deepdep 8PyTorch implementation of Dependency Parsing as Head Selection from Zhang et al., EACL 2017PyTorch" + }, + { + num: NumberInt("2960"), + value: "Xception+Keras2MXNet 8Xception: Deep Learning with Depthwise Separable ConvolutionsMXNet" + }, + { + num: NumberInt("2961"), + value: "VisualBackProp 8This repo contains an implementation of VisualBackProp for MXNet.MXNet" + }, + { + num: NumberInt("2962"), + value: "vat 8VAT\nChainer" + }, + { + num: NumberInt("2963"), + value: "jax_transformer 8Autoregressive transformer in JAX from scratchJAX" + }, + { + num: NumberInt("2964"), + value: "spring boot hibernate multitenant jaxrs api 8RESTful API application using Spring Boot + JAX-RS + Hibernate for Multi-TenancyJAX" + }, + { + num: NumberInt("2965"), + value: "soapstone 8An adapter for exposing JAX-WS services as JSON over HTTPJAX" + }, + { + num: NumberInt("2966"), + value: "ofbiz rest impl 8Rest API using JAX-RS RI (Jersey)JAX" + }, + { + num: NumberInt("2967"), + value: "laxy 8lazy wrapper around jaxJAX" + }, + { + num: NumberInt("2968"), + value: "flaxton proxy 8Flaxton proxy server which is implemented using FNTP protocol for http://flaxton.io projectJAX" + }, + { + num: NumberInt("2969"), + value: "cartoon_gan_tf2.0 7A DCGAN implementation in tensorflow 2.0, trained on cartoonset100k datasetTensorFlow" + }, + { + num: NumberInt("2970"), + value: "3D U Net pytorch model parallel 7PyTorch implementation of 3D U-Net with model parallel in 2GPU for large modelPyTorch" + }, + { + num: NumberInt("2971"), + value: "pytorch_mixup 7A PyTorch implementation of MixupPyTorch" + }, + { + num: NumberInt("2972"), + value: "Range Loss 7I am trying to implement the range loss using MxNet to get familiar with MxNet :)MXNet" + }, + { + num: NumberInt("2973"), + value: "RangeLoss(Gluon:star 7My implement of Range Loss for Deep Face Recognition with Long-tail using MxNet/GluonMXNet" + }, + { + num: NumberInt("2974"), + value: "SuperResolutionCNN 7Super resolution with convolutional neural network.MXNet" + }, + { + num: NumberInt("2975"), + value: "fast-style-transfer 7A mxnet implementation of fast style transfer, inspired by:MXNet" + }, + { + num: NumberInt("2976"), + value: "Loss Surfaces 7A MXNet implementation of AN EMPIRICAL ANALYSIS OF DEEP NETWORK LOSS SURFACES.MXNet" + }, + { + num: NumberInt("2977"), + value: "YSNoteSOAP 7YSNoteSOAP is a JAX-WS/SOAP application for add, list, edit, delete operations notes.JAX" + }, + { + num: NumberInt("2978"), + value: "JaxRK 7RKHS feature vectors, operators, and statistical models using JAX for automatic differentiationJAX" + }, + { + num: NumberInt("2979"), + value: "NLP Journey 7This repository provides a selection of very basic and minimal notebooks for various NLP tasks in written in Jax.JAX" + }, + { + num: NumberInt("2980"), + value: "private cross silo fl 7JAX/Haiku implementation of \"On Privacy and Personalization in Cross-Silo Federated Learning\"JAX" + }, + { + num: NumberInt("2981"), + value: "jax rs 7Jakarta RESTful Web Services, (JAX-RS; formerly Java API for RESTful Web Services)JAX" + }, + { + num: NumberInt("2982"), + value: "madgrad 7JAX implementation of MADGRADJAX" + }, + { + num: NumberInt("2983"), + value: "schnax 7An implementation of SchNet in JAX and JAX-MD.JAX" + }, + { + num: NumberInt("2984"), + value: "Training RNNs as Fast as CNNs 6SRU is a recurrent unit that can run over 10 times faster than cuDNN LSTM, without loss of accuracy tested on many tasks.PyTorch" + }, + { + num: NumberInt("2985"), + value: "charLSTM 6Pytorch implementation of character level LSTM for generating text, trained on Mark Twain's books.PyTorch" + }, + { + num: NumberInt("2986"), + value: "pytorch_deep_learning_models 6PyTorch implementations of deep learning modelsPyTorch" + }, + { + num: NumberInt("2987"), + value: "Chest-XRay 6(port and enhancement of tensorflow repo found at ayush1997/Xvision using Resnet-50)MXNet" + }, + { + num: NumberInt("2988"), + value: "PPO(Gluon:star 6Add entropy term to encourage explorationMXNet" + }, + { + num: NumberInt("2989"), + value: "mini hmc jax 6A simple implementation of Hamiltonian Monte Carlo in JAX.JAX" + }, + { + num: NumberInt("2990"), + value: "backbone wine cellar 6Spring MVC + JPA implementation of The Wine Cellar application (https://github.com/ccoenraets/backbone-jax-cellar)JAX" + }, + { + num: NumberInt("2991"), + value: "relaxed machines 6explorations in neuro-symbolic differentiable interpretersJAX" + }, + { + num: NumberInt("2992"), + value: "heroes service 6A simple sample using JAX-RS with Couchbase using Java EE with TomEE flavor.JAX" + }, + { + num: NumberInt("2993"), + value: "APIRestGenerator 6This project has been developed in different modules (front-end and back-ends) that generate different outcomes as REST implementations from a Swagger Specification (the current outcomes are Spring MVC, JAX-RS and Javascript)JAX" + }, + { + num: NumberInt("2994"), + value: "Nepali Poet Generation with char RNN model 5This project is the implementation of Andrej Karpathy implementation of chracter RNN model in Keras. This generates the Nepali poet train on Laxmi Prasad Devkota Poems.TensorFlow" + }, + { + num: NumberInt("2995"), + value: "Transformer 5Tensorflow implementation of TransformerTensorFlow" + }, + { + num: NumberInt("2996"), + value: "Neural_Network_Pruning_Sparsification 5TensorFlow implementation of weight and unit pruning and sparsificationTensorFlow" + }, + { + num: NumberInt("2997"), + value: "am_softmax 5This is a pytorch implementation of the am_softmax, this softmax layer includes the class assignment fully connected layer, as it is required for it to be normalized.PyTorch" + }, + { + num: NumberInt("2998"), + value: "pytorch text crf 5This package contains a simple wrapper for using conditional random fields(CRF) for NLP applications. This code is based on the excellent Allen NLP implementation of CRF.PyTorch" + }, + { + num: NumberInt("2999"), + value: "SENet(from Caffe) 5This repo contains the code which can convert the offical caffemodel of SENet into MXNet.MXNet" + }, + { + num: NumberInt("3000"), + value: "Convolutional Sketch Inversion 5MXNet implementation of Convolutional Sketch Inversion MXNet" + }, + { + num: NumberInt("3001"), + value: "Dynamic pose estimation 5Training and inference code for LSTM-based action recognition model.MXNet" + }, + { + num: NumberInt("3002"), + value: "Reinspect 5MXNet version of ReinspectMXNet" + }, + { + num: NumberInt("3003"), + value: "parserChiang(Gluon:star 5This repo support CoNLL format, which is adapted by Universal Dependencies Project.MXNet" + }, + { + num: NumberInt("3004"), + value: "NER with Bidirectional LSTM-CNNs 5This repo contains an MXNet implementation of this state of the art entity recognition model.MXNet" + }, + { + num: NumberInt("3005"), + value: "prednet 5Deep Predictive Coding Networks\nChainer" + }, + { + num: NumberInt("3006"), + value: "adgm 5Auxiliary Deep Generative Models\nChainer" + }, + { + num: NumberInt("3007"), + value: "IMSAT 5IMSAT\nChainer" + }, + { + num: NumberInt("3008"), + value: "reproduce_J1J2model_via_CNN 5\"Solving frustrated quantum many particle models with convolutional neural network\" & \"Hybrid convolutional neural network and projected entangled pair states wave functions for quantum many-particle states\" using FLAX and JAXJAX" + }, + { + num: NumberInt("3009"), + value: "OnlinePlatformSteam 5Online platform implementation of Steam for games made with Flax EngineJAX" + }, + { + num: NumberInt("3010"), + value: "poc jax rs 5Samples program to show different JAX-RS implementationJAX" + }, + { + num: NumberInt("3011"), + value: "resteasy sse 5JAX-RS 2.1 Server Side Eventing Example (SSE)JAX" + }, + { + num: NumberInt("3012"), + value: "ebikeconnect api 5JAX-RS client implementation for accessing ebike-connect services.JAX" + }, + { + num: NumberInt("3013"), + value: "entmax jax 5The entmax mapping in JAXJAX" + }, + { + num: NumberInt("3014"), + value: "jaxb inherit 5JAXB plugin to allow generated JAXB classes to extend from a class or implement one or more interfaces.JAX" + }, + { + num: NumberInt("3015"), + value: "jaxon dialogs 5Modal, alerts and confirmation dialogs for Jaxon with various javascript libraries https://www.jaxon-php.org.JAX" + }, + { + num: NumberInt("3016"), + value: "jaxrs cxf camel spring example 5An implementation of a simple REST service using JAX-RS, Apache CXF, Apache Camel, and SpringJAX" + }, + { + num: NumberInt("3017"), + value: "pytorch phocnet 4PHOCNet implementation in Pytorch based on Sudholt's implementationPyTorch" + }, + { + num: NumberInt("3018"), + value: "Pytorch NeuroEvolution 4A Pytorch implementation of NeuroEvolution.PyTorch" + }, + { + num: NumberInt("3019"), + value: "pytorch_resnext 4A PyTorch implementation of ResNeXtPyTorch" + }, + { + num: NumberInt("3020"), + value: "PPO Pytorch 4Minimal implementation of PPO, running in Mujoco env, using Gym-mujocoPyTorch" + }, + { + num: NumberInt("3021"), + value: "Convolutional Pose Machines 4Refer to Shih-En Wei, Varun Ramakrishna, Takeo Kanade, Yaser Sheikh, \"Convolutional pose machines\", CVPR 2016.MXNet" + }, + { + num: NumberInt("3022"), + value: "NetVlad 4NetVlad layer with MxNetMXNet" + }, + { + num: NumberInt("3023"), + value: "go flax id 4Distributed unique ID generationJAX" + }, + { + num: NumberInt("3024"), + value: "jaxbee 4Java XBee LibraryJAX" + }, + { + num: NumberInt("3025"), + value: "spring jaxws cxf 4A simple example of how to integrate CXF with Spring using pure Java configuration.JAX" + }, + { + num: NumberInt("3026"), + value: "Rest JaxRS Example 4Example using JaxRS Jersey, Hibernate, H2 DB, CDI Weld & ExtJS 4 JAX" + }, + { + num: NumberInt("3027"), + value: "jju 4Jack's Jax UtilitiesJAX" + }, + { + num: NumberInt("3028"), + value: "jaxro 4A Simple XML Marshalling Solution for Legacy ApplicationsJAX" + }, + { + num: NumberInt("3029"), + value: "lynx 4Lynx automatically exposes your JPA entities as a REST service with build-in metadata and query support using JAX-RS.JAX" + }, + { + num: NumberInt("3030"), + value: "infinispan discovery 4Example to show how to register/discover/loadbalance JAX-WS services using Camel and Inifinispan.JAX" + }, + { + num: NumberInt("3031"), + value: "xjc immutable plugin 4XJC (JAX-B Compiler) Plugin that generates immutable value object classes from your xml schemaJAX" + }, + { + num: NumberInt("3032"), + value: "jaxws jersey client api 4A TransportTube implementation to let the JAX-WS RI use a Jersey client as the underlying HTTP transportJAX" + }, + { + num: NumberInt("3033"), + value: "htng property 2009b guestselfservice 4A JAX-WS/JAXB sample implementation of part of the Guest Self Service package in the HTNG 2009B Property specification.JAX" + }, + { + num: NumberInt("3034"), + value: "ResNeXt 3ResNeXt Pytorch ImplementationPyTorch" + }, + { + num: NumberInt("3035"), + value: "autoregressive novelty detection 3A re-implementation of cs > arXiv:1807.01653v1PyTorch" + }, + { + num: NumberInt("3036"), + value: "ssd pytorch 3 Single Shot MultiBox Detector implementation on pytorchPyTorch" + }, + { + num: NumberInt("3037"), + value: "Capsnet 3The repository contains the Pytorch implementation of the Capsnet PaperPyTorch" + }, + { + num: NumberInt("3038"), + value: "TabNet 3TabNet: Attentive Interpretable Tabular Learning (Pytorch implementation)PyTorch" + }, + { + num: NumberInt("3039"), + value: "PyTorch implementation of Highway Networks 3Implementing a robust Highway Net in PyTorchPyTorch" + }, + { + num: NumberInt("3040"), + value: "artnet pytorch 3Implementation of ARTNet in PytorchPyTorch" + }, + { + num: NumberInt("3041"), + value: "Building Efficient ConvNets using Redundant Feature Pruning 3It is a Pytorch implementation of https://arxiv.org/pdf/1802.07653.pdf paper.PyTorch" + }, + { + num: NumberInt("3042"), + value: "pytorch cifar10 3Implementing and training/testing popular model architectures on the CIFAR10 dataset.PyTorch" + }, + { + num: NumberInt("3043"), + value: "Perceptron PyTorch Autograd 3PyTorch (0.4.0) implementation of a single layer Perceptron but with gradient descent instead of perceptron learning rule.PyTorch" + }, + { + num: NumberInt("3044"), + value: "Faster Rcnn 3Pytorch implementation of Region-Proposal- Network followed by the complete Faster-rcnn architecturePyTorch" + }, + { + num: NumberInt("3045"), + value: "pytorch_workspace 3Papers' implementation and exercise using PyTorchPyTorch" + }, + { + num: NumberInt("3046"), + value: "Semi Supervised_Models 3PyTorch implementations of deep semi-supervised modelsPyTorch" + }, + { + num: NumberInt("3047"), + value: "Exponentiated Gradient PyTorch 3EG plus/minus optimizer implemented in PyTorchPyTorch" + }, + { + num: NumberInt("3048"), + value: "flashNet 3A fast implementation of neural network modules/architectures to effectively run on IoT or mobile devices like Raspberry Pi etcPyTorch" + }, + { + num: NumberInt("3049"), + value: "classification_pytorch_colab 3Easy implementation of CNN classification in Pytorch running in Google ColabPyTorch" + }, + { + num: NumberInt("3050"), + value: "openai-mxnet 3Play the OpenAI gym with mxnet.MXNet" + }, + { + num: NumberInt("3051"), + value: "mnist-oneshot 3Mnist-oneshot\nChainer" + }, + { + num: NumberInt("3052"), + value: "diffsats 3JAX-based implementation of SatGenJAX" + }, + { + num: NumberInt("3053"), + value: "JAX_GRU 3A GRU written in JAXJAX" + }, + { + num: NumberInt("3054"), + value: "pytorch word2vec 2pytorch implementation of word2vecPyTorch" + }, + { + num: NumberInt("3055"), + value: "BERT for Retrieval Based Dialog System 2implementation for retrieval-based dialog system using pytorch pretrained BERT.PyTorch" + }, + { + num: NumberInt("3056"), + value: "siamese_pytorch 2PyTorch implementation of Siamese Network with FashionMNISTPyTorch" + }, + { + num: NumberInt("3057"), + value: "Siam RPN 2re-implementation of Siamese RPNPyTorch" + }, + { + num: NumberInt("3058"), + value: "word2vec 2Python implementation for Word2VecPyTorch" + }, + { + num: NumberInt("3059"), + value: "capsule networks pytorch 2PyTorch implementation of Capsule NetworksPyTorch" + }, + { + num: NumberInt("3060"), + value: "LUCAD 2This repository contains multiple useful scripts to train (and score) modelsMXNet" + }, + { + num: NumberInt("3061"), + value: "VQA 2This code is written in Python and requires MXNET.MXNet" + }, + { + num: NumberInt("3062"), + value: "geometric-matching 2geometric matchingMXNet" + }, + { + num: NumberInt("3063"), + value: "collaborative_filtering 2A repository to experiment building recommender systems using apache MXNet.MXNet" + }, + { + num: NumberInt("3064"), + value: "chainer-fluid 2Fluid simulation\nChainer" + }, + { + num: NumberInt("3065"), + value: "ddgm 2Deep Directed Generative Models with Energy-Based Probability Estimation\nChainer" + }, + { + num: NumberInt("3066"), + value: "flax_bert 2See https://github.com/nikitakit/sabertoothJAX" + }, + { + num: NumberInt("3067"), + value: "nodejs flaxton 2Flaxton Network protocol implementation in Node.jsJAX" + }, + { + num: NumberInt("3068"), + value: "jaxfss 2JAX/Flax implementation of finite-size scalingJAX" + }, + { + num: NumberInt("3069"), + value: "OnlinePlatformXboxLive 2Online platform implementation of Xbox Live for games made with Flax EngineJAX" + }, + { + num: NumberInt("3070"), + value: "vivit weights converter 2Script to convert ViViT weights from Flax to Pytorch.JAX" + }, + { + num: NumberInt("3071"), + value: "deep learning book implementations 1This is the personal project on implementing the contents of Deep Learning (An MIT Press book) for self-study purpose.PyTorch" + }, + { + num: NumberInt("3072"), + value: "FractalNet 1MXNet implementation of FractalNetMXNet" + }, + { + num: NumberInt("3073"), + value: "IOULoss 1mxnetIOULossMXNet" + }, + { + num: NumberInt("3074"), + value: "cicada classification 11300 cicada speces is distributed aroud the world.MXNet" + }, + { + num: NumberInt("3075"), + value: "DPSH 1MXNet implements of deep pair-wise hashing MXNet" + }, + { + num: NumberInt("3076"), + value: "MemN2N(Gluon:star 1MXNet (using Gluon) implementation of End-To-End Memory Networks for language modelling.MXNet" + }, + { + num: NumberInt("3077"), + value: "sequence-sampling 1Implementation of the experiments in the paper \"A comparative study of batch-construction strategies for recurrent neural networks in MXNet\"MXNet" + }, + { + num: NumberInt("3078"), + value: "flaxcrawler 1Git copy of Flaxcrawler: Simple and flexible java web crawlerJAX" + }, + { + num: NumberInt("3079"), + value: "flax bspline experiment 1A little B-Spline implementation for FlaxJAX" + }, + { + num: NumberInt("3080"), + value: "jax_v_pytorch 1comparing Jax (haiku and flax) to PyTorch on simple DL tasks.JAX" + }, + { + num: NumberInt("3081"), + value: "Holographic Embeddings for Graph Completion and Link PredictionImplementation of Holographic Embeddings of Knowledge Graphs\nTensorFlow" + }, + { + num: NumberInt("3082"), + value: "pytorch_implementationsVarious Machine learning & Deep Learning models in PyTorchPyTorch" + }, + { + num: NumberInt("3083"), + value: "Character Aware Language Models pytorch implementationCharacter aware neural language model in PyTorch.PyTorch" + }, + { + num: NumberInt("3084"), + value: "minibatch_discriminationMinibatch discrimination\nChainer" + }, + { + num: NumberInt("3085"), + value: "MineClone UnityA reimplementation of Minecraft using Unity engine. May migrate to Flax Engine later. JAX" + }, + { + num: NumberInt("3086"), + value: "gpt 2 haikuMy port of GPT-2 to JAX/haiku. You probably want the HuggingFace FLAX one instead.JAX" + }, + { + num: NumberInt("3087"), + value: "TPU tutorialTPU tutorial, jax, prompt, huggingfaceJAX" + }, + { + num: NumberInt("3088"), + value: "FlaxFlux implementation in TypeScriptJAX" + }, + { + num: NumberInt("3089"), + value: "flaxbotA cross-chat implementation between discord and telegram using node.JAX" + }, + { + num: NumberInt("3090"), + value: "flaxFlax - an ECMA6 nodejs/iojs framework aiming for platform scalability and accelerated development JAX" + }, + { + num: NumberInt("3091"), + value: "flax onlineAbstract boardgame implementation in JS.JAX" + }, + { + num: NumberInt("3092"), + value: "deep_vit_flaxA JAX/Flax implementation of DeepViTJAX" + }, + { + num: NumberInt("3093"), + value: "RationalNetsJAX/Flax implementation of rational neural netsJAX" + }, + { + num: NumberInt("3094"), + value: "jax_practiceJax/Flax implementation practice for various neural networksJAX" + }, + { + num: NumberInt("3095"), + value: "margeTentative implementation of MARGE (Pre-training via Paraphrasing) in jax/flaxJAX" + }, + { + num: NumberInt("3096"), + value: "jax_implementationsImplementation of machine learning models using the google research packages jax and flax.JAX" + }, + { + num: NumberInt("3097"), + value: "AutoencoderVarious autoencoders.\nTensorFlow" + }, + { + num: NumberInt("3098"), + value: "DeepContextualBanditsCode for a variety of contextual bandits algorithms using deep neural networks and Thompson sampling.\nTensorFlow" + }, + { + num: NumberInt("3099"), + value: "DifferentialPrivacyDifferential privacy for training data.\nTensorFlow" + }, + { + num: NumberInt("3100"), + value: "DomainAdaptationDomain separation networks.\nTensorFlow" + }, + { + num: NumberInt("3101"), + value: "InceptionDeep convolutional networks for computer vision.\nTensorFlow" + }, + { + num: NumberInt("3102"), + value: "KeypointNetDiscovery of latent 3D keypoints via end-to-end geometric eeasoning [demo].\nTensorFlow" + }, + { + num: NumberInt("3103"), + value: "LearningToRememberRareEventsA large-scale life-long memory module for use in deep learning.\nTensorFlow" + }, + { + num: NumberInt("3104"), + value: "LexNetcA distributed model for noun compound relationship classification.\nTensorFlow" + }, + { + num: NumberInt("3105"), + value: "LM1BLanguage modeling on the one billion word benchmark.\nTensorFlow" + }, + { + num: NumberInt("3106"), + value: "LmCommonsenseCommonsense reasoning using language models.\nTensorFlow" + }, + { + num: NumberInt("3107"), + value: "NamignizerRecognize and generate names.\nTensorFlow" + }, + { + num: NumberInt("3108"), + value: "NeuralGpuHighly parallel neural computer.\nTensorFlow" + }, + { + num: NumberInt("3109"), + value: "NeuralProgrammerNeural network augmented with logic and mathematic operations.\nTensorFlow" + }, + { + num: NumberInt("3110"), + value: "NextFramePredictionProbabilistic future frame synthesis via cross convolutional networks.\nTensorFlow" + }, + { + num: NumberInt("3111"), + value: "PTNPerspective transformer nets for 3D object reconstruction.\nTensorFlow" + }, + { + num: NumberInt("3112"), + value: "MARCOAutomating the evaluation of crystallization experiments.\nTensorFlow" + }, + { + num: NumberInt("3113"), + value: "QAKGModule networks for question answering on knowledge graphs.\nTensorFlow" + }, + { + num: NumberInt("3114"), + value: "RealNvpDensity estimation using real-valued non-volume preserving (real NVP) transformations.\nTensorFlow" + }, + { + num: NumberInt("3115"), + value: "REBARLow-variance, unbiased gradient estimates for discrete latent variable models.\nTensorFlow" + }, + { + num: NumberInt("3116"), + value: "ResNetDeep and wide residual networks.\nTensorFlow" + }, + { + num: NumberInt("3117"), + value: "Seq2speciesDeep learning solution for read-level taxonomic classification.\nTensorFlow" + }, + { + num: NumberInt("3118"), + value: "SkipThoughtsRecurrent neural network sentence-to-vector encoder.\nTensorFlow" + }, + { + num: NumberInt("3119"), + value: "SwivelThe Swivel algorithm for generating word embeddings.\nTensorFlow" + }, + { + num: NumberInt("3120"), + value: "SyntaxNetNeural models of natural language syntax.\nTensorFlow" + }, + { + num: NumberInt("3121"), + value: "TCNSelf-supervised representation learning from multi-view video.\nTensorFlow" + }, + { + num: NumberInt("3122"), + value: "TextsumSequence-to-sequence with attention model for text summarization.\nTensorFlow" + }, + { + num: NumberInt("3123"), + value: "TransformerSpatial transformer network, which allows the spatial manipulation of data within the network.\nTensorFlow" + }, + { + num: NumberInt("3124"), + value: "VideoPredictionPredicting future video frames with neural advection.\nTensorFlow" + }, + { + num: NumberInt("3125"), + value: "Deep Q-NetworkFor Playing Frozen Lake Game\nTensorFlow" + }, + { + num: NumberInt("3126"), + value: "ACActor Critic for Playing Discrete Action space Game (Cartpole)\nTensorFlow" + }, + { + num: NumberInt("3127"), + value: "A3CAsynchronous Advantage Actor Critic (A3C) for Continuous Action Space (Bipedal Walker)\nTensorFlow" + }, + { + num: NumberInt("3128"), + value: "Network in Network modelThe Network in Network model is described in the following ICLR-2014 paper: Network In Network M.Caffe" + }, + { + num: NumberInt("3129"), + value: "Models from the BMVC-2014 paper \"Return of the Devil in the DetailsThe models are trained on the ILSVRC-2012 dataset.Caffe" + }, + { + num: NumberInt("3130"), + value: "Models used by the VGG team in ILSVRC-2014The models are the improved versions of the models used by the VGG team in the ILSVRC-2014 competition.Caffe" + }, + { + num: NumberInt("3131"), + value: "Places-CNN model from MIT.Places CNN is described in the following NIPS 2014 paper: B.Caffe" + }, + { + num: NumberInt("3132"), + value: "GoogLeNet GPU implementation from Princeton.We implemented GoogLeNet using a single GPU.Caffe" + }, + { + num: NumberInt("3133"), + value: "CaffeNet fine-tuned for Oxford flowers datasethttps://gist.github.com/jimgoo/0179e52305ca768a601fThe is the reference CaffeNet (modified AlexNet) fine-tuned for the Oxford 102 category flower dataset.Caffe" + }, + { + num: NumberInt("3134"), + value: "CNN Models for Salient Object Subitizing.CNN subitizing models described in the following papers (project page): Salient Object Subitizing J.Caffe" + }, + { + num: NumberInt("3135"), + value: "Places_CNDS_models on Scene RecognitionPlaces-CNDS-8 is a \"8conv3fc layer\" deep Convolutional neural Networks model trained on MIT Places Dataset with Deep Supervision.The details of training this model are described in the following report.Caffe" + }, + { + num: NumberInt("3136"), + value: "Models for Age and Gender Classification.Age/Gender.net are models for age and gender classification trained on the Adience-OUI dataset.Caffe" + }, + { + num: NumberInt("3137"), + value: "ParseNetThese models are described in the paper: ParseNet: Looking Wider to See Better Wei Liu, Andrew Rabinovich, Alexander C.Caffe" + }, + { + num: NumberInt("3138"), + value: "Conditional Random Fields as Recurrent Neural NetworksCode (with Matlab/Python API) and model are described in the ICCV 2015 paper Conditional Random Fields as Recurrent Neural Networks S.Caffe" + }, + { + num: NumberInt("3139"), + value: "Holistically-Nested Edge DetectionThe model and code provided are described in the ICCV 2015 paper: Holistically-Nested Edge Detection Saining Xie and Zhuowen Tu ICCV 2015For details about training/evaluating HED, please take a look at http://github.com/s9xie/hed.Model trained on BSDS-500 Dataset (finetuned from the VGGNet): * HED BSDS-500Caffe" + }, + { + num: NumberInt("3140"), + value: "Translating Videos to Natural LanguageThese models are described in this NAACL-HLT 2015 paper.Caffe" + }, + { + num: NumberInt("3141"), + value: "VGG Face CNN descriptorThese models are described in this [BMVC 2015 paper] (http://www.robots.ox.ac.uk/~vgg/publications/2015/Parkhi15/parkhi15.pdf).Caffe" + }, + { + num: NumberInt("3142"), + value: "Yearbook Photo DatingModel from the ICCV 2015 Extreme Imaging Workshop paper: A Century of Portraits: Exploring the Visual Historical Record of American High School Yearbooks Shiry Ginosar, Kate Rakelly, Brian Yin, Sarah Sachs, Alyosha Efros ICCV Workshop 2015Model and prototxt files: YearbookCaffe" + }, + { + num: NumberInt("3143"), + value: "CCNNThese models are described in the ICCV 2015 paper.Caffe" + }, + { + num: NumberInt("3144"), + value: "Facial Landmark Detection with Tweaked Convolutional Neural NetworksWe provide source code and model for article:Yue Wu and Tal Hassner, \"Facial Landmark Detection with Tweaked Convolutional Neural Networks\", arXiv preprint arXiv:1511.04031, 12 Nov.Caffe" + }, + { + num: NumberInt("3145"), + value: "Faster R-CNNDownload pre-computed Faster R-CNN detectorscd $FRCN_ROOT ./data/scripts/fetch_faster_rcnn_models.shThis will populate the $FRCN_ROOT/data folder with faster_rcnn_models.Caffe" + }, + { + num: NumberInt("3146"), + value: "Sequence to Sequence - Video to Text These models are described in [this ICCV 2015 paper](http://www.cs.utexas.edu/users/ml/papers/venugopalan.iccv15.pdf).Caffe" + }, + { + num: NumberInt("3147"), + value: "Pascal VOC 2012 Multilabel Classification ModelThis model has been used for the paper \"Analyzing Classifiers: Fisher Vectors and Deep Neural Networks\" (http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Bach_Analyzing_Classifiers_Fisher_CVPR_2016_paper.pdf), published in the proceedings of CVPR 2016.Kindly note, that it has been trained in a multilabel setting with a multilabel-compatible loss function.Caffe" + }, + { + num: NumberInt("3148"), + value: "SqueezeNet @article{SqueezeNet, Author = {Forrest N.Caffe" + }, + { + num: NumberInt("3149"), + value: "Mixture DCNNMixture DCNN is a novel multi-model architecture which achieves better performance than an ensemble of DCNNs as evaluated on three different fine-grained datasets.Caffe" + }, + { + num: NumberInt("3150"), + value: "Mulimodal Compact Bilinear Pooling for VQAThe current state-of-the-art model for visual question answering, as described in the following paper:@article{fukui16mcb, title={Multimodal Compact Bilinear Pooling for Visual Question Answering and Visual Grounding}, author={Fukui, Akira and Park, Dong Huk and Yang, Daylen and Rohrbach, Anna and Darrell, Trevor and Rohrbach, Marcus}, journal={arXiv:1606.01847}, year={2016},}[[arXiv](https://arxiv.org/abs/1606.01847)] [[GitHub repo](https://github.com/akirafukui/vqa-mcb/)]Caffe" + }, + { + num: NumberInt("3151"), + value: "Pose-Aware CNN Models (PAMs) for Face RecognitionWe provide the following:- pretrained CNN models of our CVPR'16 paper for pose-aware face recognition in the wild- IJB-A yaw estimates from our pose estimation module _(your informations are required to proceed to the download page in the link below)_latex@INPROCEEDINGS{masi2016cvpr, author={Iacopo Masi and Stephen Rawls and G{\\'e}rard Medioni and Prem Natarajan}, booktitle={CVPR}, title={Pose-{A}ware {F}ace {R}ecognition in the {W}ild}, year={2016} } [PDF] [Webpage] Caffe" + }, + { + num: NumberInt("3152"), + value: "Learning Structured Sparsity in Deep Neural NetworksTrain deep neural networks with structured sparsity to speed up DNNs:@incollection{Wen_NIPS2016, Title = {Learning Structured Sparsity in Deep Neural Networks}, Author = {Wen, Wei and Wu, Chunpeng and Wang, Yandan and Chen, Yiran and Li, Hai}, bookTitle = {Advances in Neural Information Processing Systems}, Year = {2016}}[[arXiv](http://arxiv.org/abs/1608.03665)] [[Caffemodel](https://drive.google.com/folderview?id=0B50edhjyQ0sRd3JLQ1V0OHdHcUE&usp=sharing)] [GitHub repo]Caffe" + }, + { + num: NumberInt("3153"), + value: "Neural Activation ConstellationsWe provide fine-tuned models for CUB200-2011 birds (AlexNet + VGG19), Oxford flowers 102 (AlexNet + VGG19), Oxford IIIT PETS (AlexNet + VGG19), and NABirds dataset (GoogLeNet).Caffe" + }, + { + num: NumberInt("3154"), + value: "ResFace101This page contains ResFace101: a ResNet-101 deep network model, tuned for face recognition.We fine-tuned this model using the procedure described in _I.Caffe" + }, + { + num: NumberInt("3155"), + value: "Striving for SimplicityImplementation of All-CNN-C model for CIFAR-10 from the paper _Striving for Simplicity: The All Convolutional Net_ by Jost Tobias Springenberg, Alexey Dosovitskiy, Thomas Brox, Martin Riedmiller, accepted as a workshop contribution at ICLR 2015.latex@article{Springenberg14, author = {Jost Tobias Springenberg and Alexey Dosovitskiy and Thomas Brox and Martin A.Caffe" + }, + { + num: NumberInt("3156"), + value: "VGG 4x without degradationAn algorithm that effectively prune channels each layer, which could accelerate VGG-16 4x without degradation.Caffe" + }, + { + num: NumberInt("3157"), + value: "Using Ranking-CNN for Age EstimationThe ranking-CNN Caffe model for the CVPR 2017 paper: @InProceedings{Chen_2017_CVPR,author = {Chen, Shixing and Zhang, Caojin and Dong, Ming and Le, Jialiang and Rao, Mike},title = {Using Ranking-CNN for Age Estimation},booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},month = {July},year = {2017}} [PDF] [GitHub repo]Caffe" + }, + { + num: NumberInt("3158"), + value: "Lets Keep it SimpleThis repository contains the architectures, Models, logs, etc pertaining to the SimpleNet Paper.Caffe" + }, + { + num: NumberInt("3159"), + value: "SSDSingle Shot MultiBox Detector\nCaffe" + }, + { + num: NumberInt("3160"), + value: "BVLC GoogLeNetThis model is a replication of the model described in the GoogLeNet publication.\nCaffe2" + }, + { + num: NumberInt("3161"), + value: "BVLC Reference RCNN ILSVRC13The pure Caffe instantiation of the R-CNN model for ILSVRC13 detection. This model was made by transplanting the R-CNN SVM classifiers into a fc-rcnn classification layer, provided here as an off-the-shelf Caffe detector.\nCaffe2" + }, + { + num: NumberInt("3162"), + value: "DenseNet-121An implementation of the DenseNet model.\nCaffe2" + }, + { + num: NumberInt("3163"), + value: "Inception v1Inception v1 is a reproduction of GoogLeNet.\nCaffe2" + }, + { + num: NumberInt("3164"), + value: "SqueezeNetAn implementation of SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size.\nCaffe2" + }, + { + num: NumberInt("3165"), + value: "ZFNet-512ZFNet-512 is a deep convolutional networks for classification. This model's 4th layer has 512 maps instead of 1024 maps mentioned in the paper.\nCaffe2" + }, + { + num: NumberInt("3166"), + value: "Learning local feature descriptors with triplets and shallow convolutional neural networksThis example implements the paper Learning local feature descriptors withPyTorch" + }, + { + num: NumberInt("3167"), + value: "Self-Norm NetsMXNet-scala module implementation of Self-normalizing networks[1].MXNet" + }, + { + num: NumberInt("3168"), + value: "LSTM for HARMXNet-scala module implementation of LSTM for Human Activity Recognition.MXNet" + }, + { + num: NumberInt("3169"), + value: "pix2pixMXNet-scala module implementation of Pix2Pix[1].MXNet" + }, + { + num: NumberInt("3170"), + value: "DIRNetThis is an Mxnet implementation of the DIRNetMXNet" + }, + { + num: NumberInt("3171"), + value: "Densely Connected Convolutional NetworksOriginal idea and implementation:Keras" + }, + { + num: NumberInt("3172"), + value: "DFIDeep Feature Interpolation\nKeras" + }, + { + num: NumberInt("3173"), + value: "Context EncoderImplementation of _Context Encoders: Feature Learning by Inpainting_. Paper: https://arxiv.org/abs/1604.0737\nKeras" + }, + { + num: NumberInt("3174"), + value: "chainer_rnnlmRNN Language Model\nChainer" + }, + { + num: NumberInt("3175"), + value: "chainer_examplesLSTM variants\nChainer" + }, + { + num: NumberInt("3176"), + value: "qrnnQRNN\nChainer" + }, + { + num: NumberInt("3177"), + value: "chainer_caConvolutional Autoencoder\nChainer" + }, + { + num: NumberInt("3178"), + value: "chainer-libDNNStacked Denoising Autoencoder\nChainer" + }, + { + num: NumberInt("3179"), + value: "Face68Pts 21-opencvMXNet" + }, + { + num: NumberInt("3180"), + value: "uis-rnn 1400 PyTorch" + }, + { + num: NumberInt("3181"), + value: "VGG16 Deconvolution networkN.B.Keras" + }, + { + num: NumberInt("3182"), + value: "mxnet_tetris 4GRUMXNet" + }, + { + num: NumberInt("3183"), + value: "**gluon-nlp**(Gluon:star 2400MXNet" + }, + { + num: NumberInt("3184"), + value: "SegNet 1100Caffe" + }, + { + num: NumberInt("3185"), + value: "DQN(Gluon:star 23MXNet" + }, + { + num: NumberInt("3186"), + value: "GluonSeg(Gluon:star 8MXNet" + }, + { + num: NumberInt("3187"), + value: "Double DQN(Gluon:star 7MXNet" + }, + { + num: NumberInt("3188"), + value: "matchnet 6MXNet" + }, + { + num: NumberInt("3189"), + value: "DeepID v1 5MXNet" + }, + { + num: NumberInt("3190"), + value: "C3D 5MXNet" + }, + { + num: NumberInt("3191"), + value: "DRL 5MXNet" + }, + { + num: NumberInt("3192"), + value: "FCN-ASPP 3MXNet" + }, + { + num: NumberInt("3193"), + value: "Deep-Q learning Pong with TensorFlow and PyGameTensorFlow" + }, + { + num: NumberInt("3194"), + value: "DeepLabCaffe" + }, + { + num: NumberInt("3195"), + value: "VGG-FaceCaffe" + }, + { + num: NumberInt("3196"), + value: "LRCNCaffe" + }, + { + num: NumberInt("3197"), + value: "Places CNNCaffe" + }, + { + num: NumberInt("3198"), + value: "SRCNNCaffe" + }, + { + num: NumberInt("3199"), + value: "DeepDriveCaffe" + }, + { + num: NumberInt("3200"), + value: "Berkeley DeepDriveCaffe" + }, + { + num: NumberInt("3201"), + value: "Princeton deepdrivingCaffe" + }, + { + num: NumberInt("3202"), + value: "Sentiment AnalysisCaffe" + }, + { + num: NumberInt("3203"), + value: "AlexNetCaffe2" + }, + { + num: NumberInt("3204"), + value: "Inception v2Caffe2" + }, + { + num: NumberInt("3205"), + value: "StyleTransferCaffe2" + }, + { + num: NumberInt("3206"), + value: "VGG19Caffe2" + }, + { + num: NumberInt("3207"), + value: "Multi-GPU Multi-Label DenseNet (Gluon:starMXNet" + }, + { + num: NumberInt("3208"), + value: "NASNet-A(Gluon:starMXNet" + }, + { + num: NumberInt("3209"), + value: "Light-Head R-CNNMXNet" + }, + { + num: NumberInt("3210"), + value: "SegnetMXNet" + }, + { + num: NumberInt("3211"), + value: "EASTMXNet" + }, + { + num: NumberInt("3212"), + value: "RC3DMXNet" + }, + { + num: NumberInt("3213"), + value: "Receptive Field ToolMXNet" + }, + { + num: NumberInt("3214"), + value: "Reuters topic classificationKeras" + }, + { + num: NumberInt("3215"), + value: "LSTM on the IMDB dataset (text sentiment classification)Keras" + }, + { + num: NumberInt("3216"), + value: "Bidirectional LSTM on the IMDB datasetKeras" + }, + { + num: NumberInt("3217"), + value: "1D CNN on the IMDB datasetKeras" + }, + { + num: NumberInt("3218"), + value: "1D CNN-LSTM on the IMDB datasetKeras" + }, + { + num: NumberInt("3219"), + value: "LSTM-based network on the bAbI datasetKeras" + }, + { + num: NumberInt("3220"), + value: "Memory network on the bAbI dataset (reading comprehension question answering)Keras" + }, + { + num: NumberInt("3221"), + value: "Sequence to sequence learning for performing additions of strings of digitsKeras" + }, + { + num: NumberInt("3222"), + value: "LSTM text generationKeras" + }, + { + num: NumberInt("3223"), + value: "Using pre-trained word embeddingsKeras" + }, + { + num: NumberInt("3224"), + value: "FastText on the IMDB datasetKeras" + }, + { + num: NumberInt("3225"), + value: "Structurally constrained recurrent nets text generationKeras" + }, + { + num: NumberInt("3226"), + value: "Simple CNN on MNISTKeras" + }, + { + num: NumberInt("3227"), + value: "Simple CNN on CIFAR10 with data augmentationKeras" + }, + { + num: NumberInt("3228"), + value: "Inception v3Keras" + }, + { + num: NumberInt("3229"), + value: "VGG 16 (with pre-trained weights)Keras" + }, + { + num: NumberInt("3230"), + value: "VGG 19 (with pre-trained weights)Keras" + }, + { + num: NumberInt("3231"), + value: "Neural Style TransferKeras" + }, + { + num: NumberInt("3232"), + value: "Visualizing the filters learned by a CNNKeras" + }, + { + num: NumberInt("3233"), + value: "Deep dreamsKeras" + }, + { + num: NumberInt("3234"), + value: "Stateful LSTMKeras" + }, + { + num: NumberInt("3235"), + value: "Siamese networkKeras" + }, + { + num: NumberInt("3236"), + value: "Pretraining on a different datasetKeras" + }, + { + num: NumberInt("3237"), + value: "s2cnn 874PyTorch" + }, + { + num: NumberInt("3238"), + value: "jackson jaxrs propertyfiltering 24JAX" + }, + { + num: NumberInt("3239"), + value: "e3nn jax 23JAX" + }, + { + num: NumberInt("3240"), + value: "jaxtorch 16JAX" + }, + { + num: NumberInt("3241"), + value: "osgi jaxrs extracted 3JAX" + }, + { + num: NumberInt("3242"), + value: "Pytorch implementation 2PyTorch" + }, + { + num: NumberInt("3243"), + value: "flax BERTJAX" + }, + { + num: NumberInt("3244"), + value: "lecun1989 flaxJAX" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para2_linkAddress", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://modelzoo.co/model/openpose-caffe" + }, + { + num: NumberInt("1"), + value: "https://modelzoo.co/model/mask-r-cnn-keras" + }, + { + num: NumberInt("2"), + value: "https://modelzoo.co/model/detectron2" + }, + { + num: NumberInt("3"), + value: "https://modelzoo.co/model/ray" + }, + { + num: NumberInt("4"), + value: "https://modelzoo.co/model/mmdetection" + }, + { + num: NumberInt("5"), + value: "https://modelzoo.co/model/pytorch-cyclegan-and-pix2pix" + }, + { + num: NumberInt("6"), + value: "https://modelzoo.co/model/awesome-pytorch-list" + }, + { + num: NumberInt("7"), + value: "https://modelzoo.co/model/stylegan" + }, + { + num: NumberInt("8"), + value: "https://modelzoo.co/model/pytorch-gan" + }, + { + num: NumberInt("9"), + value: "https://modelzoo.co/model/best-of-ml-python" + }, + { + num: NumberInt("10"), + value: "https://modelzoo.co/model/fastphotostyle" + }, + { + num: NumberInt("11"), + value: "https://modelzoo.co/model/albumentations" + }, + { + num: NumberInt("12"), + value: "https://modelzoo.co/model/mathjax" + }, + { + num: NumberInt("13"), + value: "https://modelzoo.co/model/maskrcnn-benchmark" + }, + { + num: NumberInt("14"), + value: "https://modelzoo.co/model/vid2vid" + }, + { + num: NumberInt("15"), + value: "https://modelzoo.co/model/annotated-deep-learning-paper-implementations" + }, + { + num: NumberInt("16"), + value: "https://modelzoo.co/model/tensorboard-pytorch" + }, + { + num: NumberInt("17"), + value: "https://modelzoo.co/model/deep-image-prior" + }, + { + num: NumberInt("18"), + value: "https://modelzoo.co/model/dcgan-tensorflow" + }, + { + num: NumberInt("19"), + value: "https://modelzoo.co/model/trax" + }, + { + num: NumberInt("20"), + value: "https://modelzoo.co/model/faster-rcnnpytorch" + }, + { + num: NumberInt("21"), + value: "https://modelzoo.co/model/yolo-tensorflow" + }, + { + num: NumberInt("22"), + value: "https://modelzoo.co/model/tts" + }, + { + num: NumberInt("23"), + value: "https://modelzoo.co/model/progressive-growing-of-gans-for-improved-tensorflow" + }, + { + num: NumberInt("24"), + value: "https://modelzoo.co/model/pix2pixhd" + }, + { + num: NumberInt("25"), + value: "https://modelzoo.co/model/open-source-mit-neural-machine-translation-nmt" + }, + { + num: NumberInt("26"), + value: "https://modelzoo.co/model/einops" + }, + { + num: NumberInt("27"), + value: "https://modelzoo.co/model/deep-reinforcement-learning-for-keras" + }, + { + num: NumberInt("28"), + value: "https://modelzoo.co/model/pytorch-unet-2" + }, + { + num: NumberInt("29"), + value: "https://modelzoo.co/model/wavenet-tensorflow" + }, + { + num: NumberInt("30"), + value: "https://modelzoo.co/model/yet-another-efficientdet-pytorch" + }, + { + num: NumberInt("31"), + value: "https://modelzoo.co/model/external-attention-pytorch" + }, + { + num: NumberInt("32"), + value: "https://modelzoo.co/model/stargan-pytorch" + }, + { + num: NumberInt("33"), + value: "https://modelzoo.co/model/stargan" + }, + { + num: NumberInt("34"), + value: "https://modelzoo.co/model/espnet" + }, + { + num: NumberInt("35"), + value: "https://modelzoo.co/model/augmentor" + }, + { + num: NumberInt("36"), + value: "https://modelzoo.co/model/sketch-code" + }, + { + num: NumberInt("37"), + value: "https://modelzoo.co/model/semantic-segmentation-pytorch" + }, + { + num: NumberInt("38"), + value: "https://modelzoo.co/model/deep-reinforcement-learning-algorithms-with-pytorch" + }, + { + num: NumberInt("39"), + value: "https://modelzoo.co/model/semantic-segmentation-pytorch-2" + }, + { + num: NumberInt("40"), + value: "https://modelzoo.co/model/pytorch-yolov4" + }, + { + num: NumberInt("41"), + value: "https://modelzoo.co/model/pytorch-seq2seq-2" + }, + { + num: NumberInt("42"), + value: "https://modelzoo.co/model/animegan-tensorflow" + }, + { + num: NumberInt("43"), + value: "https://modelzoo.co/model/colornet" + }, + { + num: NumberInt("44"), + value: "https://modelzoo.co/model/mmsegmentation" + }, + { + num: NumberInt("45"), + value: "https://modelzoo.co/model/image-analogies" + }, + { + num: NumberInt("46"), + value: "https://modelzoo.co/model/stable-baselines3" + }, + { + num: NumberInt("47"), + value: "https://modelzoo.co/model/flax-60" + }, + { + num: NumberInt("48"), + value: "https://modelzoo.co/model/pytorch-semseg" + }, + { + num: NumberInt("49"), + value: "https://modelzoo.co/model/fully-convolutional-networks-for-semantic-segmentation-caffe" + }, + { + num: NumberInt("50"), + value: "https://modelzoo.co/model/tensorwatch" + }, + { + num: NumberInt("51"), + value: "https://modelzoo.co/model/pytorch-vae" + }, + { + num: NumberInt("52"), + value: "https://modelzoo.co/model/pytorch-yolo-v3" + }, + { + num: NumberInt("53"), + value: "https://modelzoo.co/model/immutables" + }, + { + num: NumberInt("54"), + value: "https://modelzoo.co/model/mmediting" + }, + { + num: NumberInt("55"), + value: "https://modelzoo.co/model/wassersteingan" + }, + { + num: NumberInt("56"), + value: "https://modelzoo.co/model/stylegan2-pytorch" + }, + { + num: NumberInt("57"), + value: "https://modelzoo.co/model/colorful-image-colorization" + }, + { + num: NumberInt("58"), + value: "https://modelzoo.co/model/muse" + }, + { + num: NumberInt("59"), + value: "https://modelzoo.co/model/east-tensorflow" + }, + { + num: NumberInt("60"), + value: "https://modelzoo.co/model/stargan-v2" + }, + { + num: NumberInt("61"), + value: "https://modelzoo.co/model/deepnlp-models-pytorch" + }, + { + num: NumberInt("62"), + value: "https://modelzoo.co/model/chatbot" + }, + { + num: NumberInt("63"), + value: "https://modelzoo.co/model/pytorch-a2c-ppo-acktr" + }, + { + num: NumberInt("64"), + value: "https://modelzoo.co/model/tensorflow-internals" + }, + { + num: NumberInt("65"), + value: "https://modelzoo.co/model/pytorch-a2c-ppo-acktr-gail" + }, + { + num: NumberInt("66"), + value: "https://modelzoo.co/model/super-slomo" + }, + { + num: NumberInt("67"), + value: "https://modelzoo.co/model/alpha-zero-general" + }, + { + num: NumberInt("68"), + value: "https://modelzoo.co/model/deeprl" + }, + { + num: NumberInt("69"), + value: "https://modelzoo.co/model/srgan" + }, + { + num: NumberInt("70"), + value: "https://modelzoo.co/model/alphazero-gomoku" + }, + { + num: NumberInt("71"), + value: "https://modelzoo.co/model/pytorch-studiogan" + }, + { + num: NumberInt("72"), + value: "https://modelzoo.co/model/biggan-pytorch" + }, + { + num: NumberInt("73"), + value: "https://modelzoo.co/model/image-classification-mobile" + }, + { + num: NumberInt("74"), + value: "https://modelzoo.co/model/popular-image-segmentation-models" + }, + { + num: NumberInt("75"), + value: "https://modelzoo.co/model/semantic-segmentation-suite" + }, + { + num: NumberInt("76"), + value: "https://modelzoo.co/model/yolov3-tf2" + }, + { + num: NumberInt("77"), + value: "https://modelzoo.co/model/faster-rcnn-tensorflow" + }, + { + num: NumberInt("78"), + value: "https://modelzoo.co/model/craft-pytorch" + }, + { + num: NumberInt("79"), + value: "https://modelzoo.co/model/dqn-tensorflow" + }, + { + num: NumberInt("80"), + value: "https://modelzoo.co/model/mmdetection3d" + }, + { + num: NumberInt("81"), + value: "https://modelzoo.co/model/vibe" + }, + { + num: NumberInt("82"), + value: "https://modelzoo.co/model/pytorch-kaldi" + }, + { + num: NumberInt("83"), + value: "https://modelzoo.co/model/deeprl-agents" + }, + { + num: NumberInt("84"), + value: "https://modelzoo.co/model/deep-reinforcement-learning-with-pytorch" + }, + { + num: NumberInt("85"), + value: "https://modelzoo.co/model/3ddfa-v2" + }, + { + num: NumberInt("86"), + value: "https://modelzoo.co/model/deblurgan" + }, + { + num: NumberInt("87"), + value: "https://modelzoo.co/model/tensorflow-yolov4-tflite" + }, + { + num: NumberInt("88"), + value: "https://modelzoo.co/model/tacotron-2-tensorflow" + }, + { + num: NumberInt("89"), + value: "https://modelzoo.co/model/unet-family" + }, + { + num: NumberInt("90"), + value: "https://modelzoo.co/model/dm-haiku" + }, + { + num: NumberInt("91"), + value: "https://modelzoo.co/model/pygat" + }, + { + num: NumberInt("92"), + value: "https://modelzoo.co/model/waveglow" + }, + { + num: NumberInt("93"), + value: "https://modelzoo.co/model/rlpyt" + }, + { + num: NumberInt("94"), + value: "https://modelzoo.co/model/senetpytorch" + }, + { + num: NumberInt("95"), + value: "https://modelzoo.co/model/deepspeech2" + }, + { + num: NumberInt("96"), + value: "https://modelzoo.co/model/edsr-pytorch" + }, + { + num: NumberInt("97"), + value: "https://modelzoo.co/model/an-end-to-end-trainable-neural-network-for" + }, + { + num: NumberInt("98"), + value: "https://modelzoo.co/model/chess-reinforcement-learning" + }, + { + num: NumberInt("99"), + value: "https://modelzoo.co/model/lanenet-lane-detection" + }, + { + num: NumberInt("100"), + value: "https://modelzoo.co/model/image-super-resolution-via-iterative-refinement" + }, + { + num: NumberInt("101"), + value: "https://modelzoo.co/model/pytorch-retinanet-2" + }, + { + num: NumberInt("102"), + value: "https://modelzoo.co/model/unit" + }, + { + num: NumberInt("103"), + value: "https://modelzoo.co/model/neural-sequence-labeling-model" + }, + { + num: NumberInt("104"), + value: "https://modelzoo.co/model/yolov7" + }, + { + num: NumberInt("105"), + value: "https://modelzoo.co/model/lip-reading" + }, + { + num: NumberInt("106"), + value: "https://modelzoo.co/model/yolo-tensorflow-tensorflow" + }, + { + num: NumberInt("107"), + value: "https://modelzoo.co/model/deepvoice3_pytorch" + }, + { + num: NumberInt("108"), + value: "https://modelzoo.co/model/audio" + }, + { + num: NumberInt("109"), + value: "https://modelzoo.co/model/gandissect" + }, + { + num: NumberInt("110"), + value: "https://modelzoo.co/model/tabnet" + }, + { + num: NumberInt("111"), + value: "https://modelzoo.co/model/capsule-networks" + }, + { + num: NumberInt("112"), + value: "https://modelzoo.co/model/impersonator" + }, + { + num: NumberInt("113"), + value: "https://modelzoo.co/model/faster-rcnn" + }, + { + num: NumberInt("114"), + value: "https://modelzoo.co/model/pytorch-semantic-segmentation" + }, + { + num: NumberInt("115"), + value: "https://modelzoo.co/model/deep-rl-tensorflow" + }, + { + num: NumberInt("116"), + value: "https://modelzoo.co/model/yolor" + }, + { + num: NumberInt("117"), + value: "https://modelzoo.co/model/pointnet-pointnet2-pytorch" + }, + { + num: NumberInt("118"), + value: "https://modelzoo.co/model/yolov3_tensorflow-2" + }, + { + num: NumberInt("119"), + value: "https://modelzoo.co/model/lightweight-human-pose-estimationpytorch" + }, + { + num: NumberInt("120"), + value: "https://modelzoo.co/model/pointnetpytorch" + }, + { + num: NumberInt("121"), + value: "https://modelzoo.co/model/pyannote-audio" + }, + { + num: NumberInt("122"), + value: "https://modelzoo.co/model/unsupervisedmt" + }, + { + num: NumberInt("123"), + value: "https://modelzoo.co/model/nvidiasemantic-segmentation" + }, + { + num: NumberInt("124"), + value: "https://modelzoo.co/model/fast-autoaugment" + }, + { + num: NumberInt("125"), + value: "https://modelzoo.co/model/ganotebooks" + }, + { + num: NumberInt("126"), + value: "https://modelzoo.co/model/simplehtr" + }, + { + num: NumberInt("127"), + value: "https://modelzoo.co/model/numpyro" + }, + { + num: NumberInt("128"), + value: "https://modelzoo.co/model/non-local-pytorch" + }, + { + num: NumberInt("129"), + value: "https://modelzoo.co/model/efficientdetpytorch-2" + }, + { + num: NumberInt("130"), + value: "https://modelzoo.co/model/mathjax-src" + }, + { + num: NumberInt("131"), + value: "https://modelzoo.co/model/pytorch-seq2seq" + }, + { + num: NumberInt("132"), + value: "https://modelzoo.co/model/classyvision" + }, + { + num: NumberInt("133"), + value: "https://modelzoo.co/model/simclr-2" + }, + { + num: NumberInt("134"), + value: "https://modelzoo.co/model/knowledge-distillation-pytorch" + }, + { + num: NumberInt("135"), + value: "https://modelzoo.co/model/big-transfer" + }, + { + num: NumberInt("136"), + value: "https://modelzoo.co/model/pytorch-cpp" + }, + { + num: NumberInt("137"), + value: "https://modelzoo.co/model/deeposm" + }, + { + num: NumberInt("138"), + value: "https://modelzoo.co/model/wgan-gp" + }, + { + num: NumberInt("139"), + value: "https://modelzoo.co/model/rainbow" + }, + { + num: NumberInt("140"), + value: "https://modelzoo.co/model/3d-ken-burns" + }, + { + num: NumberInt("141"), + value: "https://modelzoo.co/model/fcntensorflow" + }, + { + num: NumberInt("142"), + value: "https://modelzoo.co/model/bayesian-neural-networks" + }, + { + num: NumberInt("143"), + value: "https://modelzoo.co/model/ssd" + }, + { + num: NumberInt("144"), + value: "https://modelzoo.co/model/super-resolution" + }, + { + num: NumberInt("145"), + value: "https://modelzoo.co/model/pytorch-ssd" + }, + { + num: NumberInt("146"), + value: "https://modelzoo.co/model/qrec" + }, + { + num: NumberInt("147"), + value: "https://modelzoo.co/model/neuraltalk2-pytorch" + }, + { + num: NumberInt("148"), + value: "https://modelzoo.co/model/animegan" + }, + { + num: NumberInt("149"), + value: "https://modelzoo.co/model/cyclegan-tensorflow-3" + }, + { + num: NumberInt("150"), + value: "https://modelzoo.co/model/pytorch-openpose" + }, + { + num: NumberInt("151"), + value: "https://modelzoo.co/model/one-pixel-attack-keras" + }, + { + num: NumberInt("152"), + value: "https://modelzoo.co/model/scenic" + }, + { + num: NumberInt("153"), + value: "https://modelzoo.co/model/image-outpainting" + }, + { + num: NumberInt("154"), + value: "https://modelzoo.co/model/tensorflow-fcn" + }, + { + num: NumberInt("155"), + value: "https://modelzoo.co/model/slm-lab" + }, + { + num: NumberInt("156"), + value: "https://modelzoo.co/model/open-clip" + }, + { + num: NumberInt("157"), + value: "https://modelzoo.co/model/pytorch-image-classification" + }, + { + num: NumberInt("158"), + value: "https://modelzoo.co/model/functorch" + }, + { + num: NumberInt("159"), + value: "https://modelzoo.co/model/pointnet2-pytorch" + }, + { + num: NumberInt("160"), + value: "https://modelzoo.co/model/tensorflow-programs-and-tutorials" + }, + { + num: NumberInt("161"), + value: "https://modelzoo.co/model/yolov4-deepsort" + }, + { + num: NumberInt("162"), + value: "https://modelzoo.co/model/r-fcn" + }, + { + num: NumberInt("163"), + value: "https://modelzoo.co/model/discogan" + }, + { + num: NumberInt("164"), + value: "https://modelzoo.co/model/sentiment-discovery" + }, + { + num: NumberInt("165"), + value: "https://modelzoo.co/model/advertorch" + }, + { + num: NumberInt("166"), + value: "https://modelzoo.co/model/async-rl" + }, + { + num: NumberInt("167"), + value: "https://modelzoo.co/model/chainerrl" + }, + { + num: NumberInt("168"), + value: "https://modelzoo.co/model/asynchronous-methods-for-deep-reinforcement-learning" + }, + { + num: NumberInt("169"), + value: "https://modelzoo.co/model/qanet" + }, + { + num: NumberInt("170"), + value: "https://modelzoo.co/model/sepconv-slomo" + }, + { + num: NumberInt("171"), + value: "https://modelzoo.co/model/deep-learning-tensorflow" + }, + { + num: NumberInt("172"), + value: "https://modelzoo.co/model/variational-autoencoder-2" + }, + { + num: NumberInt("173"), + value: "https://modelzoo.co/model/jraph" + }, + { + num: NumberInt("174"), + value: "https://modelzoo.co/model/uncertainty-baselines" + }, + { + num: NumberInt("175"), + value: "https://modelzoo.co/model/pytorch-pretrained-biggan" + }, + { + num: NumberInt("176"), + value: "https://modelzoo.co/model/deeplab-pytorch" + }, + { + num: NumberInt("177"), + value: "https://modelzoo.co/model/bisenet" + }, + { + num: NumberInt("178"), + value: "https://modelzoo.co/model/srec" + }, + { + num: NumberInt("179"), + value: "https://modelzoo.co/model/began-tensorflow" + }, + { + num: NumberInt("180"), + value: "https://modelzoo.co/model/tf-ner" + }, + { + num: NumberInt("181"), + value: "https://modelzoo.co/model/ultrasound-nerve-segmentation" + }, + { + num: NumberInt("182"), + value: "https://modelzoo.co/model/chainer-dcgan" + }, + { + num: NumberInt("183"), + value: "https://modelzoo.co/model/spatial-transformer-network" + }, + { + num: NumberInt("184"), + value: "https://modelzoo.co/model/transformertts" + }, + { + num: NumberInt("185"), + value: "https://modelzoo.co/model/conv-emotion" + }, + { + num: NumberInt("186"), + value: "https://modelzoo.co/model/show-attend-and-tell-tensorflow" + }, + { + num: NumberInt("187"), + value: "https://modelzoo.co/model/res2net-pretrainedmodels" + }, + { + num: NumberInt("188"), + value: "https://modelzoo.co/model/show-attend-and-tell" + }, + { + num: NumberInt("189"), + value: "https://modelzoo.co/model/espresso" + }, + { + num: NumberInt("190"), + value: "https://modelzoo.co/model/tensorflow-yolo-v3" + }, + { + num: NumberInt("191"), + value: "https://modelzoo.co/model/deeprl-tutorials" + }, + { + num: NumberInt("192"), + value: "https://modelzoo.co/model/gan_stability" + }, + { + num: NumberInt("193"), + value: "https://modelzoo.co/model/loop" + }, + { + num: NumberInt("194"), + value: "https://modelzoo.co/model/adversarial-attacks-pytorch" + }, + { + num: NumberInt("195"), + value: "https://modelzoo.co/model/cnngesturerecognizer" + }, + { + num: NumberInt("196"), + value: "https://modelzoo.co/model/domain-transfer-network-tensorflow" + }, + { + num: NumberInt("197"), + value: "https://modelzoo.co/model/domain-transfer-network" + }, + { + num: NumberInt("198"), + value: "https://modelzoo.co/model/pconv-keras" + }, + { + num: NumberInt("199"), + value: "https://modelzoo.co/model/self-criticalpytorch" + }, + { + num: NumberInt("200"), + value: "https://modelzoo.co/model/mixnmatch" + }, + { + num: NumberInt("201"), + value: "https://modelzoo.co/model/bert-keras" + }, + { + num: NumberInt("202"), + value: "https://modelzoo.co/model/srgan-pytorch" + }, + { + num: NumberInt("203"), + value: "https://modelzoo.co/model/cleanrl" + }, + { + num: NumberInt("204"), + value: "https://modelzoo.co/model/keras-vggface" + }, + { + num: NumberInt("205"), + value: "https://modelzoo.co/model/pytorch-rl-2" + }, + { + num: NumberInt("206"), + value: "https://modelzoo.co/model/seq2seq-chatbot" + }, + { + num: NumberInt("207"), + value: "https://modelzoo.co/model/deeplab-v3" + }, + { + num: NumberInt("208"), + value: "https://modelzoo.co/model/dextr-pytorch" + }, + { + num: NumberInt("209"), + value: "https://modelzoo.co/model/pytorch-cyclegan" + }, + { + num: NumberInt("210"), + value: "https://modelzoo.co/model/jetson-reinforcement" + }, + { + num: NumberInt("211"), + value: "https://modelzoo.co/model/graph-nets" + }, + { + num: NumberInt("212"), + value: "https://modelzoo.co/model/saliency" + }, + { + num: NumberInt("213"), + value: "https://modelzoo.co/model/tps-stn-pytorch" + }, + { + num: NumberInt("214"), + value: "https://modelzoo.co/model/stackgan-v2" + }, + { + num: NumberInt("215"), + value: "https://modelzoo.co/model/pytorch-resnet-cifar10" + }, + { + num: NumberInt("216"), + value: "https://modelzoo.co/model/tf-coriander" + }, + { + num: NumberInt("217"), + value: "https://modelzoo.co/model/yolo_tensorflow-2" + }, + { + num: NumberInt("218"), + value: "https://modelzoo.co/model/tffm" + }, + { + num: NumberInt("219"), + value: "https://modelzoo.co/model/tensorflow-yolo" + }, + { + num: NumberInt("220"), + value: "https://modelzoo.co/model/pytorch-rl" + }, + { + num: NumberInt("221"), + value: "https://modelzoo.co/model/optax" + }, + { + num: NumberInt("222"), + value: "https://modelzoo.co/model/athena" + }, + { + num: NumberInt("223"), + value: "https://modelzoo.co/model/two-stream-action-recognition" + }, + { + num: NumberInt("224"), + value: "https://modelzoo.co/model/pytorch-adain-2" + }, + { + num: NumberInt("225"), + value: "https://modelzoo.co/model/benchmark-vae" + }, + { + num: NumberInt("226"), + value: "https://modelzoo.co/model/bert-for-tf2" + }, + { + num: NumberInt("227"), + value: "https://modelzoo.co/model/ssd-mxnet" + }, + { + num: NumberInt("228"), + value: "https://modelzoo.co/model/official-discogan-implementation" + }, + { + num: NumberInt("229"), + value: "https://modelzoo.co/model/fadernetworks" + }, + { + num: NumberInt("230"), + value: "https://modelzoo.co/model/pggan-pytorch" + }, + { + num: NumberInt("231"), + value: "https://modelzoo.co/model/tf-rnn-attention" + }, + { + num: NumberInt("232"), + value: "https://modelzoo.co/model/senet-tensorflow" + }, + { + num: NumberInt("233"), + value: "https://modelzoo.co/model/gangealing" + }, + { + num: NumberInt("234"), + value: "https://modelzoo.co/model/pytorch-segmentation-toolbox" + }, + { + num: NumberInt("235"), + value: "https://modelzoo.co/model/swagger-maven-plugin" + }, + { + num: NumberInt("236"), + value: "https://modelzoo.co/model/grad-cam-pytorch" + }, + { + num: NumberInt("237"), + value: "https://modelzoo.co/model/pytorch-lr-finder" + }, + { + num: NumberInt("238"), + value: "https://modelzoo.co/model/cyclegan-tensorflow-4" + }, + { + num: NumberInt("239"), + value: "https://modelzoo.co/model/seq2seq" + }, + { + num: NumberInt("240"), + value: "https://modelzoo.co/model/fastspeech" + }, + { + num: NumberInt("241"), + value: "https://modelzoo.co/model/neural-image-assessment-tensorflow" + }, + { + num: NumberInt("242"), + value: "https://modelzoo.co/model/ppo-pytorch" + }, + { + num: NumberInt("243"), + value: "https://modelzoo.co/model/torchdistill" + }, + { + num: NumberInt("244"), + value: "https://modelzoo.co/model/randwirenn" + }, + { + num: NumberInt("245"), + value: "https://modelzoo.co/model/dbnetpytorch" + }, + { + num: NumberInt("246"), + value: "https://modelzoo.co/model/faster-rcnn-mxnet" + }, + { + num: NumberInt("247"), + value: "https://modelzoo.co/model/awesome-jax-2" + }, + { + num: NumberInt("248"), + value: "https://modelzoo.co/model/bert-multi-label-text-classification" + }, + { + num: NumberInt("249"), + value: "https://modelzoo.co/model/pytorch-maml-rl" + }, + { + num: NumberInt("250"), + value: "https://modelzoo.co/model/speech-transformer" + }, + { + num: NumberInt("251"), + value: "https://modelzoo.co/model/tensorslow" + }, + { + num: NumberInt("252"), + value: "https://modelzoo.co/model/semi-supervised-pytorch" + }, + { + num: NumberInt("253"), + value: "https://modelzoo.co/model/dcscn-super-resolution" + }, + { + num: NumberInt("254"), + value: "https://modelzoo.co/model/sequence-labeling-bilstm-crf" + }, + { + num: NumberInt("255"), + value: "https://modelzoo.co/model/pytorch-original-transformer" + }, + { + num: NumberInt("256"), + value: "https://modelzoo.co/model/rl-book" + }, + { + num: NumberInt("257"), + value: "https://modelzoo.co/model/uvadlc-notebooks" + }, + { + num: NumberInt("258"), + value: "https://modelzoo.co/model/cifar-zoo" + }, + { + num: NumberInt("259"), + value: "https://modelzoo.co/model/natspeech" + }, + { + num: NumberInt("260"), + value: "https://modelzoo.co/model/tensor-sensor" + }, + { + num: NumberInt("261"), + value: "https://modelzoo.co/model/class-balanced-loss-pytorch" + }, + { + num: NumberInt("262"), + value: "https://modelzoo.co/model/deeplabv3" + }, + { + num: NumberInt("263"), + value: "https://modelzoo.co/model/speech" + }, + { + num: NumberInt("264"), + value: "https://modelzoo.co/model/android-yolo" + }, + { + num: NumberInt("265"), + value: "https://modelzoo.co/model/score-sde" + }, + { + num: NumberInt("266"), + value: "https://modelzoo.co/model/yolov3_pytorch-2" + }, + { + num: NumberInt("267"), + value: "https://modelzoo.co/model/3dmppe-posenet-release" + }, + { + num: NumberInt("268"), + value: "https://modelzoo.co/model/tensorflow-vae-gan-draw" + }, + { + num: NumberInt("269"), + value: "https://modelzoo.co/model/r-net" + }, + { + num: NumberInt("270"), + value: "https://modelzoo.co/model/dnc-tensorflow" + }, + { + num: NumberInt("271"), + value: "https://modelzoo.co/model/efficientdet" + }, + { + num: NumberInt("272"), + value: "https://modelzoo.co/model/text-summarization-tensorflow" + }, + { + num: NumberInt("273"), + value: "https://modelzoo.co/model/wgan-tensorflow" + }, + { + num: NumberInt("274"), + value: "https://modelzoo.co/model/mushroom" + }, + { + num: NumberInt("275"), + value: "https://modelzoo.co/model/densenet-tensorflow" + }, + { + num: NumberInt("276"), + value: "https://modelzoo.co/model/vnetpytorch" + }, + { + num: NumberInt("277"), + value: "https://modelzoo.co/model/keras-mmoe" + }, + { + num: NumberInt("278"), + value: "https://modelzoo.co/model/pytorch-image-classification-2" + }, + { + num: NumberInt("279"), + value: "https://modelzoo.co/model/hierarchical-attention-networks-for-document-classification" + }, + { + num: NumberInt("280"), + value: "https://modelzoo.co/model/pytorch-nested-unet" + }, + { + num: NumberInt("281"), + value: "https://modelzoo.co/model/pytorch-siamfc" + }, + { + num: NumberInt("282"), + value: "https://modelzoo.co/model/autonomous-learning-library" + }, + { + num: NumberInt("283"), + value: "https://modelzoo.co/model/n-beats" + }, + { + num: NumberInt("284"), + value: "https://modelzoo.co/model/detectron-models-for-object-detection" + }, + { + num: NumberInt("285"), + value: "https://modelzoo.co/model/gan-cls" + }, + { + num: NumberInt("286"), + value: "https://modelzoo.co/model/attgan" + }, + { + num: NumberInt("287"), + value: "https://modelzoo.co/model/pytorch-progressive_growing_of_gans" + }, + { + num: NumberInt("288"), + value: "https://modelzoo.co/model/tensorflow-value-iteration-networks" + }, + { + num: NumberInt("289"), + value: "https://modelzoo.co/model/detecto" + }, + { + num: NumberInt("290"), + value: "https://modelzoo.co/model/multilabel-timeseries-classification-with-lstm" + }, + { + num: NumberInt("291"), + value: "https://modelzoo.co/model/specaugment" + }, + { + num: NumberInt("292"), + value: "https://modelzoo.co/model/swin-transformer-pytorch" + }, + { + num: NumberInt("293"), + value: "https://modelzoo.co/model/convcrf" + }, + { + num: NumberInt("294"), + value: "https://modelzoo.co/model/neural-sp" + }, + { + num: NumberInt("295"), + value: "https://modelzoo.co/model/dropblock" + }, + { + num: NumberInt("296"), + value: "https://modelzoo.co/model/reinforcement-learning-algorithms" + }, + { + num: NumberInt("297"), + value: "https://modelzoo.co/model/deep-transfer-learning" + }, + { + num: NumberInt("298"), + value: "https://modelzoo.co/model/dann" + }, + { + num: NumberInt("299"), + value: "https://modelzoo.co/model/xlnet-pytorch" + }, + { + num: NumberInt("300"), + value: "https://modelzoo.co/model/pytorch-deform-conv-v2" + }, + { + num: NumberInt("301"), + value: "https://modelzoo.co/model/sentence-vae" + }, + { + num: NumberInt("302"), + value: "https://modelzoo.co/model/east-pytorch" + }, + { + num: NumberInt("303"), + value: "https://modelzoo.co/model/deep-metric-learning-baselines" + }, + { + num: NumberInt("304"), + value: "https://modelzoo.co/model/rl_a3c_pytorch" + }, + { + num: NumberInt("305"), + value: "https://modelzoo.co/model/indrnn" + }, + { + num: NumberInt("306"), + value: "https://modelzoo.co/model/seq2seqpytorch" + }, + { + num: NumberInt("307"), + value: "https://modelzoo.co/model/pspnet-pytorch" + }, + { + num: NumberInt("308"), + value: "https://modelzoo.co/model/jaxopt" + }, + { + num: NumberInt("309"), + value: "https://modelzoo.co/model/how-do-vits-work" + }, + { + num: NumberInt("310"), + value: "https://modelzoo.co/model/neural-caption-generator" + }, + { + num: NumberInt("311"), + value: "https://modelzoo.co/model/t2f" + }, + { + num: NumberInt("312"), + value: "https://modelzoo.co/model/densenet-tensorflow-2" + }, + { + num: NumberInt("313"), + value: "https://modelzoo.co/model/pytorch-medical-segmentation" + }, + { + num: NumberInt("314"), + value: "https://modelzoo.co/model/pytorch-inpainting-with-partial-conv" + }, + { + num: NumberInt("315"), + value: "https://modelzoo.co/model/biggan-pytorch-2" + }, + { + num: NumberInt("316"), + value: "https://modelzoo.co/model/transformer-tts" + }, + { + num: NumberInt("317"), + value: "https://modelzoo.co/model/pytorch-speaker-verification" + }, + { + num: NumberInt("318"), + value: "https://modelzoo.co/model/brain-segmentation-pytorch" + }, + { + num: NumberInt("319"), + value: "https://modelzoo.co/model/cnn-vis" + }, + { + num: NumberInt("320"), + value: "https://modelzoo.co/model/tensorflow-psenet" + }, + { + num: NumberInt("321"), + value: "https://modelzoo.co/model/lprnet-pytorch" + }, + { + num: NumberInt("322"), + value: "https://modelzoo.co/model/mtan" + }, + { + num: NumberInt("323"), + value: "https://modelzoo.co/model/text-classification-models-tf" + }, + { + num: NumberInt("324"), + value: "https://modelzoo.co/model/pytorch-soft-actor-critic" + }, + { + num: NumberInt("325"), + value: "https://modelzoo.co/model/panoptic-deeplab" + }, + { + num: NumberInt("326"), + value: "https://modelzoo.co/model/fixmatch-pytorch" + }, + { + num: NumberInt("327"), + value: "https://modelzoo.co/model/deeprl-tensorflow2" + }, + { + num: NumberInt("328"), + value: "https://modelzoo.co/model/yolov4-custom-functions" + }, + { + num: NumberInt("329"), + value: "https://modelzoo.co/model/pro_gan_pytorch" + }, + { + num: NumberInt("330"), + value: "https://modelzoo.co/model/flowavenet" + }, + { + num: NumberInt("331"), + value: "https://modelzoo.co/model/tensorflow-reinforce" + }, + { + num: NumberInt("332"), + value: "https://modelzoo.co/model/two-stream-pytorch" + }, + { + num: NumberInt("333"), + value: "https://modelzoo.co/model/conditional-pixelcnn-decoder" + }, + { + num: NumberInt("334"), + value: "https://modelzoo.co/model/rnn-nlu" + }, + { + num: NumberInt("335"), + value: "https://modelzoo.co/model/tfoptflow" + }, + { + num: NumberInt("336"), + value: "https://modelzoo.co/model/simclr-pytorch" + }, + { + num: NumberInt("337"), + value: "https://modelzoo.co/model/faster-rcnnfocal-loss" + }, + { + num: NumberInt("338"), + value: "https://modelzoo.co/model/hourglasstensorlfow" + }, + { + num: NumberInt("339"), + value: "https://modelzoo.co/model/monodepth-pytorch" + }, + { + num: NumberInt("340"), + value: "https://modelzoo.co/model/tensorflow-mnist-vae" + }, + { + num: NumberInt("341"), + value: "https://modelzoo.co/model/tfgans-comparison" + }, + { + num: NumberInt("342"), + value: "https://modelzoo.co/model/mac-network" + }, + { + num: NumberInt("343"), + value: "https://modelzoo.co/model/deepmot" + }, + { + num: NumberInt("344"), + value: "https://modelzoo.co/model/cubert" + }, + { + num: NumberInt("345"), + value: "https://modelzoo.co/model/deep-svdd-pytorch" + }, + { + num: NumberInt("346"), + value: "https://modelzoo.co/model/conv-tasnet-pytorch" + }, + { + num: NumberInt("347"), + value: "https://modelzoo.co/model/glow-pytorch-2" + }, + { + num: NumberInt("348"), + value: "https://modelzoo.co/model/pytorch-wavelets" + }, + { + num: NumberInt("349"), + value: "https://modelzoo.co/model/generative-models" + }, + { + num: NumberInt("350"), + value: "https://modelzoo.co/model/vegans" + }, + { + num: NumberInt("351"), + value: "https://modelzoo.co/model/pytorch-a3c" + }, + { + num: NumberInt("352"), + value: "https://modelzoo.co/model/few-shot-patch-based-training" + }, + { + num: NumberInt("353"), + value: "https://modelzoo.co/model/pytorch-cpn" + }, + { + num: NumberInt("354"), + value: "https://modelzoo.co/model/tp-gan-tensorflow" + }, + { + num: NumberInt("355"), + value: "https://modelzoo.co/model/psenetpytorch" + }, + { + num: NumberInt("356"), + value: "https://modelzoo.co/model/ganilla" + }, + { + num: NumberInt("357"), + value: "https://modelzoo.co/model/multi-task-learning-pytorch" + }, + { + num: NumberInt("358"), + value: "https://modelzoo.co/model/recurrent-visual-attention" + }, + { + num: NumberInt("359"), + value: "https://modelzoo.co/model/pointer-network-tensorflow" + }, + { + num: NumberInt("360"), + value: "https://modelzoo.co/model/libtorch-yolov3" + }, + { + num: NumberInt("361"), + value: "https://modelzoo.co/model/rl-algorithms" + }, + { + num: NumberInt("362"), + value: "https://modelzoo.co/model/u-net" + }, + { + num: NumberInt("363"), + value: "https://modelzoo.co/model/faceshifter" + }, + { + num: NumberInt("364"), + value: "https://modelzoo.co/model/long-range-arena" + }, + { + num: NumberInt("365"), + value: "https://modelzoo.co/model/deep-rl" + }, + { + num: NumberInt("366"), + value: "https://modelzoo.co/model/tensorflow-white-paper-notes" + }, + { + num: NumberInt("367"), + value: "https://modelzoo.co/model/human-segmentation-pytorch" + }, + { + num: NumberInt("368"), + value: "https://modelzoo.co/model/mixup" + }, + { + num: NumberInt("369"), + value: "https://modelzoo.co/model/neural-style-audio-tf" + }, + { + num: NumberInt("370"), + value: "https://modelzoo.co/model/tensorflow-char-rnn" + }, + { + num: NumberInt("371"), + value: "https://modelzoo.co/model/musicgenreclassification" + }, + { + num: NumberInt("372"), + value: "https://modelzoo.co/model/mctx" + }, + { + num: NumberInt("373"), + value: "https://modelzoo.co/model/joint-vae" + }, + { + num: NumberInt("374"), + value: "https://modelzoo.co/model/deep-learning-nlp" + }, + { + num: NumberInt("375"), + value: "https://modelzoo.co/model/rexnet" + }, + { + num: NumberInt("376"), + value: "https://modelzoo.co/model/pytorch-mnist-celeba-gan-dcgan" + }, + { + num: NumberInt("377"), + value: "https://modelzoo.co/model/pytorch-cpp-rl" + }, + { + num: NumberInt("378"), + value: "https://modelzoo.co/model/wassersteingantensorflow" + }, + { + num: NumberInt("379"), + value: "https://modelzoo.co/model/espcn" + }, + { + num: NumberInt("380"), + value: "https://modelzoo.co/model/rnn-from-scratch" + }, + { + num: NumberInt("381"), + value: "https://modelzoo.co/model/pytorch-srresnet" + }, + { + num: NumberInt("382"), + value: "https://modelzoo.co/model/neural-combinatorial-rl-pytorch" + }, + { + num: NumberInt("383"), + value: "https://modelzoo.co/model/fast-neural-style-2" + }, + { + num: NumberInt("384"), + value: "https://modelzoo.co/model/vedaseg" + }, + { + num: NumberInt("385"), + value: "https://modelzoo.co/model/ggnnpytorch-2" + }, + { + num: NumberInt("386"), + value: "https://modelzoo.co/model/gan-lib" + }, + { + num: NumberInt("387"), + value: "https://modelzoo.co/model/mnist-svhn-transfer" + }, + { + num: NumberInt("388"), + value: "https://modelzoo.co/model/nmtpytorch" + }, + { + num: NumberInt("389"), + value: "https://modelzoo.co/model/improved-training-of-wasserstein-gans" + }, + { + num: NumberInt("390"), + value: "https://modelzoo.co/model/arae" + }, + { + num: NumberInt("391"), + value: "https://modelzoo.co/model/fast-pytorch" + }, + { + num: NumberInt("392"), + value: "https://modelzoo.co/model/pytorch-adda" + }, + { + num: NumberInt("393"), + value: "https://modelzoo.co/model/jaxl" + }, + { + num: NumberInt("394"), + value: "https://modelzoo.co/model/conformer" + }, + { + num: NumberInt("395"), + value: "https://modelzoo.co/model/score-sde-pytorch" + }, + { + num: NumberInt("396"), + value: "https://modelzoo.co/model/simclr" + }, + { + num: NumberInt("397"), + value: "https://modelzoo.co/model/sparse-to-densepytorch" + }, + { + num: NumberInt("398"), + value: "https://modelzoo.co/model/piwise" + }, + { + num: NumberInt("399"), + value: "https://modelzoo.co/model/3dmppe-rootnet-release" + }, + { + num: NumberInt("400"), + value: "https://modelzoo.co/model/paragraph-vectors" + }, + { + num: NumberInt("401"), + value: "https://modelzoo.co/model/lagom" + }, + { + num: NumberInt("402"), + value: "https://modelzoo.co/model/pytorch-vdsr" + }, + { + num: NumberInt("403"), + value: "https://modelzoo.co/model/neural-image-assessment" + }, + { + num: NumberInt("404"), + value: "https://modelzoo.co/model/siamese-rpn-pytorch" + }, + { + num: NumberInt("405"), + value: "https://modelzoo.co/model/pytorch-ddpg" + }, + { + num: NumberInt("406"), + value: "https://modelzoo.co/model/pix2pix-pytorch" + }, + { + num: NumberInt("407"), + value: "https://modelzoo.co/model/one-shot-object-detection" + }, + { + num: NumberInt("408"), + value: "https://modelzoo.co/model/video-captionpytorch" + }, + { + num: NumberInt("409"), + value: "https://modelzoo.co/model/pytorch-cortexnet" + }, + { + num: NumberInt("410"), + value: "https://modelzoo.co/model/dgcnnpytorch" + }, + { + num: NumberInt("411"), + value: "https://modelzoo.co/model/adgan" + }, + { + num: NumberInt("412"), + value: "https://modelzoo.co/model/ttnet-real-time-analysis-system-for" + }, + { + num: NumberInt("413"), + value: "https://modelzoo.co/model/deepsim" + }, + { + num: NumberInt("414"), + value: "https://modelzoo.co/model/opencv_transforms" + }, + { + num: NumberInt("415"), + value: "https://modelzoo.co/model/pytorch_rvae" + }, + { + num: NumberInt("416"), + value: "https://modelzoo.co/model/pytorch-rvae" + }, + { + num: NumberInt("417"), + value: "https://modelzoo.co/model/pytorch-mnist-celeba-cgan-cdcgan" + }, + { + num: NumberInt("418"), + value: "https://modelzoo.co/model/pytorch-byol" + }, + { + num: NumberInt("419"), + value: "https://modelzoo.co/model/pytorch-trpohessian-vector-product-version" + }, + { + num: NumberInt("420"), + value: "https://modelzoo.co/model/text-to-image-synthesis" + }, + { + num: NumberInt("421"), + value: "https://modelzoo.co/model/pytorch-faster-rcnn-2" + }, + { + num: NumberInt("422"), + value: "https://modelzoo.co/model/pytorch-segmentation" + }, + { + num: NumberInt("423"), + value: "https://modelzoo.co/model/tokenlabeling" + }, + { + num: NumberInt("424"), + value: "https://modelzoo.co/model/pytorch-correlation-extension" + }, + { + num: NumberInt("425"), + value: "https://modelzoo.co/model/adversarial-examples-pytorch" + }, + { + num: NumberInt("426"), + value: "https://modelzoo.co/model/capsule-net-pytorch" + }, + { + num: NumberInt("427"), + value: "https://modelzoo.co/model/sdedit" + }, + { + num: NumberInt("428"), + value: "https://modelzoo.co/model/jaxrl" + }, + { + num: NumberInt("429"), + value: "https://modelzoo.co/model/gghl" + }, + { + num: NumberInt("430"), + value: "https://modelzoo.co/model/img_classification_pk_pytorch" + }, + { + num: NumberInt("431"), + value: "https://modelzoo.co/model/pytorch-softdtw-cuda" + }, + { + num: NumberInt("432"), + value: "https://modelzoo.co/model/transformer-pytorch" + }, + { + num: NumberInt("433"), + value: "https://modelzoo.co/model/attention-ocrpytorch" + }, + { + num: NumberInt("434"), + value: "https://modelzoo.co/model/revisiting-single-depth-estimation" + }, + { + num: NumberInt("435"), + value: "https://modelzoo.co/model/ms-g3d" + }, + { + num: NumberInt("436"), + value: "https://modelzoo.co/model/pytorch-drl" + }, + { + num: NumberInt("437"), + value: "https://modelzoo.co/model/deep-neural-networks-are-easily-fooled" + }, + { + num: NumberInt("438"), + value: "https://modelzoo.co/model/shapenet" + }, + { + num: NumberInt("439"), + value: "https://modelzoo.co/model/deconvnet" + }, + { + num: NumberInt("440"), + value: "https://modelzoo.co/model/speech-recognition" + }, + { + num: NumberInt("441"), + value: "https://modelzoo.co/model/pytorch-srgan" + }, + { + num: NumberInt("442"), + value: "https://modelzoo.co/model/prog_gans_pytorch_inference" + }, + { + num: NumberInt("443"), + value: "https://modelzoo.co/model/torch-ngp" + }, + { + num: NumberInt("444"), + value: "https://modelzoo.co/model/robustbench" + }, + { + num: NumberInt("445"), + value: "https://modelzoo.co/model/pytorch-gans" + }, + { + num: NumberInt("446"), + value: "https://modelzoo.co/model/faster_rcnn_for_dota" + }, + { + num: NumberInt("447"), + value: "https://modelzoo.co/model/pytorch-enet" + }, + { + num: NumberInt("448"), + value: "https://modelzoo.co/model/pnasnetpytorch" + }, + { + num: NumberInt("449"), + value: "https://modelzoo.co/model/nfnets-pytorch" + }, + { + num: NumberInt("450"), + value: "https://modelzoo.co/model/machin" + }, + { + num: NumberInt("451"), + value: "https://modelzoo.co/model/pytorch-vq-vae" + }, + { + num: NumberInt("452"), + value: "https://modelzoo.co/model/selecsls-pytorch" + }, + { + num: NumberInt("453"), + value: "https://modelzoo.co/model/vq-vae-pytorch" + }, + { + num: NumberInt("454"), + value: "https://modelzoo.co/model/pointrend-pytorch" + }, + { + num: NumberInt("455"), + value: "https://modelzoo.co/model/dcgan" + }, + { + num: NumberInt("456"), + value: "https://modelzoo.co/model/softmax-splatting" + }, + { + num: NumberInt("457"), + value: "https://modelzoo.co/model/fast-scnn-pytorch" + }, + { + num: NumberInt("458"), + value: "https://modelzoo.co/model/dd3d" + }, + { + num: NumberInt("459"), + value: "https://modelzoo.co/model/fmix" + }, + { + num: NumberInt("460"), + value: "https://modelzoo.co/model/seg-uncertainty" + }, + { + num: NumberInt("461"), + value: "https://modelzoo.co/model/mot-neural-solver" + }, + { + num: NumberInt("462"), + value: "https://modelzoo.co/model/delf-pytorch" + }, + { + num: NumberInt("463"), + value: "https://modelzoo.co/model/total3dunderstanding" + }, + { + num: NumberInt("464"), + value: "https://modelzoo.co/model/ai-art" + }, + { + num: NumberInt("465"), + value: "https://modelzoo.co/model/esrnn-gpu" + }, + { + num: NumberInt("466"), + value: "https://modelzoo.co/model/loss-toolbox-pytorch" + }, + { + num: NumberInt("467"), + value: "https://modelzoo.co/model/score-cam" + }, + { + num: NumberInt("468"), + value: "https://modelzoo.co/model/s-vae-pytorch" + }, + { + num: NumberInt("469"), + value: "https://modelzoo.co/model/get-started-with-jax" + }, + { + num: NumberInt("470"), + value: "https://modelzoo.co/model/flame-pytorch" + }, + { + num: NumberInt("471"), + value: "https://modelzoo.co/model/pytorch-ddpg-naf" + }, + { + num: NumberInt("472"), + value: "https://modelzoo.co/model/pytorchwavenetvocoder" + }, + { + num: NumberInt("473"), + value: "https://modelzoo.co/model/pytorch-simple-centernet-45" + }, + { + num: NumberInt("474"), + value: "https://modelzoo.co/model/3d-boundingbox" + }, + { + num: NumberInt("475"), + value: "https://modelzoo.co/model/dann-py3" + }, + { + num: NumberInt("476"), + value: "https://modelzoo.co/model/age" + }, + { + num: NumberInt("477"), + value: "https://modelzoo.co/model/learning-to-communicate-with-deep-multi-agent" + }, + { + num: NumberInt("478"), + value: "https://modelzoo.co/model/gan-tutorial" + }, + { + num: NumberInt("479"), + value: "https://modelzoo.co/model/pytorch-beam-search-decoding" + }, + { + num: NumberInt("480"), + value: "https://modelzoo.co/model/coupled-face-generation" + }, + { + num: NumberInt("481"), + value: "https://modelzoo.co/model/neural-image-assessment-2" + }, + { + num: NumberInt("482"), + value: "https://modelzoo.co/model/fastseg" + }, + { + num: NumberInt("483"), + value: "https://modelzoo.co/model/fullsubnet" + }, + { + num: NumberInt("484"), + value: "https://modelzoo.co/model/tacotron_pytorch" + }, + { + num: NumberInt("485"), + value: "https://modelzoo.co/model/wasserstein-autoencoders" + }, + { + num: NumberInt("486"), + value: "https://modelzoo.co/model/incremental-learningpytorch" + }, + { + num: NumberInt("487"), + value: "https://modelzoo.co/model/mobilenetv3-pytorch-2" + }, + { + num: NumberInt("488"), + value: "https://modelzoo.co/model/mnasnet-pytorch" + }, + { + num: NumberInt("489"), + value: "https://modelzoo.co/model/social-lstm" + }, + { + num: NumberInt("490"), + value: "https://modelzoo.co/model/high-fidelity-generative-compression" + }, + { + num: NumberInt("491"), + value: "https://modelzoo.co/model/styleganpytorch" + }, + { + num: NumberInt("492"), + value: "https://modelzoo.co/model/pytorch-unet-3" + }, + { + num: NumberInt("493"), + value: "https://modelzoo.co/model/rtm3d" + }, + { + num: NumberInt("494"), + value: "https://modelzoo.co/model/deform-conv-pytorch" + }, + { + num: NumberInt("495"), + value: "https://modelzoo.co/model/neuralcompression" + }, + { + num: NumberInt("496"), + value: "https://modelzoo.co/model/began-pytorch" + }, + { + num: NumberInt("497"), + value: "https://modelzoo.co/model/dorn-pytorch" + }, + { + num: NumberInt("498"), + value: "https://modelzoo.co/model/infogan-pytorch" + }, + { + num: NumberInt("499"), + value: "https://modelzoo.co/model/rl-games" + }, + { + num: NumberInt("500"), + value: "https://modelzoo.co/model/proxy-anchor-cvpr2020" + }, + { + num: NumberInt("501"), + value: "https://modelzoo.co/model/text-summarizer-pytorch" + }, + { + num: NumberInt("502"), + value: "https://modelzoo.co/model/supergo" + }, + { + num: NumberInt("503"), + value: "https://modelzoo.co/model/video-dataset-loading-pytorch" + }, + { + num: NumberInt("504"), + value: "https://modelzoo.co/model/pna" + }, + { + num: NumberInt("505"), + value: "https://modelzoo.co/model/dfl-cnn" + }, + { + num: NumberInt("506"), + value: "https://modelzoo.co/model/cnn-lstm-ctc" + }, + { + num: NumberInt("507"), + value: "https://modelzoo.co/model/pytorch-lapsrn" + }, + { + num: NumberInt("508"), + value: "https://modelzoo.co/model/samplernn-pytorch" + }, + { + num: NumberInt("509"), + value: "https://modelzoo.co/model/prototypical-network-pytorch" + }, + { + num: NumberInt("510"), + value: "https://modelzoo.co/model/siren" + }, + { + num: NumberInt("511"), + value: "https://modelzoo.co/model/nonauto-nmt" + }, + { + num: NumberInt("512"), + value: "https://modelzoo.co/model/wildcatpytorch" + }, + { + num: NumberInt("513"), + value: "https://modelzoo.co/model/neural-machine-translation-between-the-writings" + }, + { + num: NumberInt("514"), + value: "https://modelzoo.co/model/gst-tacotron" + }, + { + num: NumberInt("515"), + value: "https://modelzoo.co/model/stylecarigan" + }, + { + num: NumberInt("516"), + value: "https://modelzoo.co/model/pyhpc-benchmarks" + }, + { + num: NumberInt("517"), + value: "https://modelzoo.co/model/ranksrgan" + }, + { + num: NumberInt("518"), + value: "https://modelzoo.co/model/imagenet" + }, + { + num: NumberInt("519"), + value: "https://modelzoo.co/model/pytorch-image-retrieval" + }, + { + num: NumberInt("520"), + value: "https://modelzoo.co/model/pytorch-deepdream" + }, + { + num: NumberInt("521"), + value: "https://modelzoo.co/model/ssd-variants" + }, + { + num: NumberInt("522"), + value: "https://modelzoo.co/model/mandarin-tts" + }, + { + num: NumberInt("523"), + value: "https://modelzoo.co/model/unet-pytorch" + }, + { + num: NumberInt("524"), + value: "https://modelzoo.co/model/r-c3dpytorch" + }, + { + num: NumberInt("525"), + value: "https://modelzoo.co/model/adversarial-autoencoder" + }, + { + num: NumberInt("526"), + value: "https://modelzoo.co/model/my-awesome-ai-bookmarks" + }, + { + num: NumberInt("527"), + value: "https://modelzoo.co/model/pytorch-graph-rel" + }, + { + num: NumberInt("528"), + value: "https://modelzoo.co/model/deep-sad-pytorch" + }, + { + num: NumberInt("529"), + value: "https://modelzoo.co/model/mixture-of-experts" + }, + { + num: NumberInt("530"), + value: "https://modelzoo.co/model/transformer-pytorch-2" + }, + { + num: NumberInt("531"), + value: "https://modelzoo.co/model/deeplabv3pytorch" + }, + { + num: NumberInt("532"), + value: "https://modelzoo.co/model/universal-triggers" + }, + { + num: NumberInt("533"), + value: "https://modelzoo.co/model/timeseries-fastai" + }, + { + num: NumberInt("534"), + value: "https://modelzoo.co/model/portaspeech" + }, + { + num: NumberInt("535"), + value: "https://modelzoo.co/model/pytorch-mpiigaze" + }, + { + num: NumberInt("536"), + value: "https://modelzoo.co/model/fast-neural-style-pytorch" + }, + { + num: NumberInt("537"), + value: "https://modelzoo.co/model/detreg" + }, + { + num: NumberInt("538"), + value: "https://modelzoo.co/model/pointmlp-pytorch" + }, + { + num: NumberInt("539"), + value: "https://modelzoo.co/model/routing-transformer" + }, + { + num: NumberInt("540"), + value: "https://modelzoo.co/model/universalvocoding" + }, + { + num: NumberInt("541"), + value: "https://modelzoo.co/model/3dunet-pytorch" + }, + { + num: NumberInt("542"), + value: "https://modelzoo.co/model/vq-vae-speech" + }, + { + num: NumberInt("543"), + value: "https://modelzoo.co/model/lottery-ticket-hypothesis-in-pytorch" + }, + { + num: NumberInt("544"), + value: "https://modelzoo.co/model/sn-gan" + }, + { + num: NumberInt("545"), + value: "https://modelzoo.co/model/retinanet-mxnet" + }, + { + num: NumberInt("546"), + value: "https://modelzoo.co/model/pytorch-question-answering" + }, + { + num: NumberInt("547"), + value: "https://modelzoo.co/model/easy-neural-ode" + }, + { + num: NumberInt("548"), + value: "https://modelzoo.co/model/stitchfixfauxtograph" + }, + { + num: NumberInt("549"), + value: "https://modelzoo.co/model/open-source-chatbot-with-pytorch" + }, + { + num: NumberInt("550"), + value: "https://modelzoo.co/model/d3feat" + }, + { + num: NumberInt("551"), + value: "https://modelzoo.co/model/tensorflow-deeplab-lfov" + }, + { + num: NumberInt("552"), + value: "https://modelzoo.co/model/gan-sandbox" + }, + { + num: NumberInt("553"), + value: "https://modelzoo.co/model/openvino-yolov4" + }, + { + num: NumberInt("554"), + value: "https://modelzoo.co/model/cross-lingual-voice-cloning" + }, + { + num: NumberInt("555"), + value: "https://modelzoo.co/model/ppo-for-beginners" + }, + { + num: NumberInt("556"), + value: "https://modelzoo.co/model/holocron" + }, + { + num: NumberInt("557"), + value: "https://modelzoo.co/model/sketch-generation-with-drawing-process-guided" + }, + { + num: NumberInt("558"), + value: "https://modelzoo.co/model/conv-tasnet-2" + }, + { + num: NumberInt("559"), + value: "https://modelzoo.co/model/facerec" + }, + { + num: NumberInt("560"), + value: "https://modelzoo.co/model/magnetloss-pytorch" + }, + { + num: NumberInt("561"), + value: "https://modelzoo.co/model/tfwss" + }, + { + num: NumberInt("562"), + value: "https://modelzoo.co/model/hawq" + }, + { + num: NumberInt("563"), + value: "https://modelzoo.co/model/singan" + }, + { + num: NumberInt("564"), + value: "https://modelzoo.co/model/very-deep-convolutional-networks-for-large-scale" + }, + { + num: NumberInt("565"), + value: "https://modelzoo.co/model/noise2noise-pytorch" + }, + { + num: NumberInt("566"), + value: "https://modelzoo.co/model/siamese-pytorch" + }, + { + num: NumberInt("567"), + value: "https://modelzoo.co/model/cyclemlp" + }, + { + num: NumberInt("568"), + value: "https://modelzoo.co/model/gpt-2-tensorflow20" + }, + { + num: NumberInt("569"), + value: "https://modelzoo.co/model/s-vae-tf" + }, + { + num: NumberInt("570"), + value: "https://modelzoo.co/model/mobilenetv3-tensorflow" + }, + { + num: NumberInt("571"), + value: "https://modelzoo.co/model/nsfw-resnet" + }, + { + num: NumberInt("572"), + value: "https://modelzoo.co/model/jax-flows" + }, + { + num: NumberInt("573"), + value: "https://modelzoo.co/model/deepmask-pytorch" + }, + { + num: NumberInt("574"), + value: "https://modelzoo.co/model/mobilenet-v2" + }, + { + num: NumberInt("575"), + value: "https://modelzoo.co/model/lightweight-openpose" + }, + { + num: NumberInt("576"), + value: "https://modelzoo.co/model/torch_waveglow" + }, + { + num: NumberInt("577"), + value: "https://modelzoo.co/model/glcic-pytorch" + }, + { + num: NumberInt("578"), + value: "https://modelzoo.co/model/pyhf" + }, + { + num: NumberInt("579"), + value: "https://modelzoo.co/model/music-dance-video-synthesis" + }, + { + num: NumberInt("580"), + value: "https://modelzoo.co/model/arcface-tf2" + }, + { + num: NumberInt("581"), + value: "https://modelzoo.co/model/oasis" + }, + { + num: NumberInt("582"), + value: "https://modelzoo.co/model/tenet" + }, + { + num: NumberInt("583"), + value: "https://modelzoo.co/model/extending-jax" + }, + { + num: NumberInt("584"), + value: "https://modelzoo.co/model/paac" + }, + { + num: NumberInt("585"), + value: "https://modelzoo.co/model/tf2-yolov4" + }, + { + num: NumberInt("586"), + value: "https://modelzoo.co/model/sinkhorn-transformer" + }, + { + num: NumberInt("587"), + value: "https://modelzoo.co/model/svhnclassifier-tensorflow" + }, + { + num: NumberInt("588"), + value: "https://modelzoo.co/model/tf-insightface-tensorflow" + }, + { + num: NumberInt("589"), + value: "https://modelzoo.co/model/tacotron-pytorch" + }, + { + num: NumberInt("590"), + value: "https://modelzoo.co/model/arflow" + }, + { + num: NumberInt("591"), + value: "https://modelzoo.co/model/yolo-tf" + }, + { + num: NumberInt("592"), + value: "https://modelzoo.co/model/ddpg" + }, + { + num: NumberInt("593"), + value: "https://modelzoo.co/model/tfdiffeq" + }, + { + num: NumberInt("594"), + value: "https://modelzoo.co/model/diffai" + }, + { + num: NumberInt("595"), + value: "https://modelzoo.co/model/treex" + }, + { + num: NumberInt("596"), + value: "https://modelzoo.co/model/multiposenetpytorch" + }, + { + num: NumberInt("597"), + value: "https://modelzoo.co/model/nice-gan-pytorch" + }, + { + num: NumberInt("598"), + value: "https://modelzoo.co/model/gymnax" + }, + { + num: NumberInt("599"), + value: "https://modelzoo.co/model/tensorflow-xception" + }, + { + num: NumberInt("600"), + value: "https://modelzoo.co/model/funsor" + }, + { + num: NumberInt("601"), + value: "https://modelzoo.co/model/deep-graph-matching-consensus" + }, + { + num: NumberInt("602"), + value: "https://modelzoo.co/model/self-attentive-tensorflow" + }, + { + num: NumberInt("603"), + value: "https://modelzoo.co/model/bayesian-neural-network-pytorch" + }, + { + num: NumberInt("604"), + value: "https://modelzoo.co/model/gail-tf" + }, + { + num: NumberInt("605"), + value: "https://modelzoo.co/model/unet" + }, + { + num: NumberInt("606"), + value: "https://modelzoo.co/model/tensorflow-mnist-cnn" + }, + { + num: NumberInt("607"), + value: "https://modelzoo.co/model/yolact-minimal" + }, + { + num: NumberInt("608"), + value: "https://modelzoo.co/model/hierarchical-actor-critic-hac-pytorch" + }, + { + num: NumberInt("609"), + value: "https://modelzoo.co/model/osgi-jax-rs-connector" + }, + { + num: NumberInt("610"), + value: "https://modelzoo.co/model/deepmask-object-segmentation" + }, + { + num: NumberInt("611"), + value: "https://modelzoo.co/model/robot-grasp-detection" + }, + { + num: NumberInt("612"), + value: "https://modelzoo.co/model/deep_image_prior" + }, + { + num: NumberInt("613"), + value: "https://modelzoo.co/model/bilinear-cnn-tensorflow" + }, + { + num: NumberInt("614"), + value: "https://modelzoo.co/model/pt-dec" + }, + { + num: NumberInt("615"), + value: "https://modelzoo.co/model/bert4rec-vae-pytorch" + }, + { + num: NumberInt("616"), + value: "https://modelzoo.co/model/distancegan" + }, + { + num: NumberInt("617"), + value: "https://modelzoo.co/model/cp-vton-plus" + }, + { + num: NumberInt("618"), + value: "https://modelzoo.co/model/muzero-tensorflow" + }, + { + num: NumberInt("619"), + value: "https://modelzoo.co/model/gan-weight-norm" + }, + { + num: NumberInt("620"), + value: "https://modelzoo.co/model/scenechangedet" + }, + { + num: NumberInt("621"), + value: "https://modelzoo.co/model/mimo-unet" + }, + { + num: NumberInt("622"), + value: "https://modelzoo.co/model/ott" + }, + { + num: NumberInt("623"), + value: "https://modelzoo.co/model/snli-entailment" + }, + { + num: NumberInt("624"), + value: "https://modelzoo.co/model/fots-tf" + }, + { + num: NumberInt("625"), + value: "https://modelzoo.co/model/scene-generation" + }, + { + num: NumberInt("626"), + value: "https://modelzoo.co/model/attentions" + }, + { + num: NumberInt("627"), + value: "https://modelzoo.co/model/jaxnet" + }, + { + num: NumberInt("628"), + value: "https://modelzoo.co/model/active-contour-loss" + }, + { + num: NumberInt("629"), + value: "https://modelzoo.co/model/attention-is-all-you-need-paper" + }, + { + num: NumberInt("630"), + value: "https://modelzoo.co/model/prompt-tuning" + }, + { + num: NumberInt("631"), + value: "https://modelzoo.co/model/tensorflow-stacked-denoising-autoencoder" + }, + { + num: NumberInt("632"), + value: "https://modelzoo.co/model/vision-transformer" + }, + { + num: NumberInt("633"), + value: "https://modelzoo.co/model/keras-lmu" + }, + { + num: NumberInt("634"), + value: "https://modelzoo.co/model/cluener2020" + }, + { + num: NumberInt("635"), + value: "https://modelzoo.co/model/facenet-pytorch-glint360k" + }, + { + num: NumberInt("636"), + value: "https://modelzoo.co/model/v2v-posenet-pytorch" + }, + { + num: NumberInt("637"), + value: "https://modelzoo.co/model/deeplab-v2-resnet-101" + }, + { + num: NumberInt("638"), + value: "https://modelzoo.co/model/adv-attack-capsnet" + }, + { + num: NumberInt("639"), + value: "https://modelzoo.co/model/6drepnet" + }, + { + num: NumberInt("640"), + value: "https://modelzoo.co/model/tensorflow-rl" + }, + { + num: NumberInt("641"), + value: "https://modelzoo.co/model/ntm" + }, + { + num: NumberInt("642"), + value: "https://modelzoo.co/model/pytorch-classification-uncertainty" + }, + { + num: NumberInt("643"), + value: "https://modelzoo.co/model/few-shot-meta-learning" + }, + { + num: NumberInt("644"), + value: "https://modelzoo.co/model/tensorflow-mnist-gan-dcgan" + }, + { + num: NumberInt("645"), + value: "https://modelzoo.co/model/a-convolutional-recurrent-neural-network-for" + }, + { + num: NumberInt("646"), + value: "https://modelzoo.co/model/faststyle" + }, + { + num: NumberInt("647"), + value: "https://modelzoo.co/model/multihead-siamese-nets" + }, + { + num: NumberInt("648"), + value: "https://modelzoo.co/model/conv-tasnet" + }, + { + num: NumberInt("649"), + value: "https://modelzoo.co/model/svhnclassifier" + }, + { + num: NumberInt("650"), + value: "https://modelzoo.co/model/vgae-pytorch" + }, + { + num: NumberInt("651"), + value: "https://modelzoo.co/model/adafm" + }, + { + num: NumberInt("652"), + value: "https://modelzoo.co/model/pytorch-gan-collections" + }, + { + num: NumberInt("653"), + value: "https://modelzoo.co/model/gmvae" + }, + { + num: NumberInt("654"), + value: "https://modelzoo.co/model/pytorch-deephash" + }, + { + num: NumberInt("655"), + value: "https://modelzoo.co/model/pro-gnn" + }, + { + num: NumberInt("656"), + value: "https://modelzoo.co/model/tf-faster-rcnn" + }, + { + num: NumberInt("657"), + value: "https://modelzoo.co/model/fast-weights" + }, + { + num: NumberInt("658"), + value: "https://modelzoo.co/model/eye-tracker" + }, + { + num: NumberInt("659"), + value: "https://modelzoo.co/model/capsnet-traffic-sign-classifier" + }, + { + num: NumberInt("660"), + value: "https://modelzoo.co/model/vdcnn" + }, + { + num: NumberInt("661"), + value: "https://modelzoo.co/model/viton-hd" + }, + { + num: NumberInt("662"), + value: "https://modelzoo.co/model/mask-guided-portrait-editing" + }, + { + num: NumberInt("663"), + value: "https://modelzoo.co/model/dss-pytorch" + }, + { + num: NumberInt("664"), + value: "https://modelzoo.co/model/generative-adversarial-networks-101" + }, + { + num: NumberInt("665"), + value: "https://modelzoo.co/model/pkd-for-bert-model-compression" + }, + { + num: NumberInt("666"), + value: "https://modelzoo.co/model/percepnet" + }, + { + num: NumberInt("667"), + value: "https://modelzoo.co/model/reptile-pytorch" + }, + { + num: NumberInt("668"), + value: "https://modelzoo.co/model/pix2pix-film" + }, + { + num: NumberInt("669"), + value: "https://modelzoo.co/model/instance-segmentation-with-discriminative-loss-tensorflow" + }, + { + num: NumberInt("670"), + value: "https://modelzoo.co/model/maml-tensorflow-2" + }, + { + num: NumberInt("671"), + value: "https://modelzoo.co/model/palette-image-to-image-diffusion-models" + }, + { + num: NumberInt("672"), + value: "https://modelzoo.co/model/visual-interaction-networks-pytorch-2" + }, + { + num: NumberInt("673"), + value: "https://modelzoo.co/model/neural-processes-pytorch" + }, + { + num: NumberInt("674"), + value: "https://modelzoo.co/model/imagenet-tensorflow" + }, + { + num: NumberInt("675"), + value: "https://modelzoo.co/model/deep-image-analogy-pytorch" + }, + { + num: NumberInt("676"), + value: "https://modelzoo.co/model/listen-attend-spell" + }, + { + num: NumberInt("677"), + value: "https://modelzoo.co/model/lsoftmax-pytorch" + }, + { + num: NumberInt("678"), + value: "https://modelzoo.co/model/keras-unet-plus-plus" + }, + { + num: NumberInt("679"), + value: "https://modelzoo.co/model/capsule-net-pytorch-2" + }, + { + num: NumberInt("680"), + value: "https://modelzoo.co/model/jaxon-3" + }, + { + num: NumberInt("681"), + value: "https://modelzoo.co/model/shufflenetv2-pytorch" + }, + { + num: NumberInt("682"), + value: "https://modelzoo.co/model/keraspersonlab" + }, + { + num: NumberInt("683"), + value: "https://modelzoo.co/model/keras-adamw" + }, + { + num: NumberInt("684"), + value: "https://modelzoo.co/model/wgan-gp-pytorch" + }, + { + num: NumberInt("685"), + value: "https://modelzoo.co/model/fq-gan" + }, + { + num: NumberInt("686"), + value: "https://modelzoo.co/model/fast-rcnn-tensorflow" + }, + { + num: NumberInt("687"), + value: "https://modelzoo.co/model/ccnet-pure-pytorch" + }, + { + num: NumberInt("688"), + value: "https://modelzoo.co/model/mdistiller" + }, + { + num: NumberInt("689"), + value: "https://modelzoo.co/model/gradcache" + }, + { + num: NumberInt("690"), + value: "https://modelzoo.co/model/pytorch-seq2seq-intent-parsing" + }, + { + num: NumberInt("691"), + value: "https://modelzoo.co/model/dnn-based-source-separation" + }, + { + num: NumberInt("692"), + value: "https://modelzoo.co/model/lenet-5" + }, + { + num: NumberInt("693"), + value: "https://modelzoo.co/model/hash-embeddings" + }, + { + num: NumberInt("694"), + value: "https://modelzoo.co/model/easy-faster-rcnnpytorch" + }, + { + num: NumberInt("695"), + value: "https://modelzoo.co/model/regnet" + }, + { + num: NumberInt("696"), + value: "https://modelzoo.co/model/pix2pixbeganpytorch" + }, + { + num: NumberInt("697"), + value: "https://modelzoo.co/model/soft-actor-critic-and-extensions" + }, + { + num: NumberInt("698"), + value: "https://modelzoo.co/model/tf-dcgan" + }, + { + num: NumberInt("699"), + value: "https://modelzoo.co/model/pytorch-dppo" + }, + { + num: NumberInt("700"), + value: "https://modelzoo.co/model/tdnn" + }, + { + num: NumberInt("701"), + value: "https://modelzoo.co/model/dtapytorch" + }, + { + num: NumberInt("702"), + value: "https://modelzoo.co/model/adversarial-patch" + }, + { + num: NumberInt("703"), + value: "https://modelzoo.co/model/complex-yolov3" + }, + { + num: NumberInt("704"), + value: "https://modelzoo.co/model/fastspeech2-pytorch" + }, + { + num: NumberInt("705"), + value: "https://modelzoo.co/model/inq-pytorch" + }, + { + num: NumberInt("706"), + value: "https://modelzoo.co/model/mildlyoverfitted" + }, + { + num: NumberInt("707"), + value: "https://modelzoo.co/model/pytorch-dual-learning" + }, + { + num: NumberInt("708"), + value: "https://modelzoo.co/model/multidim-positional-encoding" + }, + { + num: NumberInt("709"), + value: "https://modelzoo.co/model/interaction-networks-tensorflow" + }, + { + num: NumberInt("710"), + value: "https://modelzoo.co/model/tfvos" + }, + { + num: NumberInt("711"), + value: "https://modelzoo.co/model/xcenternet" + }, + { + num: NumberInt("712"), + value: "https://modelzoo.co/model/pytorch-layoutnet" + }, + { + num: NumberInt("713"), + value: "https://modelzoo.co/model/houghnet" + }, + { + num: NumberInt("714"), + value: "https://modelzoo.co/model/adversarial-semisupervised-semantic-segmentation" + }, + { + num: NumberInt("715"), + value: "https://modelzoo.co/model/ufo" + }, + { + num: NumberInt("716"), + value: "https://modelzoo.co/model/progressive-growing-of-gans-tensorflow" + }, + { + num: NumberInt("717"), + value: "https://modelzoo.co/model/faster-rcnn_tensorflow-2" + }, + { + num: NumberInt("718"), + value: "https://modelzoo.co/model/pytorch-image-comp-rnn" + }, + { + num: NumberInt("719"), + value: "https://modelzoo.co/model/ngcf-pytorch" + }, + { + num: NumberInt("720"), + value: "https://modelzoo.co/model/meta-learning-lstm-pytorch" + }, + { + num: NumberInt("721"), + value: "https://modelzoo.co/model/ir-net" + }, + { + num: NumberInt("722"), + value: "https://modelzoo.co/model/focal-loss" + }, + { + num: NumberInt("723"), + value: "https://modelzoo.co/model/torchcrepe" + }, + { + num: NumberInt("724"), + value: "https://modelzoo.co/model/soft-intro-vae-pytorch" + }, + { + num: NumberInt("725"), + value: "https://modelzoo.co/model/role2vec" + }, + { + num: NumberInt("726"), + value: "https://modelzoo.co/model/unsupervised-depth-completion-visual-inertial-odometry" + }, + { + num: NumberInt("727"), + value: "https://modelzoo.co/model/twitter-sentiment-cnn" + }, + { + num: NumberInt("728"), + value: "https://modelzoo.co/model/sunets" + }, + { + num: NumberInt("729"), + value: "https://modelzoo.co/model/alphagan-matting" + }, + { + num: NumberInt("730"), + value: "https://modelzoo.co/model/hififace" + }, + { + num: NumberInt("731"), + value: "https://modelzoo.co/model/pytorch-pos-tagging" + }, + { + num: NumberInt("732"), + value: "https://modelzoo.co/model/tensorflow-mnist-cvae" + }, + { + num: NumberInt("733"), + value: "https://modelzoo.co/model/video2tfrecord" + }, + { + num: NumberInt("734"), + value: "https://modelzoo.co/model/video-super-resolution" + }, + { + num: NumberInt("735"), + value: "https://modelzoo.co/model/phasen" + }, + { + num: NumberInt("736"), + value: "https://modelzoo.co/model/dbcnn-pytorch" + }, + { + num: NumberInt("737"), + value: "https://modelzoo.co/model/perceiver-io-pytorch" + }, + { + num: NumberInt("738"), + value: "https://modelzoo.co/model/dagan" + }, + { + num: NumberInt("739"), + value: "https://modelzoo.co/model/rcnn-text-classification" + }, + { + num: NumberInt("740"), + value: "https://modelzoo.co/model/semantic-image-synthesis-via-adversarial-learning" + }, + { + num: NumberInt("741"), + value: "https://modelzoo.co/model/capsnet-2" + }, + { + num: NumberInt("742"), + value: "https://modelzoo.co/model/rfdnet" + }, + { + num: NumberInt("743"), + value: "https://modelzoo.co/model/pointnet" + }, + { + num: NumberInt("744"), + value: "https://modelzoo.co/model/protest-detection-violence-estimation" + }, + { + num: NumberInt("745"), + value: "https://modelzoo.co/model/rdn-tensorflow" + }, + { + num: NumberInt("746"), + value: "https://modelzoo.co/model/deeplab-v3-plus-cityscapes" + }, + { + num: NumberInt("747"), + value: "https://modelzoo.co/model/keras-coordconv" + }, + { + num: NumberInt("748"), + value: "https://modelzoo.co/model/conversation-tensorflow" + }, + { + num: NumberInt("749"), + value: "https://modelzoo.co/model/graph2vec-tf" + }, + { + num: NumberInt("750"), + value: "https://modelzoo.co/model/tensorflow-yolo3" + }, + { + num: NumberInt("751"), + value: "https://modelzoo.co/model/srgan-pytorch-2" + }, + { + num: NumberInt("752"), + value: "https://modelzoo.co/model/tensorflow-pix2pix-2" + }, + { + num: NumberInt("753"), + value: "https://modelzoo.co/model/maxl" + }, + { + num: NumberInt("754"), + value: "https://modelzoo.co/model/aspect-level-sentiment" + }, + { + num: NumberInt("755"), + value: "https://modelzoo.co/model/codeslam" + }, + { + num: NumberInt("756"), + value: "https://modelzoo.co/model/sam-detr" + }, + { + num: NumberInt("757"), + value: "https://modelzoo.co/model/pytorch-sac-ae" + }, + { + num: NumberInt("758"), + value: "https://modelzoo.co/model/lipnet-pytorch" + }, + { + num: NumberInt("759"), + value: "https://modelzoo.co/model/graphrec-pytorch" + }, + { + num: NumberInt("760"), + value: "https://modelzoo.co/model/jaxlie" + }, + { + num: NumberInt("761"), + value: "https://modelzoo.co/model/soundnet-tensorflow" + }, + { + num: NumberInt("762"), + value: "https://modelzoo.co/model/neuralpull" + }, + { + num: NumberInt("763"), + value: "https://modelzoo.co/model/oneshottranslation" + }, + { + num: NumberInt("764"), + value: "https://modelzoo.co/model/deeplabv3-mobilenetv2-pytorch" + }, + { + num: NumberInt("765"), + value: "https://modelzoo.co/model/uctransnet" + }, + { + num: NumberInt("766"), + value: "https://modelzoo.co/model/flax-61" + }, + { + num: NumberInt("767"), + value: "https://modelzoo.co/model/reinforcement-learning" + }, + { + num: NumberInt("768"), + value: "https://modelzoo.co/model/restvertx" + }, + { + num: NumberInt("769"), + value: "https://modelzoo.co/model/samplernn" + }, + { + num: NumberInt("770"), + value: "https://modelzoo.co/model/fast-transformer" + }, + { + num: NumberInt("771"), + value: "https://modelzoo.co/model/deep-clustering" + }, + { + num: NumberInt("772"), + value: "https://modelzoo.co/model/keras-insightface" + }, + { + num: NumberInt("773"), + value: "https://modelzoo.co/model/parallel-tacotron2" + }, + { + num: NumberInt("774"), + value: "https://modelzoo.co/model/bert-relation-classification" + }, + { + num: NumberInt("775"), + value: "https://modelzoo.co/model/visual-attribution" + }, + { + num: NumberInt("776"), + value: "https://modelzoo.co/model/bvae-tts" + }, + { + num: NumberInt("777"), + value: "https://modelzoo.co/model/mnemonicreader" + }, + { + num: NumberInt("778"), + value: "https://modelzoo.co/model/maskgit" + }, + { + num: NumberInt("779"), + value: "https://modelzoo.co/model/dilation-tensorflow" + }, + { + num: NumberInt("780"), + value: "https://modelzoo.co/model/pytorch-cutpaste" + }, + { + num: NumberInt("781"), + value: "https://modelzoo.co/model/pytorch-smoothgrad-2" + }, + { + num: NumberInt("782"), + value: "https://modelzoo.co/model/snail-pytorch" + }, + { + num: NumberInt("783"), + value: "https://modelzoo.co/model/gdwct" + }, + { + num: NumberInt("784"), + value: "https://modelzoo.co/model/deep-auto-punctuation-pytorch" + }, + { + num: NumberInt("785"), + value: "https://modelzoo.co/model/ssd-pytorch" + }, + { + num: NumberInt("786"), + value: "https://modelzoo.co/model/feature-selective-anchor-free-module-for" + }, + { + num: NumberInt("787"), + value: "https://modelzoo.co/model/medical-report-generation" + }, + { + num: NumberInt("788"), + value: "https://modelzoo.co/model/360sd-net" + }, + { + num: NumberInt("789"), + value: "https://modelzoo.co/model/mobilenetv2tvm-supported" + }, + { + num: NumberInt("790"), + value: "https://modelzoo.co/model/invdn" + }, + { + num: NumberInt("791"), + value: "https://modelzoo.co/model/ws-dan-pytorch" + }, + { + num: NumberInt("792"), + value: "https://modelzoo.co/model/adamwr" + }, + { + num: NumberInt("793"), + value: "https://modelzoo.co/model/bandit-nmt" + }, + { + num: NumberInt("794"), + value: "https://modelzoo.co/model/deeplearningai-pytorch" + }, + { + num: NumberInt("795"), + value: "https://modelzoo.co/model/normalizing-flows" + }, + { + num: NumberInt("796"), + value: "https://modelzoo.co/model/pytorch-pyramid-feature-attention-network-for" + }, + { + num: NumberInt("797"), + value: "https://modelzoo.co/model/ifan" + }, + { + num: NumberInt("798"), + value: "https://modelzoo.co/model/neuron-selectivity-transfer" + }, + { + num: NumberInt("799"), + value: "https://modelzoo.co/model/rebias" + }, + { + num: NumberInt("800"), + value: "https://modelzoo.co/model/stargan-voice-conversion-2" + }, + { + num: NumberInt("801"), + value: "https://modelzoo.co/model/mff-pytorch" + }, + { + num: NumberInt("802"), + value: "https://modelzoo.co/model/eegnet" + }, + { + num: NumberInt("803"), + value: "https://modelzoo.co/model/aunets" + }, + { + num: NumberInt("804"), + value: "https://modelzoo.co/model/factorized-tdnn" + }, + { + num: NumberInt("805"), + value: "https://modelzoo.co/model/moco" + }, + { + num: NumberInt("806"), + value: "https://modelzoo.co/model/torch-ac" + }, + { + num: NumberInt("807"), + value: "https://modelzoo.co/model/pygoturn" + }, + { + num: NumberInt("808"), + value: "https://modelzoo.co/model/everypixelmatters" + }, + { + num: NumberInt("809"), + value: "https://modelzoo.co/model/flaxmodels" + }, + { + num: NumberInt("810"), + value: "https://modelzoo.co/model/siam-nestedunet" + }, + { + num: NumberInt("811"), + value: "https://modelzoo.co/model/hierarchical-attention-network" + }, + { + num: NumberInt("812"), + value: "https://modelzoo.co/model/recsys-pytorch" + }, + { + num: NumberInt("813"), + value: "https://modelzoo.co/model/single-human-parsing-lip" + }, + { + num: NumberInt("814"), + value: "https://modelzoo.co/model/mtad-gat-pytorch" + }, + { + num: NumberInt("815"), + value: "https://modelzoo.co/model/bert-ocrpytorch" + }, + { + num: NumberInt("816"), + value: "https://modelzoo.co/model/repsurf" + }, + { + num: NumberInt("817"), + value: "https://modelzoo.co/model/cbam-tensorflow" + }, + { + num: NumberInt("818"), + value: "https://modelzoo.co/model/pytorch-spline-conv" + }, + { + num: NumberInt("819"), + value: "https://modelzoo.co/model/viewal" + }, + { + num: NumberInt("820"), + value: "https://modelzoo.co/model/tree-math" + }, + { + num: NumberInt("821"), + value: "https://modelzoo.co/model/sasrecpytorch" + }, + { + num: NumberInt("822"), + value: "https://modelzoo.co/model/mxnmt" + }, + { + num: NumberInt("823"), + value: "https://modelzoo.co/model/mnemonic-descent-method" + }, + { + num: NumberInt("824"), + value: "https://modelzoo.co/model/openai-clip" + }, + { + num: NumberInt("825"), + value: "https://modelzoo.co/model/chainer_examples" + }, + { + num: NumberInt("826"), + value: "https://modelzoo.co/model/ciphergan" + }, + { + num: NumberInt("827"), + value: "https://modelzoo.co/model/captiongen" + }, + { + num: NumberInt("828"), + value: "https://modelzoo.co/model/visualizing-cnns-for-monocular-depth-estimation" + }, + { + num: NumberInt("829"), + value: "https://modelzoo.co/model/latent-pose-reenactment" + }, + { + num: NumberInt("830"), + value: "https://modelzoo.co/model/sightseq" + }, + { + num: NumberInt("831"), + value: "https://modelzoo.co/model/jaxfg" + }, + { + num: NumberInt("832"), + value: "https://modelzoo.co/model/deeply-recursive-cnn-tf" + }, + { + num: NumberInt("833"), + value: "https://modelzoo.co/model/facedetector" + }, + { + num: NumberInt("834"), + value: "https://modelzoo.co/model/perceptualgan" + }, + { + num: NumberInt("835"), + value: "https://modelzoo.co/model/keras-oneclassanomalydetection" + }, + { + num: NumberInt("836"), + value: "https://modelzoo.co/model/carla-ilqr-mpc" + }, + { + num: NumberInt("837"), + value: "https://modelzoo.co/model/drit-tensorflow" + }, + { + num: NumberInt("838"), + value: "https://modelzoo.co/model/rnn-text-classification-tf" + }, + { + num: NumberInt("839"), + value: "https://modelzoo.co/model/m-nmf" + }, + { + num: NumberInt("840"), + value: "https://modelzoo.co/model/virtual-adversarial-training" + }, + { + num: NumberInt("841"), + value: "https://modelzoo.co/model/univnet" + }, + { + num: NumberInt("842"), + value: "https://modelzoo.co/model/masktrack" + }, + { + num: NumberInt("843"), + value: "https://modelzoo.co/model/musemorphose" + }, + { + num: NumberInt("844"), + value: "https://modelzoo.co/model/wadiqam" + }, + { + num: NumberInt("845"), + value: "https://modelzoo.co/model/mindiffusion" + }, + { + num: NumberInt("846"), + value: "https://modelzoo.co/model/bayesde" + }, + { + num: NumberInt("847"), + value: "https://modelzoo.co/model/pyg-autoscale" + }, + { + num: NumberInt("848"), + value: "https://modelzoo.co/model/streamingspeakerdiarization" + }, + { + num: NumberInt("849"), + value: "https://modelzoo.co/model/l2p" + }, + { + num: NumberInt("850"), + value: "https://modelzoo.co/model/dcnets" + }, + { + num: NumberInt("851"), + value: "https://modelzoo.co/model/person-reid" + }, + { + num: NumberInt("852"), + value: "https://modelzoo.co/model/dsfd-tensorflow" + }, + { + num: NumberInt("853"), + value: "https://modelzoo.co/model/wavevae" + }, + { + num: NumberInt("854"), + value: "https://modelzoo.co/model/image-similarity-using-deep-ranking" + }, + { + num: NumberInt("855"), + value: "https://modelzoo.co/model/fasterrcnn-pytorch" + }, + { + num: NumberInt("856"), + value: "https://modelzoo.co/model/dr-gan-by-pytorch" + }, + { + num: NumberInt("857"), + value: "https://modelzoo.co/model/famos" + }, + { + num: NumberInt("858"), + value: "https://modelzoo.co/model/tacotron2-pytorch" + }, + { + num: NumberInt("859"), + value: "https://modelzoo.co/model/tf-layer-norm" + }, + { + num: NumberInt("860"), + value: "https://modelzoo.co/model/paysage" + }, + { + num: NumberInt("861"), + value: "https://modelzoo.co/model/pytorch-psetae" + }, + { + num: NumberInt("862"), + value: "https://modelzoo.co/model/docee" + }, + { + num: NumberInt("863"), + value: "https://modelzoo.co/model/efficientnet-jax" + }, + { + num: NumberInt("864"), + value: "https://modelzoo.co/model/portrait-matting-unet-flask" + }, + { + num: NumberInt("865"), + value: "https://modelzoo.co/model/changeformer" + }, + { + num: NumberInt("866"), + value: "https://modelzoo.co/model/3d-boundingbox-pytorch" + }, + { + num: NumberInt("867"), + value: "https://modelzoo.co/model/indrnn-pytorch" + }, + { + num: NumberInt("868"), + value: "https://modelzoo.co/model/deep-alignment-network-tensorflow" + }, + { + num: NumberInt("869"), + value: "https://modelzoo.co/model/back2futurepytorch" + }, + { + num: NumberInt("870"), + value: "https://modelzoo.co/model/waveflow" + }, + { + num: NumberInt("871"), + value: "https://modelzoo.co/model/multi-person-tracker" + }, + { + num: NumberInt("872"), + value: "https://modelzoo.co/model/mano" + }, + { + num: NumberInt("873"), + value: "https://modelzoo.co/model/dialogue-understanding" + }, + { + num: NumberInt("874"), + value: "https://modelzoo.co/model/image-embedding-learning-gluon" + }, + { + num: NumberInt("875"), + value: "https://modelzoo.co/model/pytorch-detect-to-track" + }, + { + num: NumberInt("876"), + value: "https://modelzoo.co/model/agentformer" + }, + { + num: NumberInt("877"), + value: "https://modelzoo.co/model/qatm-pytorch" + }, + { + num: NumberInt("878"), + value: "https://modelzoo.co/model/efficient-vdvae" + }, + { + num: NumberInt("879"), + value: "https://modelzoo.co/model/a-convolutional-neural-network-cascade-for" + }, + { + num: NumberInt("880"), + value: "https://modelzoo.co/model/bsconv" + }, + { + num: NumberInt("881"), + value: "https://modelzoo.co/model/samsung-drl-code" + }, + { + num: NumberInt("882"), + value: "https://modelzoo.co/model/restoring-extremely-dark-images-in-real" + }, + { + num: NumberInt("883"), + value: "https://modelzoo.co/model/pytorch-lightning-gans" + }, + { + num: NumberInt("884"), + value: "https://modelzoo.co/model/yolo-v4-tfkeras" + }, + { + num: NumberInt("885"), + value: "https://modelzoo.co/model/torch-backbones" + }, + { + num: NumberInt("886"), + value: "https://modelzoo.co/model/rgcn" + }, + { + num: NumberInt("887"), + value: "https://modelzoo.co/model/pytorch-shake-shake" + }, + { + num: NumberInt("888"), + value: "https://modelzoo.co/model/tacotron-pytorch-2" + }, + { + num: NumberInt("889"), + value: "https://modelzoo.co/model/stylespeech" + }, + { + num: NumberInt("890"), + value: "https://modelzoo.co/model/vitgan" + }, + { + num: NumberInt("891"), + value: "https://modelzoo.co/model/jax-cosmo" + }, + { + num: NumberInt("892"), + value: "https://modelzoo.co/model/evaluating-bdl" + }, + { + num: NumberInt("893"), + value: "https://modelzoo.co/model/pytorch-image-translation-gans" + }, + { + num: NumberInt("894"), + value: "https://modelzoo.co/model/lffont" + }, + { + num: NumberInt("895"), + value: "https://modelzoo.co/model/jax-verify" + }, + { + num: NumberInt("896"), + value: "https://modelzoo.co/model/vsr-duf-reimplement" + }, + { + num: NumberInt("897"), + value: "https://modelzoo.co/model/cbam-tensorflow-slim" + }, + { + num: NumberInt("898"), + value: "https://modelzoo.co/model/dsq" + }, + { + num: NumberInt("899"), + value: "https://modelzoo.co/model/stagewise-knowledge-distillation" + }, + { + num: NumberInt("900"), + value: "https://modelzoo.co/model/capsnet-guide-pytorch" + }, + { + num: NumberInt("901"), + value: "https://modelzoo.co/model/ddc-transfer-learning" + }, + { + num: NumberInt("902"), + value: "https://modelzoo.co/model/personlab-tf" + }, + { + num: NumberInt("903"), + value: "https://modelzoo.co/model/unified-gan-tensorflow" + }, + { + num: NumberInt("904"), + value: "https://modelzoo.co/model/recursive-cnns" + }, + { + num: NumberInt("905"), + value: "https://modelzoo.co/model/cost-aggregation-transformers" + }, + { + num: NumberInt("906"), + value: "https://modelzoo.co/model/local-relational-nets" + }, + { + num: NumberInt("907"), + value: "https://modelzoo.co/model/stereonet" + }, + { + num: NumberInt("908"), + value: "https://modelzoo.co/model/neural-process-family" + }, + { + num: NumberInt("909"), + value: "https://modelzoo.co/model/pytorch-polygon-rnn" + }, + { + num: NumberInt("910"), + value: "https://modelzoo.co/model/autoencoder-based-communication-system" + }, + { + num: NumberInt("911"), + value: "https://modelzoo.co/model/vib-pytorch" + }, + { + num: NumberInt("912"), + value: "https://modelzoo.co/model/dst-cbc" + }, + { + num: NumberInt("913"), + value: "https://modelzoo.co/model/movenetpytorch" + }, + { + num: NumberInt("914"), + value: "https://modelzoo.co/model/panoptic-reconstruction" + }, + { + num: NumberInt("915"), + value: "https://modelzoo.co/model/pnasnettf" + }, + { + num: NumberInt("916"), + value: "https://modelzoo.co/model/cogan-tensorflow" + }, + { + num: NumberInt("917"), + value: "https://modelzoo.co/model/mnasnet-keras-tensorflow" + }, + { + num: NumberInt("918"), + value: "https://modelzoo.co/model/pytorch-dorefanet" + }, + { + num: NumberInt("919"), + value: "https://modelzoo.co/model/pytorch-pose-proposal-networks" + }, + { + num: NumberInt("920"), + value: "https://modelzoo.co/model/zero-dce" + }, + { + num: NumberInt("921"), + value: "https://modelzoo.co/model/yolov5-deepsort-tensorrt" + }, + { + num: NumberInt("922"), + value: "https://modelzoo.co/model/pytorch-mppi" + }, + { + num: NumberInt("923"), + value: "https://modelzoo.co/model/tensorflow-neat" + }, + { + num: NumberInt("924"), + value: "https://modelzoo.co/model/pytorch_image_classifier" + }, + { + num: NumberInt("925"), + value: "https://modelzoo.co/model/corrpm" + }, + { + num: NumberInt("926"), + value: "https://modelzoo.co/model/pytorch-basic-gans" + }, + { + num: NumberInt("927"), + value: "https://modelzoo.co/model/jackson-jaxrs-providers" + }, + { + num: NumberInt("928"), + value: "https://modelzoo.co/model/segmentation" + }, + { + num: NumberInt("929"), + value: "https://modelzoo.co/model/ppo-tensorflow" + }, + { + num: NumberInt("930"), + value: "https://modelzoo.co/model/pytorch-pcn" + }, + { + num: NumberInt("931"), + value: "https://modelzoo.co/model/segan" + }, + { + num: NumberInt("932"), + value: "https://modelzoo.co/model/d3featpytorch" + }, + { + num: NumberInt("933"), + value: "https://modelzoo.co/model/diffgan-tts" + }, + { + num: NumberInt("934"), + value: "https://modelzoo.co/model/tf-segnet" + }, + { + num: NumberInt("935"), + value: "https://modelzoo.co/model/bicyclegan-pytorch" + }, + { + num: NumberInt("936"), + value: "https://modelzoo.co/model/pytorch-dann-2" + }, + { + num: NumberInt("937"), + value: "https://modelzoo.co/model/incremental-learning" + }, + { + num: NumberInt("938"), + value: "https://modelzoo.co/model/rfc" + }, + { + num: NumberInt("939"), + value: "https://modelzoo.co/model/icnet-pytorch" + }, + { + num: NumberInt("940"), + value: "https://modelzoo.co/model/tf-texture-net" + }, + { + num: NumberInt("941"), + value: "https://modelzoo.co/model/diffsinger" + }, + { + num: NumberInt("942"), + value: "https://modelzoo.co/model/jittor-mlp" + }, + { + num: NumberInt("943"), + value: "https://modelzoo.co/model/rl-examples" + }, + { + num: NumberInt("944"), + value: "https://modelzoo.co/model/insightface-tensorflow" + }, + { + num: NumberInt("945"), + value: "https://modelzoo.co/model/dialog-nlu" + }, + { + num: NumberInt("946"), + value: "https://modelzoo.co/model/categorical-dqn" + }, + { + num: NumberInt("947"), + value: "https://modelzoo.co/model/efficientnet-pytorch-2" + }, + { + num: NumberInt("948"), + value: "https://modelzoo.co/model/pytorch-res2net" + }, + { + num: NumberInt("949"), + value: "https://modelzoo.co/model/tacotron-3" + }, + { + num: NumberInt("950"), + value: "https://modelzoo.co/model/100-days-of-ml-code" + }, + { + num: NumberInt("951"), + value: "https://modelzoo.co/model/tfvaegan" + }, + { + num: NumberInt("952"), + value: "https://modelzoo.co/model/pytorch-violet" + }, + { + num: NumberInt("953"), + value: "https://modelzoo.co/model/swagger-gradle-plugin" + }, + { + num: NumberInt("954"), + value: "https://modelzoo.co/model/jaxb-xew-plugin" + }, + { + num: NumberInt("955"), + value: "https://modelzoo.co/model/nvidiaunsupervised-video-interpolation" + }, + { + num: NumberInt("956"), + value: "https://modelzoo.co/model/gpt2" + }, + { + num: NumberInt("957"), + value: "https://modelzoo.co/model/segan-pytorch" + }, + { + num: NumberInt("958"), + value: "https://modelzoo.co/model/spinenet-pytorch-2" + }, + { + num: NumberInt("959"), + value: "https://modelzoo.co/model/wasserstein-gan-chainer" + }, + { + num: NumberInt("960"), + value: "https://modelzoo.co/model/seq2seq-chatbot-tensorflow" + }, + { + num: NumberInt("961"), + value: "https://modelzoo.co/model/organsegrstn-pytorch" + }, + { + num: NumberInt("962"), + value: "https://modelzoo.co/model/pytorch-adain" + }, + { + num: NumberInt("963"), + value: "https://modelzoo.co/model/pytorch-darknet53" + }, + { + num: NumberInt("964"), + value: "https://modelzoo.co/model/distbelief" + }, + { + num: NumberInt("965"), + value: "https://modelzoo.co/model/meva" + }, + { + num: NumberInt("966"), + value: "https://modelzoo.co/model/visual-feature-attribution-using-wasserstein-gans-pytorch" + }, + { + num: NumberInt("967"), + value: "https://modelzoo.co/model/ge2e-speaker-verification" + }, + { + num: NumberInt("968"), + value: "https://modelzoo.co/model/speaker-recognition-papers" + }, + { + num: NumberInt("969"), + value: "https://modelzoo.co/model/c2ae-multilabel-classification" + }, + { + num: NumberInt("970"), + value: "https://modelzoo.co/model/biogans" + }, + { + num: NumberInt("971"), + value: "https://modelzoo.co/model/pytorch-pix2pix" + }, + { + num: NumberInt("972"), + value: "https://modelzoo.co/model/easy-fpnpytorch" + }, + { + num: NumberInt("973"), + value: "https://modelzoo.co/model/simclr-pytorch-2" + }, + { + num: NumberInt("974"), + value: "https://modelzoo.co/model/jaxb2-basics" + }, + { + num: NumberInt("975"), + value: "https://modelzoo.co/model/fast-wavenetpytorch" + }, + { + num: NumberInt("976"), + value: "https://modelzoo.co/model/metrics" + }, + { + num: NumberInt("977"), + value: "https://modelzoo.co/model/dbnet-litepytorch" + }, + { + num: NumberInt("978"), + value: "https://modelzoo.co/model/mdvc" + }, + { + num: NumberInt("979"), + value: "https://modelzoo.co/model/shiro-jersey" + }, + { + num: NumberInt("980"), + value: "https://modelzoo.co/model/tensorflow-cifar-10" + }, + { + num: NumberInt("981"), + value: "https://modelzoo.co/model/stresnet" + }, + { + num: NumberInt("982"), + value: "https://modelzoo.co/model/voice-synthesis" + }, + { + num: NumberInt("983"), + value: "https://modelzoo.co/model/color-transfer-histogram-analogy" + }, + { + num: NumberInt("984"), + value: "https://modelzoo.co/model/pruning-filters-for-efficient-convnets" + }, + { + num: NumberInt("985"), + value: "https://modelzoo.co/model/overlapping-community-detection" + }, + { + num: NumberInt("986"), + value: "https://modelzoo.co/model/gpt2-dialogue-generation-pytorch" + }, + { + num: NumberInt("987"), + value: "https://modelzoo.co/model/dmfont" + }, + { + num: NumberInt("988"), + value: "https://modelzoo.co/model/viton-gan" + }, + { + num: NumberInt("989"), + value: "https://modelzoo.co/model/pytorchdiscreteflows" + }, + { + num: NumberInt("990"), + value: "https://modelzoo.co/model/magi" + }, + { + num: NumberInt("991"), + value: "https://modelzoo.co/model/improved-cyclegan" + }, + { + num: NumberInt("992"), + value: "https://modelzoo.co/model/tf-recsys" + }, + { + num: NumberInt("993"), + value: "https://modelzoo.co/model/text-gan-tensorflow" + }, + { + num: NumberInt("994"), + value: "https://modelzoo.co/model/generating-devanagari-using-draw" + }, + { + num: NumberInt("995"), + value: "https://modelzoo.co/model/mr-gan" + }, + { + num: NumberInt("996"), + value: "https://modelzoo.co/model/eigenvectors-from-eigenvalues" + }, + { + num: NumberInt("997"), + value: "https://modelzoo.co/model/rax" + }, + { + num: NumberInt("998"), + value: "https://modelzoo.co/model/tensorflow-mil" + }, + { + num: NumberInt("999"), + value: "https://modelzoo.co/model/tensorflow-mnist-aae" + }, + { + num: NumberInt("1000"), + value: "https://modelzoo.co/model/listen-attend-and-spell" + }, + { + num: NumberInt("1001"), + value: "https://modelzoo.co/model/d4pg-pytorch" + }, + { + num: NumberInt("1002"), + value: "https://modelzoo.co/model/r-yolov4" + }, + { + num: NumberInt("1003"), + value: "https://modelzoo.co/model/sqddpg" + }, + { + num: NumberInt("1004"), + value: "https://modelzoo.co/model/zoo" + }, + { + num: NumberInt("1005"), + value: "https://modelzoo.co/model/sc2aibot" + }, + { + num: NumberInt("1006"), + value: "https://modelzoo.co/model/d2l-java" + }, + { + num: NumberInt("1007"), + value: "https://modelzoo.co/model/bert-chinese-text-classification-pytorch" + }, + { + num: NumberInt("1008"), + value: "https://modelzoo.co/model/cnniqaplusplus" + }, + { + num: NumberInt("1009"), + value: "https://modelzoo.co/model/keras-icnet" + }, + { + num: NumberInt("1010"), + value: "https://modelzoo.co/model/inpainting-gmcnn-keras" + }, + { + num: NumberInt("1011"), + value: "https://modelzoo.co/model/recurrent-independent-mechanisms" + }, + { + num: NumberInt("1012"), + value: "https://modelzoo.co/model/imitation-learning" + }, + { + num: NumberInt("1013"), + value: "https://modelzoo.co/model/multitask-cyclegan" + }, + { + num: NumberInt("1014"), + value: "https://modelzoo.co/model/tmnet" + }, + { + num: NumberInt("1015"), + value: "https://modelzoo.co/model/quicknat-pytorch" + }, + { + num: NumberInt("1016"), + value: "https://modelzoo.co/model/jax-unirep" + }, + { + num: NumberInt("1017"), + value: "https://modelzoo.co/model/jax-models" + }, + { + num: NumberInt("1018"), + value: "https://modelzoo.co/model/enas-keras" + }, + { + num: NumberInt("1019"), + value: "https://modelzoo.co/model/bert-in-production" + }, + { + num: NumberInt("1020"), + value: "https://modelzoo.co/model/notebooks" + }, + { + num: NumberInt("1021"), + value: "https://modelzoo.co/model/matrix-capsules-em-pytorch" + }, + { + num: NumberInt("1022"), + value: "https://modelzoo.co/model/pytorch-conditional-gans" + }, + { + num: NumberInt("1023"), + value: "https://modelzoo.co/model/swae-pytorch" + }, + { + num: NumberInt("1024"), + value: "https://modelzoo.co/model/deeplab-v3-plus" + }, + { + num: NumberInt("1025"), + value: "https://modelzoo.co/model/upt" + }, + { + num: NumberInt("1026"), + value: "https://modelzoo.co/model/simple-equivariant-gnn" + }, + { + num: NumberInt("1027"), + value: "https://modelzoo.co/model/mobilenetv2gluon" + }, + { + num: NumberInt("1028"), + value: "https://modelzoo.co/model/koclip" + }, + { + num: NumberInt("1029"), + value: "https://modelzoo.co/model/pytorch-unet" + }, + { + num: NumberInt("1030"), + value: "https://modelzoo.co/model/face-parsing" + }, + { + num: NumberInt("1031"), + value: "https://modelzoo.co/model/max-deeplab" + }, + { + num: NumberInt("1032"), + value: "https://modelzoo.co/model/ppdet" + }, + { + num: NumberInt("1033"), + value: "https://modelzoo.co/model/transcenter" + }, + { + num: NumberInt("1034"), + value: "https://modelzoo.co/model/scot" + }, + { + num: NumberInt("1035"), + value: "https://modelzoo.co/model/sparse-structure-selection" + }, + { + num: NumberInt("1036"), + value: "https://modelzoo.co/model/unsupervised-object-counting" + }, + { + num: NumberInt("1037"), + value: "https://modelzoo.co/model/textboxes-plusplus-tensorflow" + }, + { + num: NumberInt("1038"), + value: "https://modelzoo.co/model/sar-tf" + }, + { + num: NumberInt("1039"), + value: "https://modelzoo.co/model/mobilenetv3-pytorch-3" + }, + { + num: NumberInt("1040"), + value: "https://modelzoo.co/model/mlp-singer" + }, + { + num: NumberInt("1041"), + value: "https://modelzoo.co/model/kfac-pytorch" + }, + { + num: NumberInt("1042"), + value: "https://modelzoo.co/model/fftnet-pytorch" + }, + { + num: NumberInt("1043"), + value: "https://modelzoo.co/model/mxfont" + }, + { + num: NumberInt("1044"), + value: "https://modelzoo.co/model/pvdnet" + }, + { + num: NumberInt("1045"), + value: "https://modelzoo.co/model/spectral-density" + }, + { + num: NumberInt("1046"), + value: "https://modelzoo.co/model/mirnet" + }, + { + num: NumberInt("1047"), + value: "https://modelzoo.co/model/yolo-v2" + }, + { + num: NumberInt("1048"), + value: "https://modelzoo.co/model/srntt-pytorch" + }, + { + num: NumberInt("1049"), + value: "https://modelzoo.co/model/dcmh" + }, + { + num: NumberInt("1050"), + value: "https://modelzoo.co/model/dgn" + }, + { + num: NumberInt("1051"), + value: "https://modelzoo.co/model/yolox-pytorch" + }, + { + num: NumberInt("1052"), + value: "https://modelzoo.co/model/deepspeech-mxnet" + }, + { + num: NumberInt("1053"), + value: "https://modelzoo.co/model/discogan-tensorflow" + }, + { + num: NumberInt("1054"), + value: "https://modelzoo.co/model/neural-processes" + }, + { + num: NumberInt("1055"), + value: "https://modelzoo.co/model/mixnet-pytorch" + }, + { + num: NumberInt("1056"), + value: "https://modelzoo.co/model/tracer" + }, + { + num: NumberInt("1057"), + value: "https://modelzoo.co/model/deep-learning" + }, + { + num: NumberInt("1058"), + value: "https://modelzoo.co/model/hierarchical-attention-networks" + }, + { + num: NumberInt("1059"), + value: "https://modelzoo.co/model/imitation-learning-tensorflow" + }, + { + num: NumberInt("1060"), + value: "https://modelzoo.co/model/cogdl-tensorflow" + }, + { + num: NumberInt("1061"), + value: "https://modelzoo.co/model/feed-forward-style-transfer" + }, + { + num: NumberInt("1062"), + value: "https://modelzoo.co/model/tensorflow20-ssd" + }, + { + num: NumberInt("1063"), + value: "https://modelzoo.co/model/tf-dropblock" + }, + { + num: NumberInt("1064"), + value: "https://modelzoo.co/model/fast-neural-style-for-image-style" + }, + { + num: NumberInt("1065"), + value: "https://modelzoo.co/model/pytorch-poetry-generation" + }, + { + num: NumberInt("1066"), + value: "https://modelzoo.co/model/bicubic-pytorch" + }, + { + num: NumberInt("1067"), + value: "https://modelzoo.co/model/cgd" + }, + { + num: NumberInt("1068"), + value: "https://modelzoo.co/model/capsule-pytorch" + }, + { + num: NumberInt("1069"), + value: "https://modelzoo.co/model/relationnetworks-clevr" + }, + { + num: NumberInt("1070"), + value: "https://modelzoo.co/model/rltf" + }, + { + num: NumberInt("1071"), + value: "https://modelzoo.co/model/fcospytorch" + }, + { + num: NumberInt("1072"), + value: "https://modelzoo.co/model/total-variation-losspytorch" + }, + { + num: NumberInt("1073"), + value: "https://modelzoo.co/model/tasnet" + }, + { + num: NumberInt("1074"), + value: "https://modelzoo.co/model/covidnet" + }, + { + num: NumberInt("1075"), + value: "https://modelzoo.co/model/billion-scale-semi-supervised-learning" + }, + { + num: NumberInt("1076"), + value: "https://modelzoo.co/model/dcls-sr" + }, + { + num: NumberInt("1077"), + value: "https://modelzoo.co/model/tabular-dl-num-embeddings" + }, + { + num: NumberInt("1078"), + value: "https://modelzoo.co/model/r-net-in-tensorflow" + }, + { + num: NumberInt("1079"), + value: "https://modelzoo.co/model/vae_vpflows" + }, + { + num: NumberInt("1080"), + value: "https://modelzoo.co/model/metaformer" + }, + { + num: NumberInt("1081"), + value: "https://modelzoo.co/model/again-vc" + }, + { + num: NumberInt("1082"), + value: "https://modelzoo.co/model/editts" + }, + { + num: NumberInt("1083"), + value: "https://modelzoo.co/model/griffin-lim" + }, + { + num: NumberInt("1084"), + value: "https://modelzoo.co/model/tagspace-tensorflow" + }, + { + num: NumberInt("1085"), + value: "https://modelzoo.co/model/cnn-sentence-classification" + }, + { + num: NumberInt("1086"), + value: "https://modelzoo.co/model/deep-knowledge-tracing" + }, + { + num: NumberInt("1087"), + value: "https://modelzoo.co/model/pregel" + }, + { + num: NumberInt("1088"), + value: "https://modelzoo.co/model/simclr-in-tensorflow-2" + }, + { + num: NumberInt("1089"), + value: "https://modelzoo.co/model/speech-driven-gesture-generation-with-autoencoder" + }, + { + num: NumberInt("1090"), + value: "https://modelzoo.co/model/deep-transfer" + }, + { + num: NumberInt("1091"), + value: "https://modelzoo.co/model/quantile-regression-dqn-pytorch-2" + }, + { + num: NumberInt("1092"), + value: "https://modelzoo.co/model/gaze-estimation" + }, + { + num: NumberInt("1093"), + value: "https://modelzoo.co/model/voice-filter" + }, + { + num: NumberInt("1094"), + value: "https://modelzoo.co/model/skip-thought-tf" + }, + { + num: NumberInt("1095"), + value: "https://modelzoo.co/model/esim-tensorflow" + }, + { + num: NumberInt("1096"), + value: "https://modelzoo.co/model/asne" + }, + { + num: NumberInt("1097"), + value: "https://modelzoo.co/model/tf-hrnet" + }, + { + num: NumberInt("1098"), + value: "https://modelzoo.co/model/tensoranfis" + }, + { + num: NumberInt("1099"), + value: "https://modelzoo.co/model/translagent" + }, + { + num: NumberInt("1100"), + value: "https://modelzoo.co/model/ai-writer-data2doc" + }, + { + num: NumberInt("1101"), + value: "https://modelzoo.co/model/fmpn-fer" + }, + { + num: NumberInt("1102"), + value: "https://modelzoo.co/model/maskflownet-pytorch" + }, + { + num: NumberInt("1103"), + value: "https://modelzoo.co/model/supermix" + }, + { + num: NumberInt("1104"), + value: "https://modelzoo.co/model/pytorch-noreward-rl" + }, + { + num: NumberInt("1105"), + value: "https://modelzoo.co/model/faster-rcnn-pytorch" + }, + { + num: NumberInt("1106"), + value: "https://modelzoo.co/model/deep-ranking" + }, + { + num: NumberInt("1107"), + value: "https://modelzoo.co/model/pytorch-filterresponsenormalizationlayer" + }, + { + num: NumberInt("1108"), + value: "https://modelzoo.co/model/knowledge-evolution" + }, + { + num: NumberInt("1109"), + value: "https://modelzoo.co/model/keras-rfcn" + }, + { + num: NumberInt("1110"), + value: "https://modelzoo.co/model/tf2-eager-yolo3" + }, + { + num: NumberInt("1111"), + value: "https://modelzoo.co/model/tensorflow-implementation-of-lcnn" + }, + { + num: NumberInt("1112"), + value: "https://modelzoo.co/model/psmnet" + }, + { + num: NumberInt("1113"), + value: "https://modelzoo.co/model/speech-emotion-classification-with-pytorch" + }, + { + num: NumberInt("1114"), + value: "https://modelzoo.co/model/vessel-wgan-pytorch" + }, + { + num: NumberInt("1115"), + value: "https://modelzoo.co/model/deepphotostyle-pytorch" + }, + { + num: NumberInt("1116"), + value: "https://modelzoo.co/model/crossvit-pytorch" + }, + { + num: NumberInt("1117"), + value: "https://modelzoo.co/model/squeezenet-neural-style-pytorch" + }, + { + num: NumberInt("1118"), + value: "https://modelzoo.co/model/pytorch-attention-guided-cyclegan" + }, + { + num: NumberInt("1119"), + value: "https://modelzoo.co/model/multiclass-semantic-segmentation-camvid" + }, + { + num: NumberInt("1120"), + value: "https://modelzoo.co/model/pytorch-neat" + }, + { + num: NumberInt("1121"), + value: "https://modelzoo.co/model/lenet5-mnist-pytorch" + }, + { + num: NumberInt("1122"), + value: "https://modelzoo.co/model/pytorch-hed" + }, + { + num: NumberInt("1123"), + value: "https://modelzoo.co/model/recurrent-environment-simulators" + }, + { + num: NumberInt("1124"), + value: "https://modelzoo.co/model/tensorflowlite-unet" + }, + { + num: NumberInt("1125"), + value: "https://modelzoo.co/model/deblurgan-tf" + }, + { + num: NumberInt("1126"), + value: "https://modelzoo.co/model/pgd-pytorch" + }, + { + num: NumberInt("1127"), + value: "https://modelzoo.co/model/dctts-pytorch" + }, + { + num: NumberInt("1128"), + value: "https://modelzoo.co/model/models" + }, + { + num: NumberInt("1129"), + value: "https://modelzoo.co/model/molclr" + }, + { + num: NumberInt("1130"), + value: "https://modelzoo.co/model/convolutional-pose-machine-tf" + }, + { + num: NumberInt("1131"), + value: "https://modelzoo.co/model/tensorflow-maml" + }, + { + num: NumberInt("1132"), + value: "https://modelzoo.co/model/swav-tf" + }, + { + num: NumberInt("1133"), + value: "https://modelzoo.co/model/tf-monodepth2" + }, + { + num: NumberInt("1134"), + value: "https://modelzoo.co/model/inceptionv4-and-inception-resnetv2pytorch" + }, + { + num: NumberInt("1135"), + value: "https://modelzoo.co/model/gail-gym" + }, + { + num: NumberInt("1136"), + value: "https://modelzoo.co/model/recvae" + }, + { + num: NumberInt("1137"), + value: "https://modelzoo.co/model/dlow" + }, + { + num: NumberInt("1138"), + value: "https://modelzoo.co/model/jax-resnet" + }, + { + num: NumberInt("1139"), + value: "https://modelzoo.co/model/crowd-counting-using-tensorflow" + }, + { + num: NumberInt("1140"), + value: "https://modelzoo.co/model/shufflenet-v2-tensorflow" + }, + { + num: NumberInt("1141"), + value: "https://modelzoo.co/model/pytorch-image-classification-with-kaggle-dogs" + }, + { + num: NumberInt("1142"), + value: "https://modelzoo.co/model/torch-dcec" + }, + { + num: NumberInt("1143"), + value: "https://modelzoo.co/model/srgan-pytorch-3" + }, + { + num: NumberInt("1144"), + value: "https://modelzoo.co/model/3d-unet-pytorch-implementation" + }, + { + num: NumberInt("1145"), + value: "https://modelzoo.co/model/tene" + }, + { + num: NumberInt("1146"), + value: "https://modelzoo.co/model/posestylizer" + }, + { + num: NumberInt("1147"), + value: "https://modelzoo.co/model/contiguous-succotash" + }, + { + num: NumberInt("1148"), + value: "https://modelzoo.co/model/higgs" + }, + { + num: NumberInt("1149"), + value: "https://modelzoo.co/model/im2im" + }, + { + num: NumberInt("1150"), + value: "https://modelzoo.co/model/hred-attention-tensorflow" + }, + { + num: NumberInt("1151"), + value: "https://modelzoo.co/model/pytorch-rl-cpp" + }, + { + num: NumberInt("1152"), + value: "https://modelzoo.co/model/alpha-zero" + }, + { + num: NumberInt("1153"), + value: "https://modelzoo.co/model/siamcrnn" + }, + { + num: NumberInt("1154"), + value: "https://modelzoo.co/model/ganimation" + }, + { + num: NumberInt("1155"), + value: "https://modelzoo.co/model/adversarial-pose-pytorch" + }, + { + num: NumberInt("1156"), + value: "https://modelzoo.co/model/pytorch-srdensenet" + }, + { + num: NumberInt("1157"), + value: "https://modelzoo.co/model/genesis" + }, + { + num: NumberInt("1158"), + value: "https://modelzoo.co/model/nasnet-pytorch" + }, + { + num: NumberInt("1159"), + value: "https://modelzoo.co/model/conditioned-source-separation-lasaft" + }, + { + num: NumberInt("1160"), + value: "https://modelzoo.co/model/real-esrgan" + }, + { + num: NumberInt("1161"), + value: "https://modelzoo.co/model/policy-gradient-methods" + }, + { + num: NumberInt("1162"), + value: "https://modelzoo.co/model/tgan" + }, + { + num: NumberInt("1163"), + value: "https://modelzoo.co/model/pointnet2-tensorflow2" + }, + { + num: NumberInt("1164"), + value: "https://modelzoo.co/model/vision-transformer-keras-tensorflow-pytorch-examples" + }, + { + num: NumberInt("1165"), + value: "https://modelzoo.co/model/one-cycle-policy" + }, + { + num: NumberInt("1166"), + value: "https://modelzoo.co/model/pytorch-basic-nmt" + }, + { + num: NumberInt("1167"), + value: "https://modelzoo.co/model/pytorch-a3c-mujoco" + }, + { + num: NumberInt("1168"), + value: "https://modelzoo.co/model/ceit-pytorch" + }, + { + num: NumberInt("1169"), + value: "https://modelzoo.co/model/xmunmt" + }, + { + num: NumberInt("1170"), + value: "https://modelzoo.co/model/deep-association-learning" + }, + { + num: NumberInt("1171"), + value: "https://modelzoo.co/model/wsdm2018-hyperqa" + }, + { + num: NumberInt("1172"), + value: "https://modelzoo.co/model/awesome-segmentations" + }, + { + num: NumberInt("1173"), + value: "https://modelzoo.co/model/segnetcmr" + }, + { + num: NumberInt("1174"), + value: "https://modelzoo.co/model/video-generator" + }, + { + num: NumberInt("1175"), + value: "https://modelzoo.co/model/symmetrical-synthesis" + }, + { + num: NumberInt("1176"), + value: "https://modelzoo.co/model/embracenet" + }, + { + num: NumberInt("1177"), + value: "https://modelzoo.co/model/3d-cnn-action-recognition" + }, + { + num: NumberInt("1178"), + value: "https://modelzoo.co/model/vae-gumbel-softmax" + }, + { + num: NumberInt("1179"), + value: "https://modelzoo.co/model/hit-gan" + }, + { + num: NumberInt("1180"), + value: "https://modelzoo.co/model/voxelmorph-pytorch" + }, + { + num: NumberInt("1181"), + value: "https://modelzoo.co/model/permutohedral-lattice" + }, + { + num: NumberInt("1182"), + value: "https://modelzoo.co/model/deeplabv3-plus" + }, + { + num: NumberInt("1183"), + value: "https://modelzoo.co/model/wavegan-pytorch" + }, + { + num: NumberInt("1184"), + value: "https://modelzoo.co/model/mmtm" + }, + { + num: NumberInt("1185"), + value: "https://modelzoo.co/model/document-image-unwarping-pytorch" + }, + { + num: NumberInt("1186"), + value: "https://modelzoo.co/model/dreml" + }, + { + num: NumberInt("1187"), + value: "https://modelzoo.co/model/metaaf" + }, + { + num: NumberInt("1188"), + value: "https://modelzoo.co/model/yolov3-tensorflow" + }, + { + num: NumberInt("1189"), + value: "https://modelzoo.co/model/dfi-tensorflow" + }, + { + num: NumberInt("1190"), + value: "https://modelzoo.co/model/videogan" + }, + { + num: NumberInt("1191"), + value: "https://modelzoo.co/model/affinity-loss" + }, + { + num: NumberInt("1192"), + value: "https://modelzoo.co/model/maskrcnn-modanet" + }, + { + num: NumberInt("1193"), + value: "https://modelzoo.co/model/dsmscn" + }, + { + num: NumberInt("1194"), + value: "https://modelzoo.co/model/drowsydriverdetection" + }, + { + num: NumberInt("1195"), + value: "https://modelzoo.co/model/openpose-pytorch" + }, + { + num: NumberInt("1196"), + value: "https://modelzoo.co/model/fotspytorch" + }, + { + num: NumberInt("1197"), + value: "https://modelzoo.co/model/dsc-pytorch" + }, + { + num: NumberInt("1198"), + value: "https://modelzoo.co/model/casenet" + }, + { + num: NumberInt("1199"), + value: "https://modelzoo.co/model/vqgan-jax" + }, + { + num: NumberInt("1200"), + value: "https://modelzoo.co/model/progen" + }, + { + num: NumberInt("1201"), + value: "https://modelzoo.co/model/tensorflow-som" + }, + { + num: NumberInt("1202"), + value: "https://modelzoo.co/model/distributed-rl" + }, + { + num: NumberInt("1203"), + value: "https://modelzoo.co/model/esrgan-pytorch" + }, + { + num: NumberInt("1204"), + value: "https://modelzoo.co/model/pytorch-deep-image-steganography" + }, + { + num: NumberInt("1205"), + value: "https://modelzoo.co/model/cyclegan-qp" + }, + { + num: NumberInt("1206"), + value: "https://modelzoo.co/model/plenoxels" + }, + { + num: NumberInt("1207"), + value: "https://modelzoo.co/model/cyclic-learning-rate" + }, + { + num: NumberInt("1208"), + value: "https://modelzoo.co/model/keras-sincnet" + }, + { + num: NumberInt("1209"), + value: "https://modelzoo.co/model/game2vec" + }, + { + num: NumberInt("1210"), + value: "https://modelzoo.co/model/liteseg" + }, + { + num: NumberInt("1211"), + value: "https://modelzoo.co/model/variational-autoencoder-pytorch-2" + }, + { + num: NumberInt("1212"), + value: "https://modelzoo.co/model/3pu-pytorch" + }, + { + num: NumberInt("1213"), + value: "https://modelzoo.co/model/deepclustering" + }, + { + num: NumberInt("1214"), + value: "https://modelzoo.co/model/rljax" + }, + { + num: NumberInt("1215"), + value: "https://modelzoo.co/model/score-flow" + }, + { + num: NumberInt("1216"), + value: "https://modelzoo.co/model/photographicimagesynthesiswithcascadedrefinementnetworks-pytorch" + }, + { + num: NumberInt("1217"), + value: "https://modelzoo.co/model/bottom-up-features" + }, + { + num: NumberInt("1218"), + value: "https://modelzoo.co/model/gatedpixelcnnpytorch" + }, + { + num: NumberInt("1219"), + value: "https://modelzoo.co/model/dgi" + }, + { + num: NumberInt("1220"), + value: "https://modelzoo.co/model/deep-multimodal-subspace-clustering-networks" + }, + { + num: NumberInt("1221"), + value: "https://modelzoo.co/model/rethinking-bnn-optimization" + }, + { + num: NumberInt("1222"), + value: "https://modelzoo.co/model/breakout-deep-q-network" + }, + { + num: NumberInt("1223"), + value: "https://modelzoo.co/model/dtan" + }, + { + num: NumberInt("1224"), + value: "https://modelzoo.co/model/funmatch-distillation" + }, + { + num: NumberInt("1225"), + value: "https://modelzoo.co/model/keras-vision-transformer" + }, + { + num: NumberInt("1226"), + value: "https://modelzoo.co/model/renet" + }, + { + num: NumberInt("1227"), + value: "https://modelzoo.co/model/dsnt" + }, + { + num: NumberInt("1228"), + value: "https://modelzoo.co/model/tf-adain" + }, + { + num: NumberInt("1229"), + value: "https://modelzoo.co/model/mtcnn-pytorch" + }, + { + num: NumberInt("1230"), + value: "https://modelzoo.co/model/deepvo" + }, + { + num: NumberInt("1231"), + value: "https://modelzoo.co/model/densenet-mura-pytorch" + }, + { + num: NumberInt("1232"), + value: "https://modelzoo.co/model/distributedes" + }, + { + num: NumberInt("1233"), + value: "https://modelzoo.co/model/transforming-autoencoder-tf" + }, + { + num: NumberInt("1234"), + value: "https://modelzoo.co/model/capsulesem" + }, + { + num: NumberInt("1235"), + value: "https://modelzoo.co/model/deblurgan-tf-tensorflow" + }, + { + num: NumberInt("1236"), + value: "https://modelzoo.co/model/tracking-via-colorizing" + }, + { + num: NumberInt("1237"), + value: "https://modelzoo.co/model/r-cnn" + }, + { + num: NumberInt("1238"), + value: "https://modelzoo.co/model/skillful-nowcasting" + }, + { + num: NumberInt("1239"), + value: "https://modelzoo.co/model/neurips18-hierchical-image-manipulation" + }, + { + num: NumberInt("1240"), + value: "https://modelzoo.co/model/transformer-2" + }, + { + num: NumberInt("1241"), + value: "https://modelzoo.co/model/dcgan-pytorch-3" + }, + { + num: NumberInt("1242"), + value: "https://modelzoo.co/model/dialog" + }, + { + num: NumberInt("1243"), + value: "https://modelzoo.co/model/chainer_caption_generation" + }, + { + num: NumberInt("1244"), + value: "https://modelzoo.co/model/jaxb2-rich-contract-plugin" + }, + { + num: NumberInt("1245"), + value: "https://modelzoo.co/model/kfac-jax" + }, + { + num: NumberInt("1246"), + value: "https://modelzoo.co/model/nima" + }, + { + num: NumberInt("1247"), + value: "https://modelzoo.co/model/lightrnn-nips2016-tensorflow-code" + }, + { + num: NumberInt("1248"), + value: "https://modelzoo.co/model/entity-network" + }, + { + num: NumberInt("1249"), + value: "https://modelzoo.co/model/senet-tensorflow-slim" + }, + { + num: NumberInt("1250"), + value: "https://modelzoo.co/model/tensorflow-maxout" + }, + { + num: NumberInt("1251"), + value: "https://modelzoo.co/model/pytorch-consistency-regularization" + }, + { + num: NumberInt("1252"), + value: "https://modelzoo.co/model/fcrn-pytorch" + }, + { + num: NumberInt("1253"), + value: "https://modelzoo.co/model/pcc-pytorch" + }, + { + num: NumberInt("1254"), + value: "https://modelzoo.co/model/rescu" + }, + { + num: NumberInt("1255"), + value: "https://modelzoo.co/model/qdax" + }, + { + num: NumberInt("1256"), + value: "https://modelzoo.co/model/discogan-tf" + }, + { + num: NumberInt("1257"), + value: "https://modelzoo.co/model/detr-tensorflow" + }, + { + num: NumberInt("1258"), + value: "https://modelzoo.co/model/abae-pytorch" + }, + { + num: NumberInt("1259"), + value: "https://modelzoo.co/model/xcloud" + }, + { + num: NumberInt("1260"), + value: "https://modelzoo.co/model/spinenet-pytorch" + }, + { + num: NumberInt("1261"), + value: "https://modelzoo.co/model/cloob-training" + }, + { + num: NumberInt("1262"), + value: "https://modelzoo.co/model/torchlrp" + }, + { + num: NumberInt("1263"), + value: "https://modelzoo.co/model/representation-learning-for-information-extraction" + }, + { + num: NumberInt("1264"), + value: "https://modelzoo.co/model/cyclegan-pytorch" + }, + { + num: NumberInt("1265"), + value: "https://modelzoo.co/model/mmdjmmdadabn" + }, + { + num: NumberInt("1266"), + value: "https://modelzoo.co/model/soap-spring-boot-cxf" + }, + { + num: NumberInt("1267"), + value: "https://modelzoo.co/model/jax-rl" + }, + { + num: NumberInt("1268"), + value: "https://modelzoo.co/model/massface" + }, + { + num: NumberInt("1269"), + value: "https://modelzoo.co/model/dcnn-textvae" + }, + { + num: NumberInt("1270"), + value: "https://modelzoo.co/model/vae-captioning" + }, + { + num: NumberInt("1271"), + value: "https://modelzoo.co/model/din" + }, + { + num: NumberInt("1272"), + value: "https://modelzoo.co/model/gsoc-wav2vec2" + }, + { + num: NumberInt("1273"), + value: "https://modelzoo.co/model/ppo_pytorch_cpp" + }, + { + num: NumberInt("1274"), + value: "https://modelzoo.co/model/maxim-pytorch" + }, + { + num: NumberInt("1275"), + value: "https://modelzoo.co/model/dispnet-tensorflow" + }, + { + num: NumberInt("1276"), + value: "https://modelzoo.co/model/unet-tensorflow" + }, + { + num: NumberInt("1277"), + value: "https://modelzoo.co/model/resemul" + }, + { + num: NumberInt("1278"), + value: "https://modelzoo.co/model/super-slomo-tf2" + }, + { + num: NumberInt("1279"), + value: "https://modelzoo.co/model/google_evolution" + }, + { + num: NumberInt("1280"), + value: "https://modelzoo.co/model/graphx-conv" + }, + { + num: NumberInt("1281"), + value: "https://modelzoo.co/model/pytorch-animegan" + }, + { + num: NumberInt("1282"), + value: "https://modelzoo.co/model/deterministic-gail-pytorch" + }, + { + num: NumberInt("1283"), + value: "https://modelzoo.co/model/alexnet-pytorch" + }, + { + num: NumberInt("1284"), + value: "https://modelzoo.co/model/fcos" + }, + { + num: NumberInt("1285"), + value: "https://modelzoo.co/model/reinforment-implementation-on-a-quadruped" + }, + { + num: NumberInt("1286"), + value: "https://modelzoo.co/model/img2imggan" + }, + { + num: NumberInt("1287"), + value: "https://modelzoo.co/model/crnn-tensorflow" + }, + { + num: NumberInt("1288"), + value: "https://modelzoo.co/model/ifl-tpp" + }, + { + num: NumberInt("1289"), + value: "https://modelzoo.co/model/centernet-lightning" + }, + { + num: NumberInt("1290"), + value: "https://modelzoo.co/model/chainer-dfi" + }, + { + num: NumberInt("1291"), + value: "https://modelzoo.co/model/y-ae" + }, + { + num: NumberInt("1292"), + value: "https://modelzoo.co/model/parallel-wavenet" + }, + { + num: NumberInt("1293"), + value: "https://modelzoo.co/model/improving-rnn-recommendation-model" + }, + { + num: NumberInt("1294"), + value: "https://modelzoo.co/model/dec-tensorflow" + }, + { + num: NumberInt("1295"), + value: "https://modelzoo.co/model/distributed-reinforcement-learning" + }, + { + num: NumberInt("1296"), + value: "https://modelzoo.co/model/rolx" + }, + { + num: NumberInt("1297"), + value: "https://modelzoo.co/model/temporal-ensembling-for-semi-supervised-learning" + }, + { + num: NumberInt("1298"), + value: "https://modelzoo.co/model/cbam-tensorflow20" + }, + { + num: NumberInt("1299"), + value: "https://modelzoo.co/model/code2seq" + }, + { + num: NumberInt("1300"), + value: "https://modelzoo.co/model/sknet-pytorch" + }, + { + num: NumberInt("1301"), + value: "https://modelzoo.co/model/x-punctuator" + }, + { + num: NumberInt("1302"), + value: "https://modelzoo.co/model/neural-style-pytorch" + }, + { + num: NumberInt("1303"), + value: "https://modelzoo.co/model/lsgan-chainer" + }, + { + num: NumberInt("1304"), + value: "https://modelzoo.co/model/psenet-tensorflow" + }, + { + num: NumberInt("1305"), + value: "https://modelzoo.co/model/tensorflow-espcn" + }, + { + num: NumberInt("1306"), + value: "https://modelzoo.co/model/adaptive-segmentation-mask-attack-asma" + }, + { + num: NumberInt("1307"), + value: "https://modelzoo.co/model/deepdyn" + }, + { + num: NumberInt("1308"), + value: "https://modelzoo.co/model/pspnet-pytorch-2" + }, + { + num: NumberInt("1309"), + value: "https://modelzoo.co/model/retinanetpytorch" + }, + { + num: NumberInt("1310"), + value: "https://modelzoo.co/model/vgg16-pytorch" + }, + { + num: NumberInt("1311"), + value: "https://modelzoo.co/model/mxnet-seq2seq" + }, + { + num: NumberInt("1312"), + value: "https://modelzoo.co/model/crest" + }, + { + num: NumberInt("1313"), + value: "https://modelzoo.co/model/sst-tensorflow" + }, + { + num: NumberInt("1314"), + value: "https://modelzoo.co/model/deep-nlp" + }, + { + num: NumberInt("1315"), + value: "https://modelzoo.co/model/commnet-bicnet" + }, + { + num: NumberInt("1316"), + value: "https://modelzoo.co/model/tf-quaternion" + }, + { + num: NumberInt("1317"), + value: "https://modelzoo.co/model/fots-ocr" + }, + { + num: NumberInt("1318"), + value: "https://modelzoo.co/model/yolov5-tf" + }, + { + num: NumberInt("1319"), + value: "https://modelzoo.co/model/two-step-task" + }, + { + num: NumberInt("1320"), + value: "https://modelzoo.co/model/swin-transformer-tensorflow" + }, + { + num: NumberInt("1321"), + value: "https://modelzoo.co/model/gpt-2xy" + }, + { + num: NumberInt("1322"), + value: "https://modelzoo.co/model/ernie-text-classification-pytorch" + }, + { + num: NumberInt("1323"), + value: "https://modelzoo.co/model/moldqn-pytorch" + }, + { + num: NumberInt("1324"), + value: "https://modelzoo.co/model/densenet-pytorch" + }, + { + num: NumberInt("1325"), + value: "https://modelzoo.co/model/c-rnn-ganpytorch" + }, + { + num: NumberInt("1326"), + value: "https://modelzoo.co/model/pytorch-gan-metrics" + }, + { + num: NumberInt("1327"), + value: "https://modelzoo.co/model/vision" + }, + { + num: NumberInt("1328"), + value: "https://modelzoo.co/model/keras-seq2seq-example" + }, + { + num: NumberInt("1329"), + value: "https://modelzoo.co/model/mlp-mixer-cifar10" + }, + { + num: NumberInt("1330"), + value: "https://modelzoo.co/model/pose-estimation-detection" + }, + { + num: NumberInt("1331"), + value: "https://modelzoo.co/model/deepvo-tensorflow" + }, + { + num: NumberInt("1332"), + value: "https://modelzoo.co/model/keras-augmentation-layer" + }, + { + num: NumberInt("1333"), + value: "https://modelzoo.co/model/tensorflow-ml-algorithms" + }, + { + num: NumberInt("1334"), + value: "https://modelzoo.co/model/val" + }, + { + num: NumberInt("1335"), + value: "https://modelzoo.co/model/sharpness-aware-minimization-tensorflow" + }, + { + num: NumberInt("1336"), + value: "https://modelzoo.co/model/ppo" + }, + { + num: NumberInt("1337"), + value: "https://modelzoo.co/model/simple-pytorch-3dgan" + }, + { + num: NumberInt("1338"), + value: "https://modelzoo.co/model/pytorch-arda" + }, + { + num: NumberInt("1339"), + value: "https://modelzoo.co/model/tf-a3c-gpu" + }, + { + num: NumberInt("1340"), + value: "https://modelzoo.co/model/fdp-modelserver" + }, + { + num: NumberInt("1341"), + value: "https://modelzoo.co/model/fcn8s-tensorflow" + }, + { + num: NumberInt("1342"), + value: "https://modelzoo.co/model/dense-bilstm" + }, + { + num: NumberInt("1343"), + value: "https://modelzoo.co/model/tensorflow-chatbot-chinese" + }, + { + num: NumberInt("1344"), + value: "https://modelzoo.co/model/tensorflow-mnist-mlp-batch-normalization-weight-initializers" + }, + { + num: NumberInt("1345"), + value: "https://modelzoo.co/model/semantic-segmentation-with-mobilenetv3" + }, + { + num: NumberInt("1346"), + value: "https://modelzoo.co/model/mtl-homoscedastic-uncertainty" + }, + { + num: NumberInt("1347"), + value: "https://modelzoo.co/model/csl-yolo" + }, + { + num: NumberInt("1348"), + value: "https://modelzoo.co/model/kerod" + }, + { + num: NumberInt("1349"), + value: "https://modelzoo.co/model/tesla-stocks-prediction" + }, + { + num: NumberInt("1350"), + value: "https://modelzoo.co/model/eco-dqn" + }, + { + num: NumberInt("1351"), + value: "https://modelzoo.co/model/yolo3-tensorflow" + }, + { + num: NumberInt("1352"), + value: "https://modelzoo.co/model/attention-augmented-conv" + }, + { + num: NumberInt("1353"), + value: "https://modelzoo.co/model/maml-tf" + }, + { + num: NumberInt("1354"), + value: "https://modelzoo.co/model/bi-tbcnn" + }, + { + num: NumberInt("1355"), + value: "https://modelzoo.co/model/sample-cnn" + }, + { + num: NumberInt("1356"), + value: "https://modelzoo.co/model/simple-does-it-weakly-supervised-instance" + }, + { + num: NumberInt("1357"), + value: "https://modelzoo.co/model/relation-network" + }, + { + num: NumberInt("1358"), + value: "https://modelzoo.co/model/siamese-sentence-similarity" + }, + { + num: NumberInt("1359"), + value: "https://modelzoo.co/model/bytenet" + }, + { + num: NumberInt("1360"), + value: "https://modelzoo.co/model/cvdd-pytorch" + }, + { + num: NumberInt("1361"), + value: "https://modelzoo.co/model/enet-sad-pytorch" + }, + { + num: NumberInt("1362"), + value: "https://modelzoo.co/model/tvnet-pytorch" + }, + { + num: NumberInt("1363"), + value: "https://modelzoo.co/model/semantic-segmentation-pytorch-3" + }, + { + num: NumberInt("1364"), + value: "https://modelzoo.co/model/jax-rs-pac4j" + }, + { + num: NumberInt("1365"), + value: "https://modelzoo.co/model/fast-dpsgd" + }, + { + num: NumberInt("1366"), + value: "https://modelzoo.co/model/distribution-shift-framework" + }, + { + num: NumberInt("1367"), + value: "https://modelzoo.co/model/tf-word2vec" + }, + { + num: NumberInt("1368"), + value: "https://modelzoo.co/model/fcn-googlenet" + }, + { + num: NumberInt("1369"), + value: "https://modelzoo.co/model/rcan-tensorflow" + }, + { + num: NumberInt("1370"), + value: "https://modelzoo.co/model/faceboxes-tensorflow" + }, + { + num: NumberInt("1371"), + value: "https://modelzoo.co/model/ml-in-tf" + }, + { + num: NumberInt("1372"), + value: "https://modelzoo.co/model/vq-vae" + }, + { + num: NumberInt("1373"), + value: "https://modelzoo.co/model/dcgan-pytorch" + }, + { + num: NumberInt("1374"), + value: "https://modelzoo.co/model/deep-dream-pytorch" + }, + { + num: NumberInt("1375"), + value: "https://modelzoo.co/model/pytorch-transformer-kor-eng" + }, + { + num: NumberInt("1376"), + value: "https://modelzoo.co/model/pytorchsteerablepyramid" + }, + { + num: NumberInt("1377"), + value: "https://modelzoo.co/model/madam" + }, + { + num: NumberInt("1378"), + value: "https://modelzoo.co/model/mc-cnn-python" + }, + { + num: NumberInt("1379"), + value: "https://modelzoo.co/model/deepspeech-pytorch" + }, + { + num: NumberInt("1380"), + value: "https://modelzoo.co/model/attention-ocr" + }, + { + num: NumberInt("1381"), + value: "https://modelzoo.co/model/mnasnet-pytorch-2" + }, + { + num: NumberInt("1382"), + value: "https://modelzoo.co/model/language-modeling" + }, + { + num: NumberInt("1383"), + value: "https://modelzoo.co/model/minimal-wgan" + }, + { + num: NumberInt("1384"), + value: "https://modelzoo.co/model/lsgan-tf" + }, + { + num: NumberInt("1385"), + value: "https://modelzoo.co/model/fgsm-pytorch" + }, + { + num: NumberInt("1386"), + value: "https://modelzoo.co/model/universal-vocoder" + }, + { + num: NumberInt("1387"), + value: "https://modelzoo.co/model/pytorch-implementation-of-yolov1" + }, + { + num: NumberInt("1388"), + value: "https://modelzoo.co/model/pytorch-atda" + }, + { + num: NumberInt("1389"), + value: "https://modelzoo.co/model/quasi-rnn" + }, + { + num: NumberInt("1390"), + value: "https://modelzoo.co/model/monolingual-and-multilingual-image-captioning" + }, + { + num: NumberInt("1391"), + value: "https://modelzoo.co/model/jax-privacy" + }, + { + num: NumberInt("1392"), + value: "https://modelzoo.co/model/avo-pytorch" + }, + { + num: NumberInt("1393"), + value: "https://modelzoo.co/model/kgcn-pytorch" + }, + { + num: NumberInt("1394"), + value: "https://modelzoo.co/model/birdnet2" + }, + { + num: NumberInt("1395"), + value: "https://modelzoo.co/model/cartoon-gan" + }, + { + num: NumberInt("1396"), + value: "https://modelzoo.co/model/rnnsearch" + }, + { + num: NumberInt("1397"), + value: "https://modelzoo.co/model/cdcgan" + }, + { + num: NumberInt("1398"), + value: "https://modelzoo.co/model/mxnet-audio" + }, + { + num: NumberInt("1399"), + value: "https://modelzoo.co/model/pytorch-glow" + }, + { + num: NumberInt("1400"), + value: "https://modelzoo.co/model/stdn-pytorch" + }, + { + num: NumberInt("1401"), + value: "https://modelzoo.co/model/sae-pytorch" + }, + { + num: NumberInt("1402"), + value: "https://modelzoo.co/model/graphics-code-generating-model-using-processing" + }, + { + num: NumberInt("1403"), + value: "https://modelzoo.co/model/pytorch-prnet" + }, + { + num: NumberInt("1404"), + value: "https://modelzoo.co/model/ibc" + }, + { + num: NumberInt("1405"), + value: "https://modelzoo.co/model/android-jaxb" + }, + { + num: NumberInt("1406"), + value: "https://modelzoo.co/model/brave" + }, + { + num: NumberInt("1407"), + value: "https://modelzoo.co/model/audax" + }, + { + num: NumberInt("1408"), + value: "https://modelzoo.co/model/pytorch-rdpg" + }, + { + num: NumberInt("1409"), + value: "https://modelzoo.co/model/pytorch-ricap" + }, + { + num: NumberInt("1410"), + value: "https://modelzoo.co/model/dnn-hsmm" + }, + { + num: NumberInt("1411"), + value: "https://modelzoo.co/model/seqgan-pytorch" + }, + { + num: NumberInt("1412"), + value: "https://modelzoo.co/model/raml-jaxrs-codegen" + }, + { + num: NumberInt("1413"), + value: "https://modelzoo.co/model/fedpa" + }, + { + num: NumberInt("1414"), + value: "https://modelzoo.co/model/vdvae-jax" + }, + { + num: NumberInt("1415"), + value: "https://modelzoo.co/model/asynchronous-advantage-actor-critic-in-pytorch" + }, + { + num: NumberInt("1416"), + value: "https://modelzoo.co/model/hierarchical-attention-network-for-document-classification" + }, + { + num: NumberInt("1417"), + value: "https://modelzoo.co/model/pytorch-ppo-rl" + }, + { + num: NumberInt("1418"), + value: "https://modelzoo.co/model/domaintransfernetworkpytorch" + }, + { + num: NumberInt("1419"), + value: "https://modelzoo.co/model/pytorch-cyclegan-2" + }, + { + num: NumberInt("1420"), + value: "https://modelzoo.co/model/metro-jax-ws-2" + }, + { + num: NumberInt("1421"), + value: "https://modelzoo.co/model/deblurgan-pytorch" + }, + { + num: NumberInt("1422"), + value: "https://modelzoo.co/model/binary-nets" + }, + { + num: NumberInt("1423"), + value: "https://modelzoo.co/model/pytorch-gym" + }, + { + num: NumberInt("1424"), + value: "https://modelzoo.co/model/deep-photo-enhancer" + }, + { + num: NumberInt("1425"), + value: "https://modelzoo.co/model/torch-scae" + }, + { + num: NumberInt("1426"), + value: "https://modelzoo.co/model/dhmc-jax" + }, + { + num: NumberInt("1427"), + value: "https://modelzoo.co/model/detectx-yolo-v3" + }, + { + num: NumberInt("1428"), + value: "https://modelzoo.co/model/musculoskeletal-radiographs-abnormality-classifier" + }, + { + num: NumberInt("1429"), + value: "https://modelzoo.co/model/gated-attention-reader" + }, + { + num: NumberInt("1430"), + value: "https://modelzoo.co/model/timegan-pytorch" + }, + { + num: NumberInt("1431"), + value: "https://modelzoo.co/model/tigercontrol" + }, + { + num: NumberInt("1432"), + value: "https://modelzoo.co/model/flaxvision" + }, + { + num: NumberInt("1433"), + value: "https://modelzoo.co/model/aegean" + }, + { + num: NumberInt("1434"), + value: "https://modelzoo.co/model/pytorch-vae-cvae" + }, + { + num: NumberInt("1435"), + value: "https://modelzoo.co/model/blazeface-personpytorch" + }, + { + num: NumberInt("1436"), + value: "https://modelzoo.co/model/omd" + }, + { + num: NumberInt("1437"), + value: "https://modelzoo.co/model/unrolled-gans" + }, + { + num: NumberInt("1438"), + value: "https://modelzoo.co/model/pytorch-dann" + }, + { + num: NumberInt("1439"), + value: "https://modelzoo.co/model/nasbench-pytorch" + }, + { + num: NumberInt("1440"), + value: "https://modelzoo.co/model/t5-flax-gcp" + }, + { + num: NumberInt("1441"), + value: "https://modelzoo.co/model/pytorch-vsum-ptr-gan" + }, + { + num: NumberInt("1442"), + value: "https://modelzoo.co/model/semi-supervised-paper-implementation" + }, + { + num: NumberInt("1443"), + value: "https://modelzoo.co/model/gans-for-1d-signal" + }, + { + num: NumberInt("1444"), + value: "https://modelzoo.co/model/pytorch-vae-3" + }, + { + num: NumberInt("1445"), + value: "https://modelzoo.co/model/planerecnet" + }, + { + num: NumberInt("1446"), + value: "https://modelzoo.co/model/dks" + }, + { + num: NumberInt("1447"), + value: "https://modelzoo.co/model/wax-ml" + }, + { + num: NumberInt("1448"), + value: "https://modelzoo.co/model/jax-variational-diffwave" + }, + { + num: NumberInt("1449"), + value: "https://modelzoo.co/model/infinite-ae-cf" + }, + { + num: NumberInt("1450"), + value: "https://modelzoo.co/model/odcnn" + }, + { + num: NumberInt("1451"), + value: "https://modelzoo.co/model/twinbert" + }, + { + num: NumberInt("1452"), + value: "https://modelzoo.co/model/imagenet-vgg" + }, + { + num: NumberInt("1453"), + value: "https://modelzoo.co/model/improved-gan" + }, + { + num: NumberInt("1454"), + value: "https://modelzoo.co/model/gym" + }, + { + num: NumberInt("1455"), + value: "https://modelzoo.co/model/simple-generative-adversarial-networks" + }, + { + num: NumberInt("1456"), + value: "https://modelzoo.co/model/alexnet-pytorch-2" + }, + { + num: NumberInt("1457"), + value: "https://modelzoo.co/model/pytorch-metrics" + }, + { + num: NumberInt("1458"), + value: "https://modelzoo.co/model/jax-finufft" + }, + { + num: NumberInt("1459"), + value: "https://modelzoo.co/model/vit-vqgan" + }, + { + num: NumberInt("1460"), + value: "https://modelzoo.co/model/a2c" + }, + { + num: NumberInt("1461"), + value: "https://modelzoo.co/model/drcn" + }, + { + num: NumberInt("1462"), + value: "https://modelzoo.co/model/chainer-variational-autoencoder" + }, + { + num: NumberInt("1463"), + value: "https://modelzoo.co/model/efax" + }, + { + num: NumberInt("1464"), + value: "https://modelzoo.co/model/ppo-jax" + }, + { + num: NumberInt("1465"), + value: "https://modelzoo.co/model/pixelcnn" + }, + { + num: NumberInt("1466"), + value: "https://modelzoo.co/model/gail-pytorch" + }, + { + num: NumberInt("1467"), + value: "https://modelzoo.co/model/deep-compressionpytorch" + }, + { + num: NumberInt("1468"), + value: "https://modelzoo.co/model/tryongan" + }, + { + num: NumberInt("1469"), + value: "https://modelzoo.co/model/dspnet" + }, + { + num: NumberInt("1470"), + value: "https://modelzoo.co/model/multilabel" + }, + { + num: NumberInt("1471"), + value: "https://modelzoo.co/model/vae" + }, + { + num: NumberInt("1472"), + value: "https://modelzoo.co/model/chef-transformer" + }, + { + num: NumberInt("1473"), + value: "https://modelzoo.co/model/erfnet-pytorch" + }, + { + num: NumberInt("1474"), + value: "https://modelzoo.co/model/overlap-local-sgd" + }, + { + num: NumberInt("1475"), + value: "https://modelzoo.co/model/vit-jax2tf" + }, + { + num: NumberInt("1476"), + value: "https://modelzoo.co/model/shinrl" + }, + { + num: NumberInt("1477"), + value: "https://modelzoo.co/model/deq-jax" + }, + { + num: NumberInt("1478"), + value: "https://modelzoo.co/model/pytorch-cascaded-pyramid-network" + }, + { + num: NumberInt("1479"), + value: "https://modelzoo.co/model/chainer-gan-denoising-feature-matching" + }, + { + num: NumberInt("1480"), + value: "https://modelzoo.co/model/rl-with-resets" + }, + { + num: NumberInt("1481"), + value: "https://modelzoo.co/model/ddpg-pytorch" + }, + { + num: NumberInt("1482"), + value: "https://modelzoo.co/model/rest" + }, + { + num: NumberInt("1483"), + value: "https://modelzoo.co/model/reactive-wizard" + }, + { + num: NumberInt("1484"), + value: "https://modelzoo.co/model/yolov3-pytorch-2" + }, + { + num: NumberInt("1485"), + value: "https://modelzoo.co/model/focuslitenn" + }, + { + num: NumberInt("1486"), + value: "https://modelzoo.co/model/cwvae-jax" + }, + { + num: NumberInt("1487"), + value: "https://modelzoo.co/model/image-captioning" + }, + { + num: NumberInt("1488"), + value: "https://modelzoo.co/model/flaxoptimizers" + }, + { + num: NumberInt("1489"), + value: "https://modelzoo.co/model/deep-feature-interporlation-face-attribute-manipulation" + }, + { + num: NumberInt("1490"), + value: "https://modelzoo.co/model/traj-pred-irl" + }, + { + num: NumberInt("1491"), + value: "https://modelzoo.co/model/manifold-mixup" + }, + { + num: NumberInt("1492"), + value: "https://modelzoo.co/model/face-detection-flask-nginx-gunicorn-docker" + }, + { + num: NumberInt("1493"), + value: "https://modelzoo.co/model/dcgan-pytorch-2" + }, + { + num: NumberInt("1494"), + value: "https://modelzoo.co/model/nonlinear-ib-pytorch" + }, + { + num: NumberInt("1495"), + value: "https://modelzoo.co/model/sqeezenet-mxnet" + }, + { + num: NumberInt("1496"), + value: "https://modelzoo.co/model/adversarialautoencoder" + }, + { + num: NumberInt("1497"), + value: "https://modelzoo.co/model/adda" + }, + { + num: NumberInt("1498"), + value: "https://modelzoo.co/model/undertow-cdi-jaxrs" + }, + { + num: NumberInt("1499"), + value: "https://modelzoo.co/model/jax-gcn" + }, + { + num: NumberInt("1500"), + value: "https://modelzoo.co/model/sabertooth" + }, + { + num: NumberInt("1501"), + value: "https://modelzoo.co/model/ecg-arrhythmia-classification-in-2d-cnn" + }, + { + num: NumberInt("1502"), + value: "https://modelzoo.co/model/matching-networks-tf" + }, + { + num: NumberInt("1503"), + value: "https://modelzoo.co/model/cacm" + }, + { + num: NumberInt("1504"), + value: "https://modelzoo.co/model/ultrasound-nerve-segmentation-keras" + }, + { + num: NumberInt("1505"), + value: "https://modelzoo.co/model/mathjaxview" + }, + { + num: NumberInt("1506"), + value: "https://modelzoo.co/model/roberta-base-mr" + }, + { + num: NumberInt("1507"), + value: "https://modelzoo.co/model/alexnet-tensorflow" + }, + { + num: NumberInt("1508"), + value: "https://modelzoo.co/model/las" + }, + { + num: NumberInt("1509"), + value: "https://modelzoo.co/model/crossgrad" + }, + { + num: NumberInt("1510"), + value: "https://modelzoo.co/model/deepdomainadaptation" + }, + { + num: NumberInt("1511"), + value: "https://modelzoo.co/model/tenet-kws" + }, + { + num: NumberInt("1512"), + value: "https://modelzoo.co/model/vibration-gan" + }, + { + num: NumberInt("1513"), + value: "https://modelzoo.co/model/tf-keras-gradcamplusplus" + }, + { + num: NumberInt("1514"), + value: "https://modelzoo.co/model/deep-learning-algorithms-implementation" + }, + { + num: NumberInt("1515"), + value: "https://modelzoo.co/model/paacpytorch" + }, + { + num: NumberInt("1516"), + value: "https://modelzoo.co/model/sec" + }, + { + num: NumberInt("1517"), + value: "https://modelzoo.co/model/jax-comln" + }, + { + num: NumberInt("1518"), + value: "https://modelzoo.co/model/jax-dag-gflownet" + }, + { + num: NumberInt("1519"), + value: "https://modelzoo.co/model/soft-attention-image-captioning" + }, + { + num: NumberInt("1520"), + value: "https://modelzoo.co/model/handwritten-sequence-tensorflow" + }, + { + num: NumberInt("1521"), + value: "https://modelzoo.co/model/tensorflow-lite-kotlin-samples" + }, + { + num: NumberInt("1522"), + value: "https://modelzoo.co/model/deep-gaussian-process" + }, + { + num: NumberInt("1523"), + value: "https://modelzoo.co/model/weight-normalization" + }, + { + num: NumberInt("1524"), + value: "https://modelzoo.co/model/kervolution" + }, + { + num: NumberInt("1525"), + value: "https://modelzoo.co/model/tf-cnn-casia-hwdb" + }, + { + num: NumberInt("1526"), + value: "https://modelzoo.co/model/cmorlet-tensorflow" + }, + { + num: NumberInt("1527"), + value: "https://modelzoo.co/model/tensorstyle" + }, + { + num: NumberInt("1528"), + value: "https://modelzoo.co/model/tacotron-2" + }, + { + num: NumberInt("1529"), + value: "https://modelzoo.co/model/transformer-implementations" + }, + { + num: NumberInt("1530"), + value: "https://modelzoo.co/model/flax-sentence-embeddings" + }, + { + num: NumberInt("1531"), + value: "https://modelzoo.co/model/mathjax-siunitx" + }, + { + num: NumberInt("1532"), + value: "https://modelzoo.co/model/tf-capsnet" + }, + { + num: NumberInt("1533"), + value: "https://modelzoo.co/model/recurrent-attention-model" + }, + { + num: NumberInt("1534"), + value: "https://modelzoo.co/model/siamrpn-tf" + }, + { + num: NumberInt("1535"), + value: "https://modelzoo.co/model/paican" + }, + { + num: NumberInt("1536"), + value: "https://modelzoo.co/model/meuralpaint" + }, + { + num: NumberInt("1537"), + value: "https://modelzoo.co/model/class-activation-mapping-tensorflow" + }, + { + num: NumberInt("1538"), + value: "https://modelzoo.co/model/han" + }, + { + num: NumberInt("1539"), + value: "https://modelzoo.co/model/tf-madgrad" + }, + { + num: NumberInt("1540"), + value: "https://modelzoo.co/model/ali-g" + }, + { + num: NumberInt("1541"), + value: "https://modelzoo.co/model/cross-modal-hasing-playground" + }, + { + num: NumberInt("1542"), + value: "https://modelzoo.co/model/simclr-tensorflow" + }, + { + num: NumberInt("1543"), + value: "https://modelzoo.co/model/remote-sensing-analysis" + }, + { + num: NumberInt("1544"), + value: "https://modelzoo.co/model/softmax-triplet-loss" + }, + { + num: NumberInt("1545"), + value: "https://modelzoo.co/model/mann-meta-learning" + }, + { + num: NumberInt("1546"), + value: "https://modelzoo.co/model/full-reimplementation-of-unet" + }, + { + num: NumberInt("1547"), + value: "https://modelzoo.co/model/anomaly-detect-lstm-vae" + }, + { + num: NumberInt("1548"), + value: "https://modelzoo.co/model/variationalneuralannealing" + }, + { + num: NumberInt("1549"), + value: "https://modelzoo.co/model/pytorch-edanet" + }, + { + num: NumberInt("1550"), + value: "https://modelzoo.co/model/self-critical" + }, + { + num: NumberInt("1551"), + value: "https://modelzoo.co/model/jaxmpp" + }, + { + num: NumberInt("1552"), + value: "https://modelzoo.co/model/ninjax" + }, + { + num: NumberInt("1553"), + value: "https://modelzoo.co/model/min-dalle-flax" + }, + { + num: NumberInt("1554"), + value: "https://modelzoo.co/model/lip2word" + }, + { + num: NumberInt("1555"), + value: "https://modelzoo.co/model/diffeomorphic-demons" + }, + { + num: NumberInt("1556"), + value: "https://modelzoo.co/model/tf-invertible-resnet" + }, + { + num: NumberInt("1557"), + value: "https://modelzoo.co/model/pokegan" + }, + { + num: NumberInt("1558"), + value: "https://modelzoo.co/model/android-machine-learning-with-tensorflow" + }, + { + num: NumberInt("1559"), + value: "https://modelzoo.co/model/genzoo" + }, + { + num: NumberInt("1560"), + value: "https://modelzoo.co/model/maml-tensorflow" + }, + { + num: NumberInt("1561"), + value: "https://modelzoo.co/model/denoised-smoothing-tf" + }, + { + num: NumberInt("1562"), + value: "https://modelzoo.co/model/resnet-50-101-152" + }, + { + num: NumberInt("1563"), + value: "https://modelzoo.co/model/autoregressive-models" + }, + { + num: NumberInt("1564"), + value: "https://modelzoo.co/model/deeplabv3plus-tf2x" + }, + { + num: NumberInt("1565"), + value: "https://modelzoo.co/model/translearn" + }, + { + num: NumberInt("1566"), + value: "https://modelzoo.co/model/semisupervised-timeseries-infogan" + }, + { + num: NumberInt("1567"), + value: "https://modelzoo.co/model/yolov3-pytorch" + }, + { + num: NumberInt("1568"), + value: "https://modelzoo.co/model/tp-gan" + }, + { + num: NumberInt("1569"), + value: "https://modelzoo.co/model/mxseq2seqgluon" + }, + { + num: NumberInt("1570"), + value: "https://modelzoo.co/model/fastjson-jaxrs-json-provider" + }, + { + num: NumberInt("1571"), + value: "https://modelzoo.co/model/xcauto" + }, + { + num: NumberInt("1572"), + value: "https://modelzoo.co/model/jaxrs-beanvalidation-javaee6" + }, + { + num: NumberInt("1573"), + value: "https://modelzoo.co/model/multilingual-vqa" + }, + { + num: NumberInt("1574"), + value: "https://modelzoo.co/model/tf-ot-sinkhorn" + }, + { + num: NumberInt("1575"), + value: "https://modelzoo.co/model/tf-nima" + }, + { + num: NumberInt("1576"), + value: "https://modelzoo.co/model/stargan-tensorflow" + }, + { + num: NumberInt("1577"), + value: "https://modelzoo.co/model/dnn-dependency-parser" + }, + { + num: NumberInt("1578"), + value: "https://modelzoo.co/model/large-scale-ot-mapping-tf" + }, + { + num: NumberInt("1579"), + value: "https://modelzoo.co/model/deepqa" + }, + { + num: NumberInt("1580"), + value: "https://modelzoo.co/model/punctuation-restoration" + }, + { + num: NumberInt("1581"), + value: "https://modelzoo.co/model/image-colorization-gan-tf20" + }, + { + num: NumberInt("1582"), + value: "https://modelzoo.co/model/yolo-v1-v2-tensorflow" + }, + { + num: NumberInt("1583"), + value: "https://modelzoo.co/model/binary-vae" + }, + { + num: NumberInt("1584"), + value: "https://modelzoo.co/model/dcgan-cifar10" + }, + { + num: NumberInt("1585"), + value: "https://modelzoo.co/model/mine" + }, + { + num: NumberInt("1586"), + value: "https://modelzoo.co/model/metric-learning" + }, + { + num: NumberInt("1587"), + value: "https://modelzoo.co/model/pytorch-super-resolution-implementations" + }, + { + num: NumberInt("1588"), + value: "https://modelzoo.co/model/nalupytorch" + }, + { + num: NumberInt("1589"), + value: "https://modelzoo.co/model/minijax" + }, + { + num: NumberInt("1590"), + value: "https://modelzoo.co/model/variational-dropout" + }, + { + num: NumberInt("1591"), + value: "https://modelzoo.co/model/linknet-tensorflow" + }, + { + num: NumberInt("1592"), + value: "https://modelzoo.co/model/supervised-embedding-model" + }, + { + num: NumberInt("1593"), + value: "https://modelzoo.co/model/cnn-lstm-for-link-prediction" + }, + { + num: NumberInt("1594"), + value: "https://modelzoo.co/model/s2vt-seq2seq-video-captioning-attention" + }, + { + num: NumberInt("1595"), + value: "https://modelzoo.co/model/memae-tf2" + }, + { + num: NumberInt("1596"), + value: "https://modelzoo.co/model/logistic-lda" + }, + { + num: NumberInt("1597"), + value: "https://modelzoo.co/model/simpnet-tensorflow" + }, + { + num: NumberInt("1598"), + value: "https://modelzoo.co/model/machinelearning-tensorflow" + }, + { + num: NumberInt("1599"), + value: "https://modelzoo.co/model/im2latex-tensorflow" + }, + { + num: NumberInt("1600"), + value: "https://modelzoo.co/model/transformer-network-tensorflow" + }, + { + num: NumberInt("1601"), + value: "https://modelzoo.co/model/capsnet-tensorflow-jupyter" + }, + { + num: NumberInt("1602"), + value: "https://modelzoo.co/model/sphereface-tensorflow" + }, + { + num: NumberInt("1603"), + value: "https://modelzoo.co/model/tf-eegnet" + }, + { + num: NumberInt("1604"), + value: "https://modelzoo.co/model/stackgan" + }, + { + num: NumberInt("1605"), + value: "https://modelzoo.co/model/resnext-tensorflow2" + }, + { + num: NumberInt("1606"), + value: "https://modelzoo.co/model/gan-tensorflow-2" + }, + { + num: NumberInt("1607"), + value: "https://modelzoo.co/model/tf-enhancedped" + }, + { + num: NumberInt("1608"), + value: "https://modelzoo.co/model/pytorch-resnet" + }, + { + num: NumberInt("1609"), + value: "https://modelzoo.co/model/lfw-siamese-pytorch" + }, + { + num: NumberInt("1610"), + value: "https://modelzoo.co/model/focallosscuda" + }, + { + num: NumberInt("1611"), + value: "https://modelzoo.co/model/lsgan" + }, + { + num: NumberInt("1612"), + value: "https://modelzoo.co/model/seq2seq-speech" + }, + { + num: NumberInt("1613"), + value: "https://modelzoo.co/model/jax-lensing" + }, + { + num: NumberInt("1614"), + value: "https://modelzoo.co/model/deeperwin" + }, + { + num: NumberInt("1615"), + value: "https://modelzoo.co/model/keras-gan-library" + }, + { + num: NumberInt("1616"), + value: "https://modelzoo.co/model/alexnet-architecturetensorflow" + }, + { + num: NumberInt("1617"), + value: "https://modelzoo.co/model/mrcnn" + }, + { + num: NumberInt("1618"), + value: "https://modelzoo.co/model/dhsgan" + }, + { + num: NumberInt("1619"), + value: "https://modelzoo.co/model/myalphagozeroonconnect4" + }, + { + num: NumberInt("1620"), + value: "https://modelzoo.co/model/im2p" + }, + { + num: NumberInt("1621"), + value: "https://modelzoo.co/model/soa-dorn-tf" + }, + { + num: NumberInt("1622"), + value: "https://modelzoo.co/model/daml" + }, + { + num: NumberInt("1623"), + value: "https://modelzoo.co/model/style-transfer-algorithm" + }, + { + num: NumberInt("1624"), + value: "https://modelzoo.co/model/pytorch-implementation" + }, + { + num: NumberInt("1625"), + value: "https://modelzoo.co/model/remude" + }, + { + num: NumberInt("1626"), + value: "https://modelzoo.co/model/wadl-first-rest-webservice-cxf-example" + }, + { + num: NumberInt("1627"), + value: "https://modelzoo.co/model/sonno" + }, + { + num: NumberInt("1628"), + value: "https://modelzoo.co/model/jax-resnet-cifar10" + }, + { + num: NumberInt("1629"), + value: "https://modelzoo.co/model/parallel-non-linear-gaussian-smoothers" + }, + { + num: NumberInt("1630"), + value: "https://modelzoo.co/model/maml-flax" + }, + { + num: NumberInt("1631"), + value: "https://modelzoo.co/model/mingpt" + }, + { + num: NumberInt("1632"), + value: "https://modelzoo.co/model/haikumodels" + }, + { + num: NumberInt("1633"), + value: "https://modelzoo.co/model/vgan-tensorflow" + }, + { + num: NumberInt("1634"), + value: "https://modelzoo.co/model/deeplearningimplementations" + }, + { + num: NumberInt("1635"), + value: "https://modelzoo.co/model/fbpconv-tf" + }, + { + num: NumberInt("1636"), + value: "https://modelzoo.co/model/coordconv-implementation" + }, + { + num: NumberInt("1637"), + value: "https://modelzoo.co/model/resnet-tensorflow" + }, + { + num: NumberInt("1638"), + value: "https://modelzoo.co/model/dynamic-coattention-network-for-squad" + }, + { + num: NumberInt("1639"), + value: "https://modelzoo.co/model/object-and-facial-detection-in-python" + }, + { + num: NumberInt("1640"), + value: "https://modelzoo.co/model/hindsight-experience-replay" + }, + { + num: NumberInt("1641"), + value: "https://modelzoo.co/model/dlincv" + }, + { + num: NumberInt("1642"), + value: "https://modelzoo.co/model/center-loss-tensorflow" + }, + { + num: NumberInt("1643"), + value: "https://modelzoo.co/model/support-vector-machine" + }, + { + num: NumberInt("1644"), + value: "https://modelzoo.co/model/efficient-imagenet-classification" + }, + { + num: NumberInt("1645"), + value: "https://modelzoo.co/model/jaxws-samples" + }, + { + num: NumberInt("1646"), + value: "https://modelzoo.co/model/problem-details" + }, + { + num: NumberInt("1647"), + value: "https://modelzoo.co/model/pax" + }, + { + num: NumberInt("1648"), + value: "https://modelzoo.co/model/medclip" + }, + { + num: NumberInt("1649"), + value: "https://modelzoo.co/model/adahessianjax" + }, + { + num: NumberInt("1650"), + value: "https://modelzoo.co/model/jax-galsim" + }, + { + num: NumberInt("1651"), + value: "https://modelzoo.co/model/pytorch-paper-implementations" + }, + { + num: NumberInt("1652"), + value: "https://modelzoo.co/model/amortized-svgd" + }, + { + num: NumberInt("1653"), + value: "https://modelzoo.co/model/pscapsnet" + }, + { + num: NumberInt("1654"), + value: "https://modelzoo.co/model/smapgan" + }, + { + num: NumberInt("1655"), + value: "https://modelzoo.co/model/pynmt" + }, + { + num: NumberInt("1656"), + value: "https://modelzoo.co/model/multi-task" + }, + { + num: NumberInt("1657"), + value: "https://modelzoo.co/model/flax-nerf" + }, + { + num: NumberInt("1658"), + value: "https://modelzoo.co/model/mlpmixer-jax2tf" + }, + { + num: NumberInt("1659"), + value: "https://modelzoo.co/model/diffqcqp" + }, + { + num: NumberInt("1660"), + value: "https://modelzoo.co/model/hover-net" + }, + { + num: NumberInt("1661"), + value: "https://modelzoo.co/model/pytorch-adversarialattacks" + }, + { + num: NumberInt("1662"), + value: "https://modelzoo.co/model/cmn4recosys" + }, + { + num: NumberInt("1663"), + value: "https://modelzoo.co/model/authlete-java-jaxrs" + }, + { + num: NumberInt("1664"), + value: "https://modelzoo.co/model/s4-jax" + }, + { + num: NumberInt("1665"), + value: "https://modelzoo.co/model/jersey-http2-jetty-connector" + }, + { + num: NumberInt("1666"), + value: "https://modelzoo.co/model/bit-jax2tf" + }, + { + num: NumberInt("1667"), + value: "https://modelzoo.co/model/omega" + }, + { + num: NumberInt("1668"), + value: "https://modelzoo.co/model/progan-flax" + }, + { + num: NumberInt("1669"), + value: "https://modelzoo.co/model/rouge-l-tensorflow" + }, + { + num: NumberInt("1670"), + value: "https://modelzoo.co/model/lr-momentum-scheduler" + }, + { + num: NumberInt("1671"), + value: "https://modelzoo.co/model/sst" + }, + { + num: NumberInt("1672"), + value: "https://modelzoo.co/model/pytorch-peleenet" + }, + { + num: NumberInt("1673"), + value: "https://modelzoo.co/model/l-gm-loss" + }, + { + num: NumberInt("1674"), + value: "https://modelzoo.co/model/spring-hibernate-jersey" + }, + { + num: NumberInt("1675"), + value: "https://modelzoo.co/model/guide-microprofile-opentracing" + }, + { + num: NumberInt("1676"), + value: "https://modelzoo.co/model/patching-jax-rs" + }, + { + num: NumberInt("1677"), + value: "https://modelzoo.co/model/http-matchers" + }, + { + num: NumberInt("1678"), + value: "https://modelzoo.co/model/mingpt-flax" + }, + { + num: NumberInt("1679"), + value: "https://modelzoo.co/model/mlagents" + }, + { + num: NumberInt("1680"), + value: "https://modelzoo.co/model/patchvae" + }, + { + num: NumberInt("1681"), + value: "https://modelzoo.co/model/irls-using-dl-frameworks" + }, + { + num: NumberInt("1682"), + value: "https://modelzoo.co/model/gan_tutorial-pytorch" + }, + { + num: NumberInt("1683"), + value: "https://modelzoo.co/model/npid" + }, + { + num: NumberInt("1684"), + value: "https://modelzoo.co/model/discovering-reinforcement-learning-algorithms" + }, + { + num: NumberInt("1685"), + value: "https://modelzoo.co/model/swagger4jaxrs" + }, + { + num: NumberInt("1686"), + value: "https://modelzoo.co/model/androidjaxblib" + }, + { + num: NumberInt("1687"), + value: "https://modelzoo.co/model/jive-sdk-java-jersey" + }, + { + num: NumberInt("1688"), + value: "https://modelzoo.co/model/jax-chacha-prng" + }, + { + num: NumberInt("1689"), + value: "https://modelzoo.co/model/jax-gat" + }, + { + num: NumberInt("1690"), + value: "https://modelzoo.co/model/siren-jax" + }, + { + num: NumberInt("1691"), + value: "https://modelzoo.co/model/fastpbrl" + }, + { + num: NumberInt("1692"), + value: "https://modelzoo.co/model/ganjax" + }, + { + num: NumberInt("1693"), + value: "https://modelzoo.co/model/alphago" + }, + { + num: NumberInt("1694"), + value: "https://modelzoo.co/model/voice-filter-tensorflow" + }, + { + num: NumberInt("1695"), + value: "https://modelzoo.co/model/photowct" + }, + { + num: NumberInt("1696"), + value: "https://modelzoo.co/model/gan-tensorflow" + }, + { + num: NumberInt("1697"), + value: "https://modelzoo.co/model/lda2vec-pytorch" + }, + { + num: NumberInt("1698"), + value: "https://modelzoo.co/model/transearch" + }, + { + num: NumberInt("1699"), + value: "https://modelzoo.co/model/vae-pytorch" + }, + { + num: NumberInt("1700"), + value: "https://modelzoo.co/model/chainer_superresolution" + }, + { + num: NumberInt("1701"), + value: "https://modelzoo.co/model/jaxb-delegate-plugin" + }, + { + num: NumberInt("1702"), + value: "https://modelzoo.co/model/yahtzotron" + }, + { + num: NumberInt("1703"), + value: "https://modelzoo.co/model/flaxo" + }, + { + num: NumberInt("1704"), + value: "https://modelzoo.co/model/efficientdet-tensorflow2" + }, + { + num: NumberInt("1705"), + value: "https://modelzoo.co/model/random-wired-nn-tensorflow" + }, + { + num: NumberInt("1706"), + value: "https://modelzoo.co/model/language-detection-speech-using-dnn" + }, + { + num: NumberInt("1707"), + value: "https://modelzoo.co/model/bayesian-neural-networks-tensorflow" + }, + { + num: NumberInt("1708"), + value: "https://modelzoo.co/model/abcnn" + }, + { + num: NumberInt("1709"), + value: "https://modelzoo.co/model/multi-process-unreal" + }, + { + num: NumberInt("1710"), + value: "https://modelzoo.co/model/pyrrha-pynode" + }, + { + num: NumberInt("1711"), + value: "https://modelzoo.co/model/hog" + }, + { + num: NumberInt("1712"), + value: "https://modelzoo.co/model/custom-pooling" + }, + { + num: NumberInt("1713"), + value: "https://modelzoo.co/model/superconv" + }, + { + num: NumberInt("1714"), + value: "https://modelzoo.co/model/sam-tf" + }, + { + num: NumberInt("1715"), + value: "https://modelzoo.co/model/gans-slides-code-paper" + }, + { + num: NumberInt("1716"), + value: "https://modelzoo.co/model/tf-neural-style" + }, + { + num: NumberInt("1717"), + value: "https://modelzoo.co/model/machine-learning" + }, + { + num: NumberInt("1718"), + value: "https://modelzoo.co/model/semantic-style-transfer" + }, + { + num: NumberInt("1719"), + value: "https://modelzoo.co/model/phaser" + }, + { + num: NumberInt("1720"), + value: "https://modelzoo.co/model/mountain-car-continuous" + }, + { + num: NumberInt("1721"), + value: "https://modelzoo.co/model/cyclegan-tf22-multigpu" + }, + { + num: NumberInt("1722"), + value: "https://modelzoo.co/model/viraal" + }, + { + num: NumberInt("1723"), + value: "https://modelzoo.co/model/pointcloud-based-row-detection-using-shellnet" + }, + { + num: NumberInt("1724"), + value: "https://modelzoo.co/model/mdn-pyro" + }, + { + num: NumberInt("1725"), + value: "https://modelzoo.co/model/lightning-semi-supervised-learning" + }, + { + num: NumberInt("1726"), + value: "https://modelzoo.co/model/semantic-robustness" + }, + { + num: NumberInt("1727"), + value: "https://modelzoo.co/model/neural-image-caption" + }, + { + num: NumberInt("1728"), + value: "https://modelzoo.co/model/unrolled-gan" + }, + { + num: NumberInt("1729"), + value: "https://modelzoo.co/model/fn-jrestless-example" + }, + { + num: NumberInt("1730"), + value: "https://modelzoo.co/model/cql-jax" + }, + { + num: NumberInt("1731"), + value: "https://modelzoo.co/model/vit-flax" + }, + { + num: NumberInt("1732"), + value: "https://modelzoo.co/model/jax-fid" + }, + { + num: NumberInt("1733"), + value: "https://modelzoo.co/model/jax-skip-gram-negative-sampling" + }, + { + num: NumberInt("1734"), + value: "https://modelzoo.co/model/flax-66" + }, + { + num: NumberInt("1735"), + value: "https://modelzoo.co/model/asu-net" + }, + { + num: NumberInt("1736"), + value: "https://modelzoo.co/model/hotdog-not-hotdog" + }, + { + num: NumberInt("1737"), + value: "https://modelzoo.co/model/tinyimagenet-benchmarks" + }, + { + num: NumberInt("1738"), + value: "https://modelzoo.co/model/image-captioning-tensorflow" + }, + { + num: NumberInt("1739"), + value: "https://modelzoo.co/model/wassersteingan-tensorflow" + }, + { + num: NumberInt("1740"), + value: "https://modelzoo.co/model/lstm-tensorflow" + }, + { + num: NumberInt("1741"), + value: "https://modelzoo.co/model/capsule-network-tensorflow" + }, + { + num: NumberInt("1742"), + value: "https://modelzoo.co/model/pixelrnn" + }, + { + num: NumberInt("1743"), + value: "https://modelzoo.co/model/shufflenetv2-tensorflow" + }, + { + num: NumberInt("1744"), + value: "https://modelzoo.co/model/adversarialconvex" + }, + { + num: NumberInt("1745"), + value: "https://modelzoo.co/model/videogan-tensorflow" + }, + { + num: NumberInt("1746"), + value: "https://modelzoo.co/model/tf-gans" + }, + { + num: NumberInt("1747"), + value: "https://modelzoo.co/model/modular-ssd-tensorflow" + }, + { + num: NumberInt("1748"), + value: "https://modelzoo.co/model/infogan-tensorflow" + }, + { + num: NumberInt("1749"), + value: "https://modelzoo.co/model/gan-basic" + }, + { + num: NumberInt("1750"), + value: "https://modelzoo.co/model/document-image-unwarping-tensorflow" + }, + { + num: NumberInt("1751"), + value: "https://modelzoo.co/model/deep-posemachine" + }, + { + num: NumberInt("1752"), + value: "https://modelzoo.co/model/ssd-tensorflow" + }, + { + num: NumberInt("1753"), + value: "https://modelzoo.co/model/shake-shake-tensorflow" + }, + { + num: NumberInt("1754"), + value: "https://modelzoo.co/model/superpointpretraincpp-tensorflow" + }, + { + num: NumberInt("1755"), + value: "https://modelzoo.co/model/u-net-tensorflow" + }, + { + num: NumberInt("1756"), + value: "https://modelzoo.co/model/dynamic-memory-network-plus" + }, + { + num: NumberInt("1757"), + value: "https://modelzoo.co/model/feature-eng" + }, + { + num: NumberInt("1758"), + value: "https://modelzoo.co/model/1d-gan" + }, + { + num: NumberInt("1759"), + value: "https://modelzoo.co/model/mnasnet" + }, + { + num: NumberInt("1760"), + value: "https://modelzoo.co/model/pytorch-linear-gan" + }, + { + num: NumberInt("1761"), + value: "https://modelzoo.co/model/rdgan" + }, + { + num: NumberInt("1762"), + value: "https://modelzoo.co/model/spatialtransformer" + }, + { + num: NumberInt("1763"), + value: "https://modelzoo.co/model/skeleton-based-action-recognition" + }, + { + num: NumberInt("1764"), + value: "https://modelzoo.co/model/image-colorization" + }, + { + num: NumberInt("1765"), + value: "https://modelzoo.co/model/retrieval-chatbot" + }, + { + num: NumberInt("1766"), + value: "https://modelzoo.co/model/began" + }, + { + num: NumberInt("1767"), + value: "https://modelzoo.co/model/jax-dreamer" + }, + { + num: NumberInt("1768"), + value: "https://modelzoo.co/model/coodoo-listing" + }, + { + num: NumberInt("1769"), + value: "https://modelzoo.co/model/micronaut-jaxrs" + }, + { + num: NumberInt("1770"), + value: "https://modelzoo.co/model/holon-jaxrs" + }, + { + num: NumberInt("1771"), + value: "https://modelzoo.co/model/jax-transformations3d" + }, + { + num: NumberInt("1772"), + value: "https://modelzoo.co/model/jax-enhance" + }, + { + num: NumberInt("1773"), + value: "https://modelzoo.co/model/tme" + }, + { + num: NumberInt("1774"), + value: "https://modelzoo.co/model/som" + }, + { + num: NumberInt("1775"), + value: "https://modelzoo.co/model/neural-style-transfer-tensorflow-keras" + }, + { + num: NumberInt("1776"), + value: "https://modelzoo.co/model/arbitrary-style-transfer" + }, + { + num: NumberInt("1777"), + value: "https://modelzoo.co/model/vae-gan-autoencoding-beyond-pixels-using" + }, + { + num: NumberInt("1778"), + value: "https://modelzoo.co/model/neural-style-4" + }, + { + num: NumberInt("1779"), + value: "https://modelzoo.co/model/sequence-labeling" + }, + { + num: NumberInt("1780"), + value: "https://modelzoo.co/model/image-classification" + }, + { + num: NumberInt("1781"), + value: "https://modelzoo.co/model/deeplabv3plus-tensorflow" + }, + { + num: NumberInt("1782"), + value: "https://modelzoo.co/model/coteaching" + }, + { + num: NumberInt("1783"), + value: "https://modelzoo.co/model/deeplearning-papers-implementation" + }, + { + num: NumberInt("1784"), + value: "https://modelzoo.co/model/tf-transformer" + }, + { + num: NumberInt("1785"), + value: "https://modelzoo.co/model/psmnettf" + }, + { + num: NumberInt("1786"), + value: "https://modelzoo.co/model/style_transfer-tensorflow" + }, + { + num: NumberInt("1787"), + value: "https://modelzoo.co/model/3dbpconv" + }, + { + num: NumberInt("1788"), + value: "https://modelzoo.co/model/inception-module-tensorflow" + }, + { + num: NumberInt("1789"), + value: "https://modelzoo.co/model/tf-transliteration" + }, + { + num: NumberInt("1790"), + value: "https://modelzoo.co/model/pix2pix-tensorflow" + }, + { + num: NumberInt("1791"), + value: "https://modelzoo.co/model/categorical-variational-autoencoder" + }, + { + num: NumberInt("1792"), + value: "https://modelzoo.co/model/factorvae" + }, + { + num: NumberInt("1793"), + value: "https://modelzoo.co/model/tf-glow-tts" + }, + { + num: NumberInt("1794"), + value: "https://modelzoo.co/model/voice-authentication-cnn" + }, + { + num: NumberInt("1795"), + value: "https://modelzoo.co/model/tensorflow-cvae" + }, + { + num: NumberInt("1796"), + value: "https://modelzoo.co/model/gridmask-tensorflow" + }, + { + num: NumberInt("1797"), + value: "https://modelzoo.co/model/text-flask" + }, + { + num: NumberInt("1798"), + value: "https://modelzoo.co/model/sparse-auto-encoder" + }, + { + num: NumberInt("1799"), + value: "https://modelzoo.co/model/tensorflow-dtn" + }, + { + num: NumberInt("1800"), + value: "https://modelzoo.co/model/nec-tensorflow" + }, + { + num: NumberInt("1801"), + value: "https://modelzoo.co/model/rnn-pixel-prediction" + }, + { + num: NumberInt("1802"), + value: "https://modelzoo.co/model/tf-ft" + }, + { + num: NumberInt("1803"), + value: "https://modelzoo.co/model/dqn-2" + }, + { + num: NumberInt("1804"), + value: "https://modelzoo.co/model/x-ray-images-classification-with-keras" + }, + { + num: NumberInt("1805"), + value: "https://modelzoo.co/model/adaptiveattention" + }, + { + num: NumberInt("1806"), + value: "https://modelzoo.co/model/ali-mnist" + }, + { + num: NumberInt("1807"), + value: "https://modelzoo.co/model/depth-eigen" + }, + { + num: NumberInt("1808"), + value: "https://modelzoo.co/model/skip-gram-negative-sampling" + }, + { + num: NumberInt("1809"), + value: "https://modelzoo.co/model/pytorch-fcn-2" + }, + { + num: NumberInt("1810"), + value: "https://modelzoo.co/model/charades-algorithms" + }, + { + num: NumberInt("1811"), + value: "https://modelzoo.co/model/text2imagegluon" + }, + { + num: NumberInt("1812"), + value: "https://modelzoo.co/model/mxnet_kaldi" + }, + { + num: NumberInt("1813"), + value: "https://modelzoo.co/model/vrp-attention-jax" + }, + { + num: NumberInt("1814"), + value: "https://modelzoo.co/model/jax-meta-learning" + }, + { + num: NumberInt("1815"), + value: "https://modelzoo.co/model/mlp-mixer" + }, + { + num: NumberInt("1816"), + value: "https://modelzoo.co/model/jax-workshop" + }, + { + num: NumberInt("1817"), + value: "https://modelzoo.co/model/grax" + }, + { + num: NumberInt("1818"), + value: "https://modelzoo.co/model/jax-rs-linker" + }, + { + num: NumberInt("1819"), + value: "https://modelzoo.co/model/windmill-api" + }, + { + num: NumberInt("1820"), + value: "https://modelzoo.co/model/deep-illusion" + }, + { + num: NumberInt("1821"), + value: "https://modelzoo.co/model/deepqlearning" + }, + { + num: NumberInt("1822"), + value: "https://modelzoo.co/model/vision-transformer-pytorch-lightning" + }, + { + num: NumberInt("1823"), + value: "https://modelzoo.co/model/herocrabplugin" + }, + { + num: NumberInt("1824"), + value: "https://modelzoo.co/model/dbn-tf" + }, + { + num: NumberInt("1825"), + value: "https://modelzoo.co/model/tensorflow_project_template-2" + }, + { + num: NumberInt("1826"), + value: "https://modelzoo.co/model/rlntm-tensorflow" + }, + { + num: NumberInt("1827"), + value: "https://modelzoo.co/model/capsnet-5" + }, + { + num: NumberInt("1828"), + value: "https://modelzoo.co/model/yolov3-3" + }, + { + num: NumberInt("1829"), + value: "https://modelzoo.co/model/stargan-tensorflow-2" + }, + { + num: NumberInt("1830"), + value: "https://modelzoo.co/model/cnn-implementations" + }, + { + num: NumberInt("1831"), + value: "https://modelzoo.co/model/chatbot-al" + }, + { + num: NumberInt("1832"), + value: "https://modelzoo.co/model/pytfbusternet" + }, + { + num: NumberInt("1833"), + value: "https://modelzoo.co/model/esim-2" + }, + { + num: NumberInt("1834"), + value: "https://modelzoo.co/model/tensorflow-pix2pix" + }, + { + num: NumberInt("1835"), + value: "https://modelzoo.co/model/actor-critic" + }, + { + num: NumberInt("1836"), + value: "https://modelzoo.co/model/cyclegan-tensorflow-2" + }, + { + num: NumberInt("1837"), + value: "https://modelzoo.co/model/convolutional-draw" + }, + { + num: NumberInt("1838"), + value: "https://modelzoo.co/model/scrnn-tensorflow" + }, + { + num: NumberInt("1839"), + value: "https://modelzoo.co/model/capsnet-python-tensorflow" + }, + { + num: NumberInt("1840"), + value: "https://modelzoo.co/model/deep-convolutional-highway-network" + }, + { + num: NumberInt("1841"), + value: "https://modelzoo.co/model/mamnet-tensorflow-2" + }, + { + num: NumberInt("1842"), + value: "https://modelzoo.co/model/arch-deepspeech" + }, + { + num: NumberInt("1843"), + value: "https://modelzoo.co/model/dl-stereo-matching" + }, + { + num: NumberInt("1844"), + value: "https://modelzoo.co/model/toyrnntext" + }, + { + num: NumberInt("1845"), + value: "https://modelzoo.co/model/deep-q-network-using-tensorflow" + }, + { + num: NumberInt("1846"), + value: "https://modelzoo.co/model/fully-convolutional-networks-tf" + }, + { + num: NumberInt("1847"), + value: "https://modelzoo.co/model/ddpg-agent" + }, + { + num: NumberInt("1848"), + value: "https://modelzoo.co/model/residual-network" + }, + { + num: NumberInt("1849"), + value: "https://modelzoo.co/model/nifi-deepspeech" + }, + { + num: NumberInt("1850"), + value: "https://modelzoo.co/model/yolov4-swift-for-tensorflow" + }, + { + num: NumberInt("1851"), + value: "https://modelzoo.co/model/neural-turing-machine" + }, + { + num: NumberInt("1852"), + value: "https://modelzoo.co/model/deepdream" + }, + { + num: NumberInt("1853"), + value: "https://modelzoo.co/model/neural-machine-translation" + }, + { + num: NumberInt("1854"), + value: "https://modelzoo.co/model/qnn" + }, + { + num: NumberInt("1855"), + value: "https://modelzoo.co/model/faster-rcnn-rpn" + }, + { + num: NumberInt("1856"), + value: "https://modelzoo.co/model/wssdcnn" + }, + { + num: NumberInt("1857"), + value: "https://modelzoo.co/model/asynchronous-1step" + }, + { + num: NumberInt("1858"), + value: "https://modelzoo.co/model/image2image-translation" + }, + { + num: NumberInt("1859"), + value: "https://modelzoo.co/model/attention-chatbot" + }, + { + num: NumberInt("1860"), + value: "https://modelzoo.co/model/quick-nlp-tensorflow" + }, + { + num: NumberInt("1861"), + value: "https://modelzoo.co/model/skipgram-model" + }, + { + num: NumberInt("1862"), + value: "https://modelzoo.co/model/tdnn-tensorflow" + }, + { + num: NumberInt("1863"), + value: "https://modelzoo.co/model/vdsr" + }, + { + num: NumberInt("1864"), + value: "https://modelzoo.co/model/image-captioning-3" + }, + { + num: NumberInt("1865"), + value: "https://modelzoo.co/model/paper-implementations" + }, + { + num: NumberInt("1866"), + value: "https://modelzoo.co/model/text-normalization-in-pytorch" + }, + { + num: NumberInt("1867"), + value: "https://modelzoo.co/model/lsgan-with-pytorch" + }, + { + num: NumberInt("1868"), + value: "https://modelzoo.co/model/etos-tts" + }, + { + num: NumberInt("1869"), + value: "https://modelzoo.co/model/detection-experiments" + }, + { + num: NumberInt("1870"), + value: "https://modelzoo.co/model/neural-style-2" + }, + { + num: NumberInt("1871"), + value: "https://modelzoo.co/model/pytorch-disn" + }, + { + num: NumberInt("1872"), + value: "https://modelzoo.co/model/dl-playground" + }, + { + num: NumberInt("1873"), + value: "https://modelzoo.co/model/srcnn-mxnet" + }, + { + num: NumberInt("1874"), + value: "https://modelzoo.co/model/chainer-srcnn" + }, + { + num: NumberInt("1875"), + value: "https://modelzoo.co/model/jaxcql" + }, + { + num: NumberInt("1876"), + value: "https://modelzoo.co/model/jaxb" + }, + { + num: NumberInt("1877"), + value: "https://modelzoo.co/model/vkjax" + }, + { + num: NumberInt("1878"), + value: "https://modelzoo.co/model/glow-jax" + }, + { + num: NumberInt("1879"), + value: "https://modelzoo.co/model/bart-base-jax" + }, + { + num: NumberInt("1880"), + value: "https://modelzoo.co/model/bottleneck-transformer-flax" + }, + { + num: NumberInt("1881"), + value: "https://modelzoo.co/model/mech" + }, + { + num: NumberInt("1882"), + value: "https://modelzoo.co/model/rl-with-jax" + }, + { + num: NumberInt("1883"), + value: "https://modelzoo.co/model/stylegan2jax" + }, + { + num: NumberInt("1884"), + value: "https://modelzoo.co/model/rbm" + }, + { + num: NumberInt("1885"), + value: "https://modelzoo.co/model/show-and-tell" + }, + { + num: NumberInt("1886"), + value: "https://modelzoo.co/model/rgb-to-grayscale-autoencoder" + }, + { + num: NumberInt("1887"), + value: "https://modelzoo.co/model/vdsr-tensorflow" + }, + { + num: NumberInt("1888"), + value: "https://modelzoo.co/model/tensor-fcn" + }, + { + num: NumberInt("1889"), + value: "https://modelzoo.co/model/learning-chaos" + }, + { + num: NumberInt("1890"), + value: "https://modelzoo.co/model/cartpole-openai-tensorflow" + }, + { + num: NumberInt("1891"), + value: "https://modelzoo.co/model/i3d-master" + }, + { + num: NumberInt("1892"), + value: "https://modelzoo.co/model/speechdenoising" + }, + { + num: NumberInt("1893"), + value: "https://modelzoo.co/model/text-siamese-network" + }, + { + num: NumberInt("1894"), + value: "https://modelzoo.co/model/infogan-tensorflow20" + }, + { + num: NumberInt("1895"), + value: "https://modelzoo.co/model/dive-into-machine-learning" + }, + { + num: NumberInt("1896"), + value: "https://modelzoo.co/model/cvae-in-pytorch" + }, + { + num: NumberInt("1897"), + value: "https://modelzoo.co/model/pytorch-tiny-darknet" + }, + { + num: NumberInt("1898"), + value: "https://modelzoo.co/model/improved-contentdisentanglement" + }, + { + num: NumberInt("1899"), + value: "https://modelzoo.co/model/bayes-by-backprop-pytorch" + }, + { + num: NumberInt("1900"), + value: "https://modelzoo.co/model/spectral-stein-gradient" + }, + { + num: NumberInt("1901"), + value: "https://modelzoo.co/model/pytorch-rnns" + }, + { + num: NumberInt("1902"), + value: "https://modelzoo.co/model/disentangling-by-factorising" + }, + { + num: NumberInt("1903"), + value: "https://modelzoo.co/model/ddr" + }, + { + num: NumberInt("1904"), + value: "https://modelzoo.co/model/centernet-detection-kitti" + }, + { + num: NumberInt("1905"), + value: "https://modelzoo.co/model/ssdfpn" + }, + { + num: NumberInt("1906"), + value: "https://modelzoo.co/model/jax-nn-template" + }, + { + num: NumberInt("1907"), + value: "https://modelzoo.co/model/tensorf-jax" + }, + { + num: NumberInt("1908"), + value: "https://modelzoo.co/model/jax-reactor" + }, + { + num: NumberInt("1909"), + value: "https://modelzoo.co/model/unet-jax" + }, + { + num: NumberInt("1910"), + value: "https://modelzoo.co/model/openapi-jaxb" + }, + { + num: NumberInt("1911"), + value: "https://modelzoo.co/model/jax-rs-jpa-crud" + }, + { + num: NumberInt("1912"), + value: "https://modelzoo.co/model/springbootecommerceapijersey" + }, + { + num: NumberInt("1913"), + value: "https://modelzoo.co/model/rsmvc" + }, + { + num: NumberInt("1914"), + value: "https://modelzoo.co/model/jax-rl-2" + }, + { + num: NumberInt("1915"), + value: "https://modelzoo.co/model/svgd-jax" + }, + { + num: NumberInt("1916"), + value: "https://modelzoo.co/model/sxml-jaxp" + }, + { + num: NumberInt("1917"), + value: "https://modelzoo.co/model/jaxb-format-plugin" + }, + { + num: NumberInt("1918"), + value: "https://modelzoo.co/model/swin-transformer-v2-jax" + }, + { + num: NumberInt("1919"), + value: "https://modelzoo.co/model/pathfinder" + }, + { + num: NumberInt("1920"), + value: "https://modelzoo.co/model/dynaql" + }, + { + num: NumberInt("1921"), + value: "https://modelzoo.co/model/sympais" + }, + { + num: NumberInt("1922"), + value: "https://modelzoo.co/model/trajectory-optimisation-in-learned-multimodal-dynamical" + }, + { + num: NumberInt("1923"), + value: "https://modelzoo.co/model/lift-json-jsr311-provider" + }, + { + num: NumberInt("1924"), + value: "https://modelzoo.co/model/trust-region-policy-optimization" + }, + { + num: NumberInt("1925"), + value: "https://modelzoo.co/model/efficientnet-pytorch-3" + }, + { + num: NumberInt("1926"), + value: "https://modelzoo.co/model/dcgan-celeba" + }, + { + num: NumberInt("1927"), + value: "https://modelzoo.co/model/speech2face" + }, + { + num: NumberInt("1928"), + value: "https://modelzoo.co/model/pytorch-implementations-2" + }, + { + num: NumberInt("1929"), + value: "https://modelzoo.co/model/nnutils" + }, + { + num: NumberInt("1930"), + value: "https://modelzoo.co/model/drn-pytorch" + }, + { + num: NumberInt("1931"), + value: "https://modelzoo.co/model/dcgan-2" + }, + { + num: NumberInt("1932"), + value: "https://modelzoo.co/model/colorizedepthnet" + }, + { + num: NumberInt("1933"), + value: "https://modelzoo.co/model/unet-pytorch-2" + }, + { + num: NumberInt("1934"), + value: "https://modelzoo.co/model/meta-learning" + }, + { + num: NumberInt("1935"), + value: "https://modelzoo.co/model/disturblabel-pytorch" + }, + { + num: NumberInt("1936"), + value: "https://modelzoo.co/model/deepdeblur" + }, + { + num: NumberInt("1937"), + value: "https://modelzoo.co/model/sngan" + }, + { + num: NumberInt("1938"), + value: "https://modelzoo.co/model/mobilenetv2" + }, + { + num: NumberInt("1939"), + value: "https://modelzoo.co/model/vdsr-pytorch-tf2" + }, + { + num: NumberInt("1940"), + value: "https://modelzoo.co/model/yolov3-2" + }, + { + num: NumberInt("1941"), + value: "https://modelzoo.co/model/openpose-pytorch-2" + }, + { + num: NumberInt("1942"), + value: "https://modelzoo.co/model/densenet-pytorch-2" + }, + { + num: NumberInt("1943"), + value: "https://modelzoo.co/model/deep-coloring" + }, + { + num: NumberInt("1944"), + value: "https://modelzoo.co/model/mobilenet-customdata" + }, + { + num: NumberInt("1945"), + value: "https://modelzoo.co/model/neural-style-3" + }, + { + num: NumberInt("1946"), + value: "https://modelzoo.co/model/capsulenet" + }, + { + num: NumberInt("1947"), + value: "https://modelzoo.co/model/scene-text-segmentation" + }, + { + num: NumberInt("1948"), + value: "https://modelzoo.co/model/vst" + }, + { + num: NumberInt("1949"), + value: "https://modelzoo.co/model/deep-learning-cnn" + }, + { + num: NumberInt("1950"), + value: "https://modelzoo.co/model/pt-splitter" + }, + { + num: NumberInt("1951"), + value: "https://modelzoo.co/model/self-attention-gan-master-pytorch" + }, + { + num: NumberInt("1952"), + value: "https://modelzoo.co/model/nscupa-pytorch" + }, + { + num: NumberInt("1953"), + value: "https://modelzoo.co/model/forces" + }, + { + num: NumberInt("1954"), + value: "https://modelzoo.co/model/caps-em-routing-cifar" + }, + { + num: NumberInt("1955"), + value: "https://modelzoo.co/model/image_colorization-pytorch" + }, + { + num: NumberInt("1956"), + value: "https://modelzoo.co/model/alphadraughts" + }, + { + num: NumberInt("1957"), + value: "https://modelzoo.co/model/pytorch-in-nlp-research" + }, + { + num: NumberInt("1958"), + value: "https://modelzoo.co/model/deep-reinforcement-learning" + }, + { + num: NumberInt("1959"), + value: "https://modelzoo.co/model/mingrid-improved-rl-methods" + }, + { + num: NumberInt("1960"), + value: "https://modelzoo.co/model/pytorch-unsupervised-domain-adatation" + }, + { + num: NumberInt("1961"), + value: "https://modelzoo.co/model/td3-pytorch" + }, + { + num: NumberInt("1962"), + value: "https://modelzoo.co/model/image-style-transfer" + }, + { + num: NumberInt("1963"), + value: "https://modelzoo.co/model/indices-net" + }, + { + num: NumberInt("1964"), + value: "https://modelzoo.co/model/translatr" + }, + { + num: NumberInt("1965"), + value: "https://modelzoo.co/model/chainer-gan-trainer" + }, + { + num: NumberInt("1966"), + value: "https://modelzoo.co/model/gradle-java-rest-api" + }, + { + num: NumberInt("1967"), + value: "https://modelzoo.co/model/jaxdl" + }, + { + num: NumberInt("1968"), + value: "https://modelzoo.co/model/jaxdb" + }, + { + num: NumberInt("1969"), + value: "https://modelzoo.co/model/jackson-jakarta-rs-providers" + }, + { + num: NumberInt("1970"), + value: "https://modelzoo.co/model/jax-anchors" + }, + { + num: NumberInt("1971"), + value: "https://modelzoo.co/model/jax-rs-labs" + }, + { + num: NumberInt("1972"), + value: "https://modelzoo.co/model/siren-flax" + }, + { + num: NumberInt("1973"), + value: "https://modelzoo.co/model/a2c-jax" + }, + { + num: NumberInt("1974"), + value: "https://modelzoo.co/model/learning-drl" + }, + { + num: NumberInt("1975"), + value: "https://modelzoo.co/model/hyper-nn" + }, + { + num: NumberInt("1976"), + value: "https://modelzoo.co/model/player-zoo" + }, + { + num: NumberInt("1977"), + value: "https://modelzoo.co/model/pt-unet" + }, + { + num: NumberInt("1978"), + value: "https://modelzoo.co/model/semantic-segmentation" + }, + { + num: NumberInt("1979"), + value: "https://modelzoo.co/model/generative-adversarial-networks" + }, + { + num: NumberInt("1980"), + value: "https://modelzoo.co/model/ppo-pytorch-3" + }, + { + num: NumberInt("1981"), + value: "https://modelzoo.co/model/variational-autoencoder-pytorch-3" + }, + { + num: NumberInt("1982"), + value: "https://modelzoo.co/model/hierarchical-question-imagee-co-attention" + }, + { + num: NumberInt("1983"), + value: "https://modelzoo.co/model/lpips-j" + }, + { + num: NumberInt("1984"), + value: "https://modelzoo.co/model/flaxoptimizersbenchmark" + }, + { + num: NumberInt("1985"), + value: "https://modelzoo.co/model/flax-44" + }, + { + num: NumberInt("1986"), + value: "https://modelzoo.co/model/speech-jax" + }, + { + num: NumberInt("1987"), + value: "https://modelzoo.co/model/nerf-jax-flax-practice" + }, + { + num: NumberInt("1988"), + value: "https://modelzoo.co/model/palm-flax" + }, + { + num: NumberInt("1989"), + value: "https://modelzoo.co/model/gmlp" + }, + { + num: NumberInt("1990"), + value: "https://modelzoo.co/model/xpag" + }, + { + num: NumberInt("1991"), + value: "https://modelzoo.co/model/nerf" + }, + { + num: NumberInt("1992"), + value: "https://modelzoo.co/model/h-former" + }, + { + num: NumberInt("1993"), + value: "https://modelzoo.co/model/flax-u2net" + }, + { + num: NumberInt("1994"), + value: "https://modelzoo.co/model/ebgan-celeba" + }, + { + num: NumberInt("1995"), + value: "https://modelzoo.co/model/evolutionary-reinforcement-learning-for-openai-gym" + }, + { + num: NumberInt("1996"), + value: "https://modelzoo.co/model/pytorch_sac-2" + }, + { + num: NumberInt("1997"), + value: "https://modelzoo.co/model/flax-48" + }, + { + num: NumberInt("1998"), + value: "https://modelzoo.co/model/protein-bert-jax" + }, + { + num: NumberInt("1999"), + value: "https://modelzoo.co/model/set-transformer" + }, + { + num: NumberInt("2000"), + value: "https://modelzoo.co/model/nedem" + }, + { + num: NumberInt("2001"), + value: "https://modelzoo.co/model/flax-extra" + }, + { + num: NumberInt("2002"), + value: "https://modelzoo.co/model/resmlp-flax" + }, + { + num: NumberInt("2003"), + value: "https://modelzoo.co/model/implementation-deep-learning" + }, + { + num: NumberInt("2004"), + value: "https://modelzoo.co/model/zero-dce-jax" + }, + { + num: NumberInt("2005"), + value: "https://modelzoo.co/model/tf-torch-jax" + }, + { + num: NumberInt("2006"), + value: "https://modelzoo.co/model/deepvit-flax" + }, + { + num: NumberInt("2007"), + value: "https://modelzoo.co/model/fourier-neural-operator-flax" + }, + { + num: NumberInt("2008"), + value: "https://modelzoo.co/model/flax-t5-pre-training" + }, + { + num: NumberInt("2009"), + value: "https://modelzoo.co/model/ml-params-flax" + }, + { + num: NumberInt("2010"), + value: "https://modelzoo.co/model/jax-ddim" + }, + { + num: NumberInt("2011"), + value: "https://modelzoo.co/model/jax-rl-finetuning" + }, + { + num: NumberInt("2012"), + value: "https://modelzoo.co/model/human-body-segmentation" + }, + { + num: NumberInt("2013"), + value: "https://modelzoo.co/model/simple-rl-jax" + }, + { + num: NumberInt("2014"), + value: "https://modelzoo.co/model/adversarialcrypto" + }, + { + num: NumberInt("2015"), + value: "https://modelzoo.co/model/adversarialtext" + }, + { + num: NumberInt("2016"), + value: "https://modelzoo.co/model/attentionocr" + }, + { + num: NumberInt("2017"), + value: "https://modelzoo.co/model/audioset" + }, + { + num: NumberInt("2018"), + value: "https://modelzoo.co/model/braincoder" + }, + { + num: NumberInt("2019"), + value: "https://modelzoo.co/model/cognitivemappinganplanning" + }, + { + num: NumberInt("2020"), + value: "https://modelzoo.co/model/compression" + }, + { + num: NumberInt("2021"), + value: "https://modelzoo.co/model/deepspeech" + }, + { + num: NumberInt("2022"), + value: "https://modelzoo.co/model/deeplab" + }, + { + num: NumberInt("2023"), + value: "https://modelzoo.co/model/delf" + }, + { + num: NumberInt("2024"), + value: "https://modelzoo.co/model/gan" + }, + { + num: NumberInt("2025"), + value: "https://modelzoo.co/model/im2txt" + }, + { + num: NumberInt("2026"), + value: "https://modelzoo.co/model/learningunsupervisedlearning" + }, + { + num: NumberInt("2027"), + value: "https://modelzoo.co/model/lfads" + }, + { + num: NumberInt("2028"), + value: "https://modelzoo.co/model/maskgan" + }, + { + num: NumberInt("2029"), + value: "https://modelzoo.co/model/objectdetection" + }, + { + num: NumberInt("2030"), + value: "https://modelzoo.co/model/pclrl" + }, + { + num: NumberInt("2031"), + value: "https://modelzoo.co/model/slim" + }, + { + num: NumberInt("2032"), + value: "https://modelzoo.co/model/street" + }, + { + num: NumberInt("2033"), + value: "https://modelzoo.co/model/vid2depth" + }, + { + num: NumberInt("2034"), + value: "https://modelzoo.co/model/policy-gradient" + }, + { + num: NumberInt("2035"), + value: "https://modelzoo.co/model/fully-convolutional-networks-for-semantic-segmentation" + }, + { + num: NumberInt("2036"), + value: "https://modelzoo.co/model/deep-learning-of-binary-hash-codes" + }, + { + num: NumberInt("2037"), + value: "https://modelzoo.co/model/googlenet_cars-on-car-model-classification" + }, + { + num: NumberInt("2038"), + value: "https://modelzoo.co/model/segnet-and-bayesian-segnet" + }, + { + num: NumberInt("2039"), + value: "https://modelzoo.co/model/emotion-recognition-in-the-wild-via" + }, + { + num: NumberInt("2040"), + value: "https://modelzoo.co/model/resnets" + }, + { + num: NumberInt("2041"), + value: "https://modelzoo.co/model/cnn-object-proposal-models-for-salient" + }, + { + num: NumberInt("2042"), + value: "https://modelzoo.co/model/deep-hand" + }, + { + num: NumberInt("2043"), + value: "https://modelzoo.co/model/inception-bn-full-imagenet-model" + }, + { + num: NumberInt("2044"), + value: "https://modelzoo.co/model/deepyeast" + }, + { + num: NumberInt("2045"), + value: "https://modelzoo.co/model/imagenet-pre-trained-models-with-batch-normalization" + }, + { + num: NumberInt("2046"), + value: "https://modelzoo.co/model/resnet-101-for-regressing-3d-morphable-face" + }, + { + num: NumberInt("2047"), + value: "https://modelzoo.co/model/cascaded-fully-convolutional-networks-for-biomedical" + }, + { + num: NumberInt("2048"), + value: "https://modelzoo.co/model/deep-networks-for-earth-observation" + }, + { + num: NumberInt("2049"), + value: "https://modelzoo.co/model/supervised-learning-of-semantics-preserving-hash-via" + }, + { + num: NumberInt("2050"), + value: "https://modelzoo.co/model/bvlc-alexnet" + }, + { + num: NumberInt("2051"), + value: "https://modelzoo.co/model/bvlc-reference-caffenet" + }, + { + num: NumberInt("2052"), + value: "https://modelzoo.co/model/detectron" + }, + { + num: NumberInt("2053"), + value: "https://modelzoo.co/model/resnet-50" + }, + { + num: NumberInt("2054"), + value: "https://modelzoo.co/model/infogan" + }, + { + num: NumberInt("2055"), + value: "https://modelzoo.co/model/pix2pix-keras" + }, + { + num: NumberInt("2056"), + value: "https://modelzoo.co/model/colorful-image-colorization-keras" + }, + { + num: NumberInt("2057"), + value: "https://modelzoo.co/model/auxiliary-classifier-gan" + }, + { + num: NumberInt("2058"), + value: "https://modelzoo.co/model/adversarial-autoencoder-keras" + }, + { + num: NumberInt("2059"), + value: "https://modelzoo.co/model/bidirectional-gan" + }, + { + num: NumberInt("2060"), + value: "https://modelzoo.co/model/boundary-seeking-gan" + }, + { + num: NumberInt("2061"), + value: "https://modelzoo.co/model/conditional-gan" + }, + { + num: NumberInt("2062"), + value: "https://modelzoo.co/model/context-conditional-gan" + }, + { + num: NumberInt("2063"), + value: "https://modelzoo.co/model/coupled-gans" + }, + { + num: NumberInt("2064"), + value: "https://modelzoo.co/model/cyclegan" + }, + { + num: NumberInt("2065"), + value: "https://modelzoo.co/model/deep-convolutional-gan" + }, + { + num: NumberInt("2066"), + value: "https://modelzoo.co/model/discogan-keras" + }, + { + num: NumberInt("2067"), + value: "https://modelzoo.co/model/dualgan" + }, + { + num: NumberInt("2068"), + value: "https://modelzoo.co/model/generative-adversarial-network" + }, + { + num: NumberInt("2069"), + value: "https://modelzoo.co/model/infogan-keras" + }, + { + num: NumberInt("2070"), + value: "https://modelzoo.co/model/lsgan-keras" + }, + { + num: NumberInt("2071"), + value: "https://modelzoo.co/model/pix2pix-2" + }, + { + num: NumberInt("2072"), + value: "https://modelzoo.co/model/pixelda" + }, + { + num: NumberInt("2073"), + value: "https://modelzoo.co/model/semi-supervised-gan" + }, + { + num: NumberInt("2074"), + value: "https://modelzoo.co/model/super-resolution-gan" + }, + { + num: NumberInt("2075"), + value: "https://modelzoo.co/model/wasserstein-gan-keras" + }, + { + num: NumberInt("2076"), + value: "https://modelzoo.co/model/wasserstein-gan-gp" + }, + { + num: NumberInt("2077"), + value: "https://modelzoo.co/model/chainer_encoder_decoder" + }, + { + num: NumberInt("2078"), + value: "https://modelzoo.co/model/generative-adversarial-nets-gan" + }, + { + num: NumberInt("2079"), + value: "https://modelzoo.co/model/hyperface-tensorflow-implementation" + }, + { + num: NumberInt("2080"), + value: "https://modelzoo.co/model/adversarial-auto-encoders" + }, + { + num: NumberInt("2081"), + value: "https://modelzoo.co/model/dcgangluon" + }, + { + num: NumberInt("2082"), + value: "https://modelzoo.co/model/dcgan-face-generationgluon" + }, + { + num: NumberInt("2083"), + value: "https://modelzoo.co/model/variational-autoencoder-with-deconvolutions" + }, + { + num: NumberInt("2084"), + value: "https://modelzoo.co/model/t-sne-of-image-cnn-fc7-activations" + }, + { + num: NumberInt("2085"), + value: "https://modelzoo.co/model/uni-fold-jax" + }, + { + num: NumberInt("2086"), + value: "https://modelzoo.co/model/jaxline" + }, + { + num: NumberInt("2087"), + value: "https://modelzoo.co/model/tf2jax" + }, + { + num: NumberInt("2088"), + value: "https://modelzoo.co/model/transformer-in-transformer-flax" + }, + { + num: NumberInt("2089"), + value: "https://modelzoo.co/model/jax-influence" + }, + { + num: NumberInt("2090"), + value: "https://modelzoo.co/model/iree-jax" + }, + { + num: NumberInt("2091"), + value: "https://modelzoo.co/model/jaxb-visitor" + }, + { + num: NumberInt("2092"), + value: "https://modelzoo.co/model/sb3-jax" + }, + { + num: NumberInt("2093"), + value: "https://modelzoo.co/model/swagger-spring-jaxrs-sample-app" + }, + { + num: NumberInt("2094"), + value: "https://modelzoo.co/model/jaxb-fi" + }, + { + num: NumberInt("2095"), + value: "https://modelzoo.co/model/rl-jax" + }, + { + num: NumberInt("2096"), + value: "https://modelzoo.co/model/python-flax-id" + }, + { + num: NumberInt("2097"), + value: "https://modelzoo.co/model/cait-flax" + }, + { + num: NumberInt("2098"), + value: "https://modelzoo.co/model/simple-vit-flax" + }, + { + num: NumberInt("2099"), + value: "https://modelzoo.co/model/flax-cifar" + }, + { + num: NumberInt("2100"), + value: "https://modelzoo.co/model/docker-flax" + }, + { + num: NumberInt("2101"), + value: "https://modelzoo.co/model/crossvit-flax" + }, + { + num: NumberInt("2102"), + value: "https://modelzoo.co/model/nest-flax" + }, + { + num: NumberInt("2103"), + value: "https://modelzoo.co/model/pytorch-pretrained-bert" + }, + { + num: NumberInt("2104"), + value: "https://modelzoo.co/model/transformers" + }, + { + num: NumberInt("2105"), + value: "https://modelzoo.co/model/fastai" + }, + { + num: NumberInt("2106"), + value: "https://modelzoo.co/model/pytorch-lightning" + }, + { + num: NumberInt("2107"), + value: "https://modelzoo.co/model/magenta" + }, + { + num: NumberInt("2108"), + value: "https://modelzoo.co/model/pytorch_geometric" + }, + { + num: NumberInt("2109"), + value: "https://modelzoo.co/model/insightface" + }, + { + num: NumberInt("2110"), + value: "https://modelzoo.co/model/kubeflow" + }, + { + num: NumberInt("2111"), + value: "https://modelzoo.co/model/kaldi" + }, + { + num: NumberInt("2112"), + value: "https://modelzoo.co/model/flair" + }, + { + num: NumberInt("2113"), + value: "https://modelzoo.co/model/pytorch-vision" + }, + { + num: NumberInt("2114"), + value: "https://modelzoo.co/model/allennlp" + }, + { + num: NumberInt("2115"), + value: "https://modelzoo.co/model/dgl" + }, + { + num: NumberInt("2116"), + value: "https://modelzoo.co/model/yolov3" + }, + { + num: NumberInt("2117"), + value: "https://modelzoo.co/model/pretrained-modelspytorch" + }, + { + num: NumberInt("2118"), + value: "https://modelzoo.co/model/faster-r-cnn-caffe" + }, + { + num: NumberInt("2119"), + value: "https://modelzoo.co/model/pyro" + }, + { + num: NumberInt("2120"), + value: "https://modelzoo.co/model/keras-yolov3" + }, + { + num: NumberInt("2121"), + value: "https://modelzoo.co/model/efficientnet-pytorch" + }, + { + num: NumberInt("2122"), + value: "https://modelzoo.co/model/collection-of-generative-models-with-pytorch" + }, + { + num: NumberInt("2123"), + value: "https://modelzoo.co/model/attention-is-all-you-need-pytorch" + }, + { + num: NumberInt("2124"), + value: "https://modelzoo.co/model/striving-for-simplicity-pytorch" + }, + { + num: NumberInt("2125"), + value: "https://modelzoo.co/model/densepose" + }, + { + num: NumberInt("2126"), + value: "https://modelzoo.co/model/pytext" + }, + { + num: NumberInt("2127"), + value: "https://modelzoo.co/model/kornia" + }, + { + num: NumberInt("2128"), + value: "https://modelzoo.co/model/apex" + }, + { + num: NumberInt("2129"), + value: "https://modelzoo.co/model/torchgeometry" + }, + { + num: NumberInt("2130"), + value: "https://modelzoo.co/model/pulse" + }, + { + num: NumberInt("2131"), + value: "https://modelzoo.co/model/alphapose" + }, + { + num: NumberInt("2132"), + value: "https://modelzoo.co/model/deep-residual-networks" + }, + { + num: NumberInt("2133"), + value: "https://modelzoo.co/model/pytorch3d" + }, + { + num: NumberInt("2134"), + value: "https://modelzoo.co/model/face-alignment" + }, + { + num: NumberInt("2135"), + value: "https://modelzoo.co/model/neural-style-tensorflow" + }, + { + num: NumberInt("2136"), + value: "https://modelzoo.co/model/sentence-classification-with-cnn" + }, + { + num: NumberInt("2137"), + value: "https://modelzoo.co/model/pythia" + }, + { + num: NumberInt("2138"), + value: "https://modelzoo.co/model/bert-pytorch" + }, + { + num: NumberInt("2139"), + value: "https://modelzoo.co/model/realtime-multi-person-pose-estimation-tensorflow" + }, + { + num: NumberInt("2140"), + value: "https://modelzoo.co/model/grad-cam" + }, + { + num: NumberInt("2141"), + value: "https://modelzoo.co/model/single-shot-multibox-detector" + }, + { + num: NumberInt("2142"), + value: "https://modelzoo.co/model/cifar-10-on-pytorch-with-vgg-resnet" + }, + { + num: NumberInt("2143"), + value: "https://modelzoo.co/model/densenet-caffe" + }, + { + num: NumberInt("2144"), + value: "https://modelzoo.co/model/inferno-sklearn" + }, + { + num: NumberInt("2145"), + value: "https://modelzoo.co/model/skorch" + }, + { + num: NumberInt("2146"), + value: "https://modelzoo.co/model/pytorch-metric-learning" + }, + { + num: NumberInt("2147"), + value: "https://modelzoo.co/model/mesh-transformer-jax" + }, + { + num: NumberInt("2148"), + value: "https://modelzoo.co/model/pygcn" + }, + { + num: NumberInt("2149"), + value: "https://modelzoo.co/model/reading-wikipedia-to-answer-open-domain-questions" + }, + { + num: NumberInt("2150"), + value: "https://modelzoo.co/model/nemo" + }, + { + num: NumberInt("2151"), + value: "https://modelzoo.co/model/torchdiffeq" + }, + { + num: NumberInt("2152"), + value: "https://modelzoo.co/model/ignite" + }, + { + num: NumberInt("2153"), + value: "https://modelzoo.co/model/capsnet-tensorflow" + }, + { + num: NumberInt("2154"), + value: "https://modelzoo.co/model/faster-rcnndeeplabr-fcndeformable-convnetsfpnsoftnms" + }, + { + num: NumberInt("2155"), + value: "https://modelzoo.co/model/simple-faster-rcnn-pytorch" + }, + { + num: NumberInt("2156"), + value: "https://modelzoo.co/model/tensorflow-project-template" + }, + { + num: NumberInt("2157"), + value: "https://modelzoo.co/model/tacotron2" + }, + { + num: NumberInt("2158"), + value: "https://modelzoo.co/model/pytorch-summary" + }, + { + num: NumberInt("2159"), + value: "https://modelzoo.co/model/pytorch-opcounter" + }, + { + num: NumberInt("2160"), + value: "https://modelzoo.co/model/minigo" + }, + { + num: NumberInt("2161"), + value: "https://modelzoo.co/model/3d-resnets-pytorch" + }, + { + num: NumberInt("2162"), + value: "https://modelzoo.co/model/elf" + }, + { + num: NumberInt("2163"), + value: "https://modelzoo.co/model/person-reid_pytorch" + }, + { + num: NumberInt("2164"), + value: "https://modelzoo.co/model/tcn-pytorch" + }, + { + num: NumberInt("2165"), + value: "https://modelzoo.co/model/3ddfa" + }, + { + num: NumberInt("2166"), + value: "https://modelzoo.co/model/fast-r-cnn" + }, + { + num: NumberInt("2167"), + value: "https://modelzoo.co/model/transformer-xl" + }, + { + num: NumberInt("2168"), + value: "https://modelzoo.co/model/neural-style" + }, + { + num: NumberInt("2169"), + value: "https://modelzoo.co/model/pytorch-text" + }, + { + num: NumberInt("2170"), + value: "https://modelzoo.co/model/laser" + }, + { + num: NumberInt("2171"), + value: "https://modelzoo.co/model/kaolin" + }, + { + num: NumberInt("2172"), + value: "https://modelzoo.co/model/adabound" + }, + { + num: NumberInt("2173"), + value: "https://modelzoo.co/model/catalyst" + }, + { + num: NumberInt("2174"), + value: "https://modelzoo.co/model/detectronpytorch" + }, + { + num: NumberInt("2175"), + value: "https://modelzoo.co/model/facenet-pytorch" + }, + { + num: NumberInt("2176"), + value: "https://modelzoo.co/model/deepjazz" + }, + { + num: NumberInt("2177"), + value: "https://modelzoo.co/model/gpytorch" + }, + { + num: NumberInt("2178"), + value: "https://modelzoo.co/model/spotlight" + }, + { + num: NumberInt("2179"), + value: "https://modelzoo.co/model/gpytorch-pytorch" + }, + { + num: NumberInt("2180"), + value: "https://modelzoo.co/model/flownet-20" + }, + { + num: NumberInt("2181"), + value: "https://modelzoo.co/model/xlm" + }, + { + num: NumberInt("2182"), + value: "https://modelzoo.co/model/enas-pytorch" + }, + { + num: NumberInt("2183"), + value: "https://modelzoo.co/model/neuralcoref" + }, + { + num: NumberInt("2184"), + value: "https://modelzoo.co/model/pytorch-optimizer" + }, + { + num: NumberInt("2185"), + value: "https://modelzoo.co/model/capsnet-keras" + }, + { + num: NumberInt("2186"), + value: "https://modelzoo.co/model/pytorch-playground" + }, + { + num: NumberInt("2187"), + value: "https://modelzoo.co/model/pytorch-generative-model-collections" + }, + { + num: NumberInt("2188"), + value: "https://modelzoo.co/model/botorch" + }, + { + num: NumberInt("2189"), + value: "https://modelzoo.co/model/infersent" + }, + { + num: NumberInt("2190"), + value: "https://modelzoo.co/model/torchcv" + }, + { + num: NumberInt("2191"), + value: "https://modelzoo.co/model/pytorchviz" + }, + { + num: NumberInt("2192"), + value: "https://modelzoo.co/model/minimalrl" + }, + { + num: NumberInt("2193"), + value: "https://modelzoo.co/model/squeezenet-caffe" + }, + { + num: NumberInt("2194"), + value: "https://modelzoo.co/model/pytorch-nlp" + }, + { + num: NumberInt("2195"), + value: "https://modelzoo.co/model/neural-style-transfer-2" + }, + { + num: NumberInt("2196"), + value: "https://modelzoo.co/model/loss-landscape" + }, + { + num: NumberInt("2197"), + value: "https://modelzoo.co/model/mmaction2" + }, + { + num: NumberInt("2198"), + value: "https://modelzoo.co/model/averaged-stochastic-gradient-descent-with-weight" + }, + { + num: NumberInt("2199"), + value: "https://modelzoo.co/model/mmpose" + }, + { + num: NumberInt("2200"), + value: "https://modelzoo.co/model/pytorch-encoding" + }, + { + num: NumberInt("2201"), + value: "https://modelzoo.co/model/pytorch-faster-rcnn" + }, + { + num: NumberInt("2202"), + value: "https://modelzoo.co/model/data-augmentation-and-sampling-for-pytorch" + }, + { + num: NumberInt("2203"), + value: "https://modelzoo.co/model/ax" + }, + { + num: NumberInt("2204"), + value: "https://modelzoo.co/model/learn2learn" + }, + { + num: NumberInt("2205"), + value: "https://modelzoo.co/model/mask-r-cnn-mxnet" + }, + { + num: NumberInt("2206"), + value: "https://modelzoo.co/model/pytorch-fid" + }, + { + num: NumberInt("2207"), + value: "https://modelzoo.co/model/reformer-pytorch" + }, + { + num: NumberInt("2208"), + value: "https://modelzoo.co/model/pytorch-fcn" + }, + { + num: NumberInt("2209"), + value: "https://modelzoo.co/model/sparseconvnet" + }, + { + num: NumberInt("2210"), + value: "https://modelzoo.co/model/lightly" + }, + { + num: NumberInt("2211"), + value: "https://modelzoo.co/model/minkowskiengine" + }, + { + num: NumberInt("2212"), + value: "https://modelzoo.co/model/pytorchxla" + }, + { + num: NumberInt("2213"), + value: "https://modelzoo.co/model/fcis" + }, + { + num: NumberInt("2214"), + value: "https://modelzoo.co/model/style-transfer" + }, + { + num: NumberInt("2215"), + value: "https://modelzoo.co/model/yolo2" + }, + { + num: NumberInt("2216"), + value: "https://modelzoo.co/model/poincare-embeddings" + }, + { + num: NumberInt("2217"), + value: "https://modelzoo.co/model/pytorch-geometric-temporal" + }, + { + num: NumberInt("2218"), + value: "https://modelzoo.co/model/chainercv" + }, + { + num: NumberInt("2219"), + value: "https://modelzoo.co/model/end-to-end-negotiator" + }, + { + num: NumberInt("2220"), + value: "https://modelzoo.co/model/efficient_densenet_pytorch" + }, + { + num: NumberInt("2221"), + value: "https://modelzoo.co/model/pytorch-openai-transformer-lm" + }, + { + num: NumberInt("2222"), + value: "https://modelzoo.co/model/jiant" + }, + { + num: NumberInt("2223"), + value: "https://modelzoo.co/model/qnnpack" + }, + { + num: NumberInt("2224"), + value: "https://modelzoo.co/model/higher" + }, + { + num: NumberInt("2225"), + value: "https://modelzoo.co/model/crf-rnn" + }, + { + num: NumberInt("2226"), + value: "https://modelzoo.co/model/attention-transfer" + }, + { + num: NumberInt("2227"), + value: "https://modelzoo.co/model/cvxpylayers" + }, + { + num: NumberInt("2228"), + value: "https://modelzoo.co/model/repdistiller" + }, + { + num: NumberInt("2229"), + value: "https://modelzoo.co/model/deep-feature-flow" + }, + { + num: NumberInt("2230"), + value: "https://modelzoo.co/model/pretty-tensor" + }, + { + num: NumberInt("2231"), + value: "https://modelzoo.co/model/center-loss" + }, + { + num: NumberInt("2232"), + value: "https://modelzoo.co/model/realtime_multi-person_pose_estimation" + }, + { + num: NumberInt("2233"), + value: "https://modelzoo.co/model/pytorch-qrnn" + }, + { + num: NumberInt("2234"), + value: "https://modelzoo.co/model/deep-head-pose" + }, + { + num: NumberInt("2235"), + value: "https://modelzoo.co/model/inplace_abn" + }, + { + num: NumberInt("2236"), + value: "https://modelzoo.co/model/torchstat" + }, + { + num: NumberInt("2237"), + value: "https://modelzoo.co/model/redner" + }, + { + num: NumberInt("2238"), + value: "https://modelzoo.co/model/pytorch-toolbelt" + }, + { + num: NumberInt("2239"), + value: "https://modelzoo.co/model/nvlabsdg-net" + }, + { + num: NumberInt("2240"), + value: "https://modelzoo.co/model/human-pose-estimation-with-tensorflow" + }, + { + num: NumberInt("2241"), + value: "https://modelzoo.co/model/capsgnn" + }, + { + num: NumberInt("2242"), + value: "https://modelzoo.co/model/dilated-resnet-combination-with-dilated-convolutions" + }, + { + num: NumberInt("2243"), + value: "https://modelzoo.co/model/bindsnet" + }, + { + num: NumberInt("2244"), + value: "https://modelzoo.co/model/hub" + }, + { + num: NumberInt("2245"), + value: "https://modelzoo.co/model/crypten" + }, + { + num: NumberInt("2246"), + value: "https://modelzoo.co/model/sockeye" + }, + { + num: NumberInt("2247"), + value: "https://modelzoo.co/model/single-shot-multibox-detector-keras" + }, + { + num: NumberInt("2248"), + value: "https://modelzoo.co/model/pytorchtext" + }, + { + num: NumberInt("2249"), + value: "https://modelzoo.co/model/neural-turing-machine-in-tensorflow" + }, + { + num: NumberInt("2250"), + value: "https://modelzoo.co/model/tensornets" + }, + { + num: NumberInt("2251"), + value: "https://modelzoo.co/model/pytorch-pose" + }, + { + num: NumberInt("2252"), + value: "https://modelzoo.co/model/bert-ner" + }, + { + num: NumberInt("2253"), + value: "https://modelzoo.co/model/pytorch-struct" + }, + { + num: NumberInt("2254"), + value: "https://modelzoo.co/model/pytorch-retinanet" + }, + { + num: NumberInt("2255"), + value: "https://modelzoo.co/model/tsn-pytorch" + }, + { + num: NumberInt("2256"), + value: "https://modelzoo.co/model/video-frame-interpolation-via-adaptive-separable" + }, + { + num: NumberInt("2257"), + value: "https://modelzoo.co/model/mask-rcnn" + }, + { + num: NumberInt("2258"), + value: "https://modelzoo.co/model/cnn-text-classification" + }, + { + num: NumberInt("2259"), + value: "https://modelzoo.co/model/pytorch-deform-conv" + }, + { + num: NumberInt("2260"), + value: "https://modelzoo.co/model/sfmlearner-pytorch" + }, + { + num: NumberInt("2261"), + value: "https://modelzoo.co/model/pytorch-style-transfer" + }, + { + num: NumberInt("2262"), + value: "https://modelzoo.co/model/torchmoji" + }, + { + num: NumberInt("2263"), + value: "https://modelzoo.co/model/probtorch" + }, + { + num: NumberInt("2264"), + value: "https://modelzoo.co/model/lm-lstm-crf" + }, + { + num: NumberInt("2265"), + value: "https://modelzoo.co/model/voicefilter" + }, + { + num: NumberInt("2266"), + value: "https://modelzoo.co/model/pytorch-pruning" + }, + { + num: NumberInt("2267"), + value: "https://modelzoo.co/model/pytorch-wavenet" + }, + { + num: NumberInt("2268"), + value: "https://modelzoo.co/model/yusuketomotochainer-fast-neuralstyle" + }, + { + num: NumberInt("2269"), + value: "https://modelzoo.co/model/relational-networks" + }, + { + num: NumberInt("2270"), + value: "https://modelzoo.co/model/pytorch2keras" + }, + { + num: NumberInt("2271"), + value: "https://modelzoo.co/model/webdataset" + }, + { + num: NumberInt("2272"), + value: "https://modelzoo.co/model/prototypical-networks-for-few-shot-learning-pytorch" + }, + { + num: NumberInt("2273"), + value: "https://modelzoo.co/model/cnn-visualization-using-tensorflow" + }, + { + num: NumberInt("2274"), + value: "https://modelzoo.co/model/graphsage-simple" + }, + { + num: NumberInt("2275"), + value: "https://modelzoo.co/model/medicaltorch" + }, + { + num: NumberInt("2276"), + value: "https://modelzoo.co/model/pytorch-center-loss" + }, + { + num: NumberInt("2277"), + value: "https://modelzoo.co/model/keras-realtime-multi-person-pose-estimation" + }, + { + num: NumberInt("2278"), + value: "https://modelzoo.co/model/inferring-and-executing-programs-for-visual" + }, + { + num: NumberInt("2279"), + value: "https://modelzoo.co/model/extension-cpp" + }, + { + num: NumberInt("2280"), + value: "https://modelzoo.co/model/faceboxespytorch" + }, + { + num: NumberInt("2281"), + value: "https://modelzoo.co/model/densenet" + }, + { + num: NumberInt("2282"), + value: "https://modelzoo.co/model/3d-convolutional-neural-networks-in-tensorflow" + }, + { + num: NumberInt("2283"), + value: "https://modelzoo.co/model/character-aware-neural-language-models" + }, + { + num: NumberInt("2284"), + value: "https://modelzoo.co/model/translate" + }, + { + num: NumberInt("2285"), + value: "https://modelzoo.co/model/flownet" + }, + { + num: NumberInt("2286"), + value: "https://modelzoo.co/model/gpt-2-pytorch" + }, + { + num: NumberInt("2287"), + value: "https://modelzoo.co/model/texar-pytorch" + }, + { + num: NumberInt("2288"), + value: "https://modelzoo.co/model/breast_cancer_classifier" + }, + { + num: NumberInt("2289"), + value: "https://modelzoo.co/model/bottom-up-attention-vqa" + }, + { + num: NumberInt("2290"), + value: "https://modelzoo.co/model/convolutional-lstm-network" + }, + { + num: NumberInt("2291"), + value: "https://modelzoo.co/model/densely-connected-convolutional-networks-2" + }, + { + num: NumberInt("2292"), + value: "https://modelzoo.co/model/ncrf" + }, + { + num: NumberInt("2293"), + value: "https://modelzoo.co/model/mtcnn-original-detector" + }, + { + num: NumberInt("2294"), + value: "https://modelzoo.co/model/flow-guided-feature-aggregation" + }, + { + num: NumberInt("2295"), + value: "https://modelzoo.co/model/condensenet" + }, + { + num: NumberInt("2296"), + value: "https://modelzoo.co/model/neural-style-pt" + }, + { + num: NumberInt("2297"), + value: "https://modelzoo.co/model/pytorch-cnn-finetune" + }, + { + num: NumberInt("2298"), + value: "https://modelzoo.co/model/generative-handwriting-demo-using-tensorflow" + }, + { + num: NumberInt("2299"), + value: "https://modelzoo.co/model/sphereface_pytorch" + }, + { + num: NumberInt("2300"), + value: "https://modelzoo.co/model/former" + }, + { + num: NumberInt("2301"), + value: "https://modelzoo.co/model/federated-learning" + }, + { + num: NumberInt("2302"), + value: "https://modelzoo.co/model/flashtorch" + }, + { + num: NumberInt("2303"), + value: "https://modelzoo.co/model/vqapytorch" + }, + { + num: NumberInt("2304"), + value: "https://modelzoo.co/model/pvanet" + }, + { + num: NumberInt("2305"), + value: "https://modelzoo.co/model/torchgpipe" + }, + { + num: NumberInt("2306"), + value: "https://modelzoo.co/model/clustergcn" + }, + { + num: NumberInt("2307"), + value: "https://modelzoo.co/model/illustration2vec" + }, + { + num: NumberInt("2308"), + value: "https://modelzoo.co/model/torchbeast" + }, + { + num: NumberInt("2309"), + value: "https://modelzoo.co/model/torchbearer" + }, + { + num: NumberInt("2310"), + value: "https://modelzoo.co/model/random-erasing" + }, + { + num: NumberInt("2311"), + value: "https://modelzoo.co/model/euclidesdb" + }, + { + num: NumberInt("2312"), + value: "https://modelzoo.co/model/pytorch-capsule" + }, + { + num: NumberInt("2313"), + value: "https://modelzoo.co/model/deep-compression-alexnet" + }, + { + num: NumberInt("2314"), + value: "https://modelzoo.co/model/pytorch-deeplab-resnet" + }, + { + num: NumberInt("2315"), + value: "https://modelzoo.co/model/mtcnn" + }, + { + num: NumberInt("2316"), + value: "https://modelzoo.co/model/alexnet-vgg-16-vgg-19-and" + }, + { + num: NumberInt("2317"), + value: "https://modelzoo.co/model/torchprof" + }, + { + num: NumberInt("2318"), + value: "https://modelzoo.co/model/duc" + }, + { + num: NumberInt("2319"), + value: "https://modelzoo.co/model/diracnets" + }, + { + num: NumberInt("2320"), + value: "https://modelzoo.co/model/wide-resnet-model-in-pytorch" + }, + { + num: NumberInt("2321"), + value: "https://modelzoo.co/model/pytorch-pose-hg-3d" + }, + { + num: NumberInt("2322"), + value: "https://modelzoo.co/model/geoopt" + }, + { + num: NumberInt("2323"), + value: "https://modelzoo.co/model/spatial-transformer-networks" + }, + { + num: NumberInt("2324"), + value: "https://modelzoo.co/model/mxnet-face" + }, + { + num: NumberInt("2325"), + value: "https://modelzoo.co/model/pytorch2caffe" + }, + { + num: NumberInt("2326"), + value: "https://modelzoo.co/model/conve" + }, + { + num: NumberInt("2327"), + value: "https://modelzoo.co/model/dpn" + }, + { + num: NumberInt("2328"), + value: "https://modelzoo.co/model/qp-solver" + }, + { + num: NumberInt("2329"), + value: "https://modelzoo.co/model/pytorch-flows" + }, + { + num: NumberInt("2330"), + value: "https://modelzoo.co/model/yolo-in-caffe" + }, + { + num: NumberInt("2331"), + value: "https://modelzoo.co/model/resnet-mxnet" + }, + { + num: NumberInt("2332"), + value: "https://modelzoo.co/model/pytoune" + }, + { + num: NumberInt("2333"), + value: "https://modelzoo.co/model/poutyne" + }, + { + num: NumberInt("2334"), + value: "https://modelzoo.co/model/treelstmpytorch" + }, + { + num: NumberInt("2335"), + value: "https://modelzoo.co/model/colorization-pytorch" + }, + { + num: NumberInt("2336"), + value: "https://modelzoo.co/model/roialignpytorch" + }, + { + num: NumberInt("2337"), + value: "https://modelzoo.co/model/convert_torch_to_pytorch" + }, + { + num: NumberInt("2338"), + value: "https://modelzoo.co/model/pytorch_cluster" + }, + { + num: NumberInt("2339"), + value: "https://modelzoo.co/model/pytorch-ntm" + }, + { + num: NumberInt("2340"), + value: "https://modelzoo.co/model/pytorch-dense-correspondence" + }, + { + num: NumberInt("2341"), + value: "https://modelzoo.co/model/pytorch-maml" + }, + { + num: NumberInt("2342"), + value: "https://modelzoo.co/model/ban-vqa" + }, + { + num: NumberInt("2343"), + value: "https://modelzoo.co/model/matchbox" + }, + { + num: NumberInt("2344"), + value: "https://modelzoo.co/model/neuralart" + }, + { + num: NumberInt("2345"), + value: "https://modelzoo.co/model/stn-ocr" + }, + { + num: NumberInt("2346"), + value: "https://modelzoo.co/model/pytorch-made" + }, + { + num: NumberInt("2347"), + value: "https://modelzoo.co/model/structured-self-attention" + }, + { + num: NumberInt("2348"), + value: "https://modelzoo.co/model/attn2d" + }, + { + num: NumberInt("2349"), + value: "https://modelzoo.co/model/arnold" + }, + { + num: NumberInt("2350"), + value: "https://modelzoo.co/model/smash" + }, + { + num: NumberInt("2351"), + value: "https://modelzoo.co/model/visual-question-answering" + }, + { + num: NumberInt("2352"), + value: "https://modelzoo.co/model/pytorch-coviar" + }, + { + num: NumberInt("2353"), + value: "https://modelzoo.co/model/simgnn" + }, + { + num: NumberInt("2354"), + value: "https://modelzoo.co/model/capsnet-pytorch" + }, + { + num: NumberInt("2355"), + value: "https://modelzoo.co/model/resnextpytorch" + }, + { + num: NumberInt("2356"), + value: "https://modelzoo.co/model/graphwaveletneuralnetwork" + }, + { + num: NumberInt("2357"), + value: "https://modelzoo.co/model/steal" + }, + { + num: NumberInt("2358"), + value: "https://modelzoo.co/model/lucent" + }, + { + num: NumberInt("2359"), + value: "https://modelzoo.co/model/honk" + }, + { + num: NumberInt("2360"), + value: "https://modelzoo.co/model/trellisnet" + }, + { + num: NumberInt("2361"), + value: "https://modelzoo.co/model/openchem" + }, + { + num: NumberInt("2362"), + value: "https://modelzoo.co/model/pixyz" + }, + { + num: NumberInt("2363"), + value: "https://modelzoo.co/model/pytorch-lbfgs" + }, + { + num: NumberInt("2364"), + value: "https://modelzoo.co/model/wavetorch" + }, + { + num: NumberInt("2365"), + value: "https://modelzoo.co/model/yolo2-pytorch" + }, + { + num: NumberInt("2366"), + value: "https://modelzoo.co/model/xlearn" + }, + { + num: NumberInt("2367"), + value: "https://modelzoo.co/model/a-structured-self-attentive-sentence-embedding" + }, + { + num: NumberInt("2368"), + value: "https://modelzoo.co/model/flappybird-dqn" + }, + { + num: NumberInt("2369"), + value: "https://modelzoo.co/model/vsepp" + }, + { + num: NumberInt("2370"), + value: "https://modelzoo.co/model/neural-ode" + }, + { + num: NumberInt("2371"), + value: "https://modelzoo.co/model/deformable-convolution-pytorch" + }, + { + num: NumberInt("2372"), + value: "https://modelzoo.co/model/shufflenet-v2-pytorch" + }, + { + num: NumberInt("2373"), + value: "https://modelzoo.co/model/fast-neural-style" + }, + { + num: NumberInt("2374"), + value: "https://modelzoo.co/model/ggnnpytorch" + }, + { + num: NumberInt("2375"), + value: "https://modelzoo.co/model/densebody_pytorch" + }, + { + num: NumberInt("2376"), + value: "https://modelzoo.co/model/pytorch-human-pose-estimation" + }, + { + num: NumberInt("2377"), + value: "https://modelzoo.co/model/deeppose" + }, + { + num: NumberInt("2378"), + value: "https://modelzoo.co/model/optnet" + }, + { + num: NumberInt("2379"), + value: "https://modelzoo.co/model/drqa" + }, + { + num: NumberInt("2380"), + value: "https://modelzoo.co/model/pytorch-contrib" + }, + { + num: NumberInt("2381"), + value: "https://modelzoo.co/model/pytorchneuralstyletransfer" + }, + { + num: NumberInt("2382"), + value: "https://modelzoo.co/model/glow-pytorch" + }, + { + num: NumberInt("2383"), + value: "https://modelzoo.co/model/ngcn" + }, + { + num: NumberInt("2384"), + value: "https://modelzoo.co/model/ngcn-pytorch" + }, + { + num: NumberInt("2385"), + value: "https://modelzoo.co/model/coordconv-pytorch" + }, + { + num: NumberInt("2386"), + value: "https://modelzoo.co/model/jointbert" + }, + { + num: NumberInt("2387"), + value: "https://modelzoo.co/model/torch2coreml" + }, + { + num: NumberInt("2388"), + value: "https://modelzoo.co/model/pywick" + }, + { + num: NumberInt("2389"), + value: "https://modelzoo.co/model/precipitation-nowcasting" + }, + { + num: NumberInt("2390"), + value: "https://modelzoo.co/model/torchnca" + }, + { + num: NumberInt("2391"), + value: "https://modelzoo.co/model/pytorch-i-revnet" + }, + { + num: NumberInt("2392"), + value: "https://modelzoo.co/model/weakly_detector" + }, + { + num: NumberInt("2393"), + value: "https://modelzoo.co/model/magnet" + }, + { + num: NumberInt("2394"), + value: "https://modelzoo.co/model/deepfloat" + }, + { + num: NumberInt("2395"), + value: "https://modelzoo.co/model/googlenet-convolutional-neural-network-groups-movie" + }, + { + num: NumberInt("2396"), + value: "https://modelzoo.co/model/tbd-nets" + }, + { + num: NumberInt("2397"), + value: "https://modelzoo.co/model/pytorch-toolbox" + }, + { + num: NumberInt("2398"), + value: "https://modelzoo.co/model/bmxnet" + }, + { + num: NumberInt("2399"), + value: "https://modelzoo.co/model/nonechucks" + }, + { + num: NumberInt("2400"), + value: "https://modelzoo.co/model/gradientepisodicmemory" + }, + { + num: NumberInt("2401"), + value: "https://modelzoo.co/model/qanet-pytorch" + }, + { + num: NumberInt("2402"), + value: "https://modelzoo.co/model/end-to-end-memory-networks" + }, + { + num: NumberInt("2403"), + value: "https://modelzoo.co/model/yolov2-chainer" + }, + { + num: NumberInt("2404"), + value: "https://modelzoo.co/model/pyvarinf" + }, + { + num: NumberInt("2405"), + value: "https://modelzoo.co/model/resnet-38" + }, + { + num: NumberInt("2406"), + value: "https://modelzoo.co/model/r2plus1d-pytorch" + }, + { + num: NumberInt("2407"), + value: "https://modelzoo.co/model/argus-tensor-stream" + }, + { + num: NumberInt("2408"), + value: "https://modelzoo.co/model/pytorch-dqn" + }, + { + num: NumberInt("2409"), + value: "https://modelzoo.co/model/esim" + }, + { + num: NumberInt("2410"), + value: "https://modelzoo.co/model/tripletlossfacenet" + }, + { + num: NumberInt("2411"), + value: "https://modelzoo.co/model/pytorch-es" + }, + { + num: NumberInt("2412"), + value: "https://modelzoo.co/model/caffemodel2pytorch" + }, + { + num: NumberInt("2413"), + value: "https://modelzoo.co/model/mnist-center-loss-pytorch" + }, + { + num: NumberInt("2414"), + value: "https://modelzoo.co/model/pytorch-explain-black-box" + }, + { + num: NumberInt("2415"), + value: "https://modelzoo.co/model/linformer-pytorch" + }, + { + num: NumberInt("2416"), + value: "https://modelzoo.co/model/groupy" + }, + { + num: NumberInt("2417"), + value: "https://modelzoo.co/model/generative-query-network-pytorch" + }, + { + num: NumberInt("2418"), + value: "https://modelzoo.co/model/torchani" + }, + { + num: NumberInt("2419"), + value: "https://modelzoo.co/model/pytorch_fft" + }, + { + num: NumberInt("2420"), + value: "https://modelzoo.co/model/context_encoder_pytorch" + }, + { + num: NumberInt("2421"), + value: "https://modelzoo.co/model/face_attention_network" + }, + { + num: NumberInt("2422"), + value: "https://modelzoo.co/model/gensen" + }, + { + num: NumberInt("2423"), + value: "https://modelzoo.co/model/tensorflow-fasttext" + }, + { + num: NumberInt("2424"), + value: "https://modelzoo.co/model/nmp_qc" + }, + { + num: NumberInt("2425"), + value: "https://modelzoo.co/model/appnp" + }, + { + num: NumberInt("2426"), + value: "https://modelzoo.co/model/salad" + }, + { + num: NumberInt("2427"), + value: "https://modelzoo.co/model/gogh" + }, + { + num: NumberInt("2428"), + value: "https://modelzoo.co/model/pytorch-ner-bilstm-cnn-crf" + }, + { + num: NumberInt("2429"), + value: "https://modelzoo.co/model/retinanet" + }, + { + num: NumberInt("2430"), + value: "https://modelzoo.co/model/dnc" + }, + { + num: NumberInt("2431"), + value: "https://modelzoo.co/model/snapshot-ensembles" + }, + { + num: NumberInt("2432"), + value: "https://modelzoo.co/model/efficientnets-pytorch" + }, + { + num: NumberInt("2433"), + value: "https://modelzoo.co/model/learning-to-learn-by-gradient-descent" + }, + { + num: NumberInt("2434"), + value: "https://modelzoo.co/model/attentionwalk" + }, + { + num: NumberInt("2435"), + value: "https://modelzoo.co/model/faster-rcnn-chainer" + }, + { + num: NumberInt("2436"), + value: "https://modelzoo.co/model/transfer-nlp" + }, + { + num: NumberInt("2437"), + value: "https://modelzoo.co/model/pytorch-value-iteration-networks-pytorch" + }, + { + num: NumberInt("2438"), + value: "https://modelzoo.co/model/yellowfin_pytorch" + }, + { + num: NumberInt("2439"), + value: "https://modelzoo.co/model/pyscatwave" + }, + { + num: NumberInt("2440"), + value: "https://modelzoo.co/model/graph_convnets_pytorch" + }, + { + num: NumberInt("2441"), + value: "https://modelzoo.co/model/continuous-deep-q-learning-with-model-based-acceleration" + }, + { + num: NumberInt("2442"), + value: "https://modelzoo.co/model/quick-nlp" + }, + { + num: NumberInt("2443"), + value: "https://modelzoo.co/model/deepfm-with-pytorch" + }, + { + num: NumberInt("2444"), + value: "https://modelzoo.co/model/clarinet" + }, + { + num: NumberInt("2445"), + value: "https://modelzoo.co/model/pytorch-sac" + }, + { + num: NumberInt("2446"), + value: "https://modelzoo.co/model/hmm-in-tensorflow" + }, + { + num: NumberInt("2447"), + value: "https://modelzoo.co/model/wideresnets" + }, + { + num: NumberInt("2448"), + value: "https://modelzoo.co/model/pytorch-sgns" + }, + { + num: NumberInt("2449"), + value: "https://modelzoo.co/model/pytorch-hessian-eigenthings" + }, + { + num: NumberInt("2450"), + value: "https://modelzoo.co/model/pytorch-nce" + }, + { + num: NumberInt("2451"), + value: "https://modelzoo.co/model/pyinn" + }, + { + num: NumberInt("2452"), + value: "https://modelzoo.co/model/vel" + }, + { + num: NumberInt("2453"), + value: "https://modelzoo.co/model/volksdep" + }, + { + num: NumberInt("2454"), + value: "https://modelzoo.co/model/pytorch-dnc" + }, + { + num: NumberInt("2455"), + value: "https://modelzoo.co/model/tucker" + }, + { + num: NumberInt("2456"), + value: "https://modelzoo.co/model/neural-art-mini" + }, + { + num: NumberInt("2457"), + value: "https://modelzoo.co/model/simple-effective-text-matching-pytorch" + }, + { + num: NumberInt("2458"), + value: "https://modelzoo.co/model/deeplog" + }, + { + num: NumberInt("2459"), + value: "https://modelzoo.co/model/sparktorch" + }, + { + num: NumberInt("2460"), + value: "https://modelzoo.co/model/gam" + }, + { + num: NumberInt("2461"), + value: "https://modelzoo.co/model/pyramidnet-pytorch" + }, + { + num: NumberInt("2462"), + value: "https://modelzoo.co/model/r-bert" + }, + { + num: NumberInt("2463"), + value: "https://modelzoo.co/model/pytorch-siamese" + }, + { + num: NumberInt("2464"), + value: "https://modelzoo.co/model/optical-flow-estimation-using-a-spatial" + }, + { + num: NumberInt("2465"), + value: "https://modelzoo.co/model/flambe" + }, + { + num: NumberInt("2466"), + value: "https://modelzoo.co/model/lora" + }, + { + num: NumberInt("2467"), + value: "https://modelzoo.co/model/neural-programmer-interpreter" + }, + { + num: NumberInt("2468"), + value: "https://modelzoo.co/model/mtcnn_face_detection_alignment" + }, + { + num: NumberInt("2469"), + value: "https://modelzoo.co/model/inferno" + }, + { + num: NumberInt("2470"), + value: "https://modelzoo.co/model/summarunner" + }, + { + num: NumberInt("2471"), + value: "https://modelzoo.co/model/learningtocompare-pytorch" + }, + { + num: NumberInt("2472"), + value: "https://modelzoo.co/model/pytorch-reinforce" + }, + { + num: NumberInt("2473"), + value: "https://modelzoo.co/model/pytorchwavelets" + }, + { + num: NumberInt("2474"), + value: "https://modelzoo.co/model/character-cnn" + }, + { + num: NumberInt("2475"), + value: "https://modelzoo.co/model/yoloyolov2" + }, + { + num: NumberInt("2476"), + value: "https://modelzoo.co/model/relational-rnn-pytorch" + }, + { + num: NumberInt("2477"), + value: "https://modelzoo.co/model/sgcn" + }, + { + num: NumberInt("2478"), + value: "https://modelzoo.co/model/sfd_pytorch" + }, + { + num: NumberInt("2479"), + value: "https://modelzoo.co/model/mask-r-cnn" + }, + { + num: NumberInt("2480"), + value: "https://modelzoo.co/model/fewshotlearning" + }, + { + num: NumberInt("2481"), + value: "https://modelzoo.co/model/deeprl-grounding" + }, + { + num: NumberInt("2482"), + value: "https://modelzoo.co/model/ncf" + }, + { + num: NumberInt("2483"), + value: "https://modelzoo.co/model/fusenet" + }, + { + num: NumberInt("2484"), + value: "https://modelzoo.co/model/tinytpu" + }, + { + num: NumberInt("2485"), + value: "https://modelzoo.co/model/vrnn" + }, + { + num: NumberInt("2486"), + value: "https://modelzoo.co/model/dni-pytorch" + }, + { + num: NumberInt("2487"), + value: "https://modelzoo.co/model/cs224n-2019" + }, + { + num: NumberInt("2488"), + value: "https://modelzoo.co/model/pytorch-transformer" + }, + { + num: NumberInt("2489"), + value: "https://modelzoo.co/model/universal-transformer-pytorch" + }, + { + num: NumberInt("2490"), + value: "https://modelzoo.co/model/pytorch_compact_bilinear_pooling-v1" + }, + { + num: NumberInt("2491"), + value: "https://modelzoo.co/model/skip-thought-vectors" + }, + { + num: NumberInt("2492"), + value: "https://modelzoo.co/model/pytorch-tools" + }, + { + num: NumberInt("2493"), + value: "https://modelzoo.co/model/delira" + }, + { + num: NumberInt("2494"), + value: "https://modelzoo.co/model/mine-mutual-information-neural-estimation" + }, + { + num: NumberInt("2495"), + value: "https://modelzoo.co/model/embedded-spring-boot-keycloak-server" + }, + { + num: NumberInt("2496"), + value: "https://modelzoo.co/model/visual-search-gluon" + }, + { + num: NumberInt("2497"), + value: "https://modelzoo.co/model/pytorch-tensor-decompositions" + }, + { + num: NumberInt("2498"), + value: "https://modelzoo.co/model/orn" + }, + { + num: NumberInt("2499"), + value: "https://modelzoo.co/model/fcn" + }, + { + num: NumberInt("2500"), + value: "https://modelzoo.co/model/dqn" + }, + { + num: NumberInt("2501"), + value: "https://modelzoo.co/model/vin_pytorch_visdom" + }, + { + num: NumberInt("2502"), + value: "https://modelzoo.co/model/pytorch-realtime-multi-person-pose-estimation-2" + }, + { + num: NumberInt("2503"), + value: "https://modelzoo.co/model/pydlt" + }, + { + num: NumberInt("2504"), + value: "https://modelzoo.co/model/conditional-similarity-networks" + }, + { + num: NumberInt("2505"), + value: "https://modelzoo.co/model/per" + }, + { + num: NumberInt("2506"), + value: "https://modelzoo.co/model/dqn-keras" + }, + { + num: NumberInt("2507"), + value: "https://modelzoo.co/model/hcn-pytorch" + }, + { + num: NumberInt("2508"), + value: "https://modelzoo.co/model/chainermn" + }, + { + num: NumberInt("2509"), + value: "https://modelzoo.co/model/freezeout" + }, + { + num: NumberInt("2510"), + value: "https://modelzoo.co/model/dqn-chainer" + }, + { + num: NumberInt("2511"), + value: "https://modelzoo.co/model/packnet" + }, + { + num: NumberInt("2512"), + value: "https://modelzoo.co/model/accsgd" + }, + { + num: NumberInt("2513"), + value: "https://modelzoo.co/model/splitter" + }, + { + num: NumberInt("2514"), + value: "https://modelzoo.co/model/cosface-pytorch" + }, + { + num: NumberInt("2515"), + value: "https://modelzoo.co/model/pytorch-adacos" + }, + { + num: NumberInt("2516"), + value: "https://modelzoo.co/model/pt-dilate-rnn" + }, + { + num: NumberInt("2517"), + value: "https://modelzoo.co/model/torch-two-sample" + }, + { + num: NumberInt("2518"), + value: "https://modelzoo.co/model/grnet" + }, + { + num: NumberInt("2519"), + value: "https://modelzoo.co/model/vgg-cam" + }, + { + num: NumberInt("2520"), + value: "https://modelzoo.co/model/seal-ci" + }, + { + num: NumberInt("2521"), + value: "https://modelzoo.co/model/dcc" + }, + { + num: NumberInt("2522"), + value: "https://modelzoo.co/model/pytorch-zssr" + }, + { + num: NumberInt("2523"), + value: "https://modelzoo.co/model/beauty-net" + }, + { + num: NumberInt("2524"), + value: "https://modelzoo.co/model/drrn-pytorch" + }, + { + num: NumberInt("2525"), + value: "https://modelzoo.co/model/attention-based-recurrent-neural-network-models-for" + }, + { + num: NumberInt("2526"), + value: "https://modelzoo.co/model/mctorch" + }, + { + num: NumberInt("2527"), + value: "https://modelzoo.co/model/jax-rs-performance-comparison" + }, + { + num: NumberInt("2528"), + value: "https://modelzoo.co/model/odin-pytorch" + }, + { + num: NumberInt("2529"), + value: "https://modelzoo.co/model/deepcoral" + }, + { + num: NumberInt("2530"), + value: "https://modelzoo.co/model/pywarm" + }, + { + num: NumberInt("2531"), + value: "https://modelzoo.co/model/crnn-mxnet-chinese-text-recognition" + }, + { + num: NumberInt("2532"), + value: "https://modelzoo.co/model/nalu-pytorch" + }, + { + num: NumberInt("2533"), + value: "https://modelzoo.co/model/dgc-net" + }, + { + num: NumberInt("2534"), + value: "https://modelzoo.co/model/tutel" + }, + { + num: NumberInt("2535"), + value: "https://modelzoo.co/model/dockerface" + }, + { + num: NumberInt("2536"), + value: "https://modelzoo.co/model/pytorch-text-recognition" + }, + { + num: NumberInt("2537"), + value: "https://modelzoo.co/model/mplpytorch" + }, + { + num: NumberInt("2538"), + value: "https://modelzoo.co/model/hessian" + }, + { + num: NumberInt("2539"), + value: "https://modelzoo.co/model/video-super-resolution-pytorch" + }, + { + num: NumberInt("2540"), + value: "https://modelzoo.co/model/c3d" + }, + { + num: NumberInt("2541"), + value: "https://modelzoo.co/model/noisy-networks-for-exploration" + }, + { + num: NumberInt("2542"), + value: "https://modelzoo.co/model/pytorchchamferdistance" + }, + { + num: NumberInt("2543"), + value: "https://modelzoo.co/model/convnet-aig" + }, + { + num: NumberInt("2544"), + value: "https://modelzoo.co/model/smiles-transformer" + }, + { + num: NumberInt("2545"), + value: "https://modelzoo.co/model/openfacepytorch" + }, + { + num: NumberInt("2546"), + value: "https://modelzoo.co/model/pysnn" + }, + { + num: NumberInt("2547"), + value: "https://modelzoo.co/model/pytorch-weights-pruning" + }, + { + num: NumberInt("2548"), + value: "https://modelzoo.co/model/fenchel-young-losses" + }, + { + num: NumberInt("2549"), + value: "https://modelzoo.co/model/chainerui" + }, + { + num: NumberInt("2550"), + value: "https://modelzoo.co/model/pytorch-retraining" + }, + { + num: NumberInt("2551"), + value: "https://modelzoo.co/model/vqa-winner-cvprw-2017" + }, + { + num: NumberInt("2552"), + value: "https://modelzoo.co/model/convolution-vision-transformers" + }, + { + num: NumberInt("2553"), + value: "https://modelzoo.co/model/a-hierarchical-latent-structure-for-variational" + }, + { + num: NumberInt("2554"), + value: "https://modelzoo.co/model/chainer-char-rnn" + }, + { + num: NumberInt("2555"), + value: "https://modelzoo.co/model/skip-gram-pytorch" + }, + { + num: NumberInt("2556"), + value: "https://modelzoo.co/model/distance-encoding" + }, + { + num: NumberInt("2557"), + value: "https://modelzoo.co/model/pytorch-sketch-rnn" + }, + { + num: NumberInt("2558"), + value: "https://modelzoo.co/model/fmpytorch" + }, + { + num: NumberInt("2559"), + value: "https://modelzoo.co/model/visual-interaction-networks-pytorch" + }, + { + num: NumberInt("2560"), + value: "https://modelzoo.co/model/transducer" + }, + { + num: NumberInt("2561"), + value: "https://modelzoo.co/model/qucumber" + }, + { + num: NumberInt("2562"), + value: "https://modelzoo.co/model/deeplabv3-plus-tensorflow20" + }, + { + num: NumberInt("2563"), + value: "https://modelzoo.co/model/e2e-model-learning" + }, + { + num: NumberInt("2564"), + value: "https://modelzoo.co/model/bert-bilstm-crf-pytorch" + }, + { + num: NumberInt("2565"), + value: "https://modelzoo.co/model/compactbilinearpooling-pytorch-v2" + }, + { + num: NumberInt("2566"), + value: "https://modelzoo.co/model/piggyback" + }, + { + num: NumberInt("2567"), + value: "https://modelzoo.co/model/lookahead-pytorch" + }, + { + num: NumberInt("2568"), + value: "https://modelzoo.co/model/untrimmednets" + }, + { + num: NumberInt("2569"), + value: "https://modelzoo.co/model/pytorch-pose-estimation" + }, + { + num: NumberInt("2570"), + value: "https://modelzoo.co/model/real-time-style-transfer" + }, + { + num: NumberInt("2571"), + value: "https://modelzoo.co/model/rainbow-pytorch" + }, + { + num: NumberInt("2572"), + value: "https://modelzoo.co/model/senet" + }, + { + num: NumberInt("2573"), + value: "https://modelzoo.co/model/fractalnet-keras" + }, + { + num: NumberInt("2574"), + value: "https://modelzoo.co/model/gccpm-look-into-person-cvpr19pytorch" + }, + { + num: NumberInt("2575"), + value: "https://modelzoo.co/model/fcn-pytorch-easiest" + }, + { + num: NumberInt("2576"), + value: "https://modelzoo.co/model/caffe_to_torch_to_pytorch" + }, + { + num: NumberInt("2577"), + value: "https://modelzoo.co/model/deep-q-networks" + }, + { + num: NumberInt("2578"), + value: "https://modelzoo.co/model/cnn-sentence-classification-pytorch" + }, + { + num: NumberInt("2579"), + value: "https://modelzoo.co/model/functional-transformer" + }, + { + num: NumberInt("2580"), + value: "https://modelzoo.co/model/attentive-object-tracking" + }, + { + num: NumberInt("2581"), + value: "https://modelzoo.co/model/attentive-recurrent-comparators" + }, + { + num: NumberInt("2582"), + value: "https://modelzoo.co/model/hypernetworks" + }, + { + num: NumberInt("2583"), + value: "https://modelzoo.co/model/mobilenet" + }, + { + num: NumberInt("2584"), + value: "https://modelzoo.co/model/ewcpytorch" + }, + { + num: NumberInt("2585"), + value: "https://modelzoo.co/model/deep-forecast-pytorch" + }, + { + num: NumberInt("2586"), + value: "https://modelzoo.co/model/bi-lstm-crf" + }, + { + num: NumberInt("2587"), + value: "https://modelzoo.co/model/pytorch-auto-augment" + }, + { + num: NumberInt("2588"), + value: "https://modelzoo.co/model/bigbatch" + }, + { + num: NumberInt("2589"), + value: "https://modelzoo.co/model/wide-residual-networks" + }, + { + num: NumberInt("2590"), + value: "https://modelzoo.co/model/stacknn" + }, + { + num: NumberInt("2591"), + value: "https://modelzoo.co/model/pytorch-sift" + }, + { + num: NumberInt("2592"), + value: "https://modelzoo.co/model/bayes-by-backprop" + }, + { + num: NumberInt("2593"), + value: "https://modelzoo.co/model/word2vec-pytorch-2" + }, + { + num: NumberInt("2594"), + value: "https://modelzoo.co/model/deeppose-tensorflow" + }, + { + num: NumberInt("2595"), + value: "https://modelzoo.co/model/pytorch-prunes" + }, + { + num: NumberInt("2596"), + value: "https://modelzoo.co/model/deep-networks-with-stochastic-depth" + }, + { + num: NumberInt("2597"), + value: "https://modelzoo.co/model/pytorch-convlstm" + }, + { + num: NumberInt("2598"), + value: "https://modelzoo.co/model/neural-style-transfer" + }, + { + num: NumberInt("2599"), + value: "https://modelzoo.co/model/pytorch-smoothgrad" + }, + { + num: NumberInt("2600"), + value: "https://modelzoo.co/model/aognet" + }, + { + num: NumberInt("2601"), + value: "https://modelzoo.co/model/smile-detection-with-a-cnn" + }, + { + num: NumberInt("2602"), + value: "https://modelzoo.co/model/facedetection-convnet-3d" + }, + { + num: NumberInt("2603"), + value: "https://modelzoo.co/model/cifar10" + }, + { + num: NumberInt("2604"), + value: "https://modelzoo.co/model/deep-auto-punctuation" + }, + { + num: NumberInt("2605"), + value: "https://modelzoo.co/model/knowledge-aware-reader" + }, + { + num: NumberInt("2606"), + value: "https://modelzoo.co/model/resnet-pytorch" + }, + { + num: NumberInt("2607"), + value: "https://modelzoo.co/model/fcnt" + }, + { + num: NumberInt("2608"), + value: "https://modelzoo.co/model/torch-gqn" + }, + { + num: NumberInt("2609"), + value: "https://modelzoo.co/model/cnn-lstm-ctcgluon" + }, + { + num: NumberInt("2610"), + value: "https://modelzoo.co/model/pix2pix" + }, + { + num: NumberInt("2611"), + value: "https://modelzoo.co/model/neural-decision-forests" + }, + { + num: NumberInt("2612"), + value: "https://modelzoo.co/model/googlenet-v2" + }, + { + num: NumberInt("2613"), + value: "https://modelzoo.co/model/deepbox" + }, + { + num: NumberInt("2614"), + value: "https://modelzoo.co/model/integrated-gradient-pytorch" + }, + { + num: NumberInt("2615"), + value: "https://modelzoo.co/model/logger" + }, + { + num: NumberInt("2616"), + value: "https://modelzoo.co/model/dynamic-memory-networks-plus-pytorch" + }, + { + num: NumberInt("2617"), + value: "https://modelzoo.co/model/realtime-multi-person-pose-estimation" + }, + { + num: NumberInt("2618"), + value: "https://modelzoo.co/model/msg-netgluon" + }, + { + num: NumberInt("2619"), + value: "https://modelzoo.co/model/rnn-transducer" + }, + { + num: NumberInt("2620"), + value: "https://modelzoo.co/model/doomnet" + }, + { + num: NumberInt("2621"), + value: "https://modelzoo.co/model/binary-wide-resnet" + }, + { + num: NumberInt("2622"), + value: "https://modelzoo.co/model/densenet-mxnet" + }, + { + num: NumberInt("2623"), + value: "https://modelzoo.co/model/pytorch_neg_loss" + }, + { + num: NumberInt("2624"), + value: "https://modelzoo.co/model/lstmspth" + }, + { + num: NumberInt("2625"), + value: "https://modelzoo.co/model/3d-action-recognition" + }, + { + num: NumberInt("2626"), + value: "https://modelzoo.co/model/radio-transformer-networks" + }, + { + num: NumberInt("2627"), + value: "https://modelzoo.co/model/mixup_pytorch" + }, + { + num: NumberInt("2628"), + value: "https://modelzoo.co/model/keras-realtime-multi-person-pose-estimation-keras" + }, + { + num: NumberInt("2629"), + value: "https://modelzoo.co/model/noisynaturalgradient" + }, + { + num: NumberInt("2630"), + value: "https://modelzoo.co/model/pytorch-convolutional-rnn" + }, + { + num: NumberInt("2631"), + value: "https://modelzoo.co/model/draw-like-bob-ross" + }, + { + num: NumberInt("2632"), + value: "https://modelzoo.co/model/pytorch-extension" + }, + { + num: NumberInt("2633"), + value: "https://modelzoo.co/model/dssdtdm" + }, + { + num: NumberInt("2634"), + value: "https://modelzoo.co/model/depthnet" + }, + { + num: NumberInt("2635"), + value: "https://modelzoo.co/model/minimal_glo" + }, + { + num: NumberInt("2636"), + value: "https://modelzoo.co/model/dni" + }, + { + num: NumberInt("2637"), + value: "https://modelzoo.co/model/nmn-pytorch" + }, + { + num: NumberInt("2638"), + value: "https://modelzoo.co/model/srdensenet-pytorch" + }, + { + num: NumberInt("2639"), + value: "https://modelzoo.co/model/nalu" + }, + { + num: NumberInt("2640"), + value: "https://modelzoo.co/model/memory-efficient-attention" + }, + { + num: NumberInt("2641"), + value: "https://modelzoo.co/model/a3c-pytorch" + }, + { + num: NumberInt("2642"), + value: "https://modelzoo.co/model/macarico" + }, + { + num: NumberInt("2643"), + value: "https://modelzoo.co/model/interaction_network_pytorch" + }, + { + num: NumberInt("2644"), + value: "https://modelzoo.co/model/pytorch_gbw_lm" + }, + { + num: NumberInt("2645"), + value: "https://modelzoo.co/model/neural-dream" + }, + { + num: NumberInt("2646"), + value: "https://modelzoo.co/model/meprop" + }, + { + num: NumberInt("2647"), + value: "https://modelzoo.co/model/probabilistic-programming-and-statistical-inference-in" + }, + { + num: NumberInt("2648"), + value: "https://modelzoo.co/model/perceiver-io" + }, + { + num: NumberInt("2649"), + value: "https://modelzoo.co/model/eigendamage-pytorch" + }, + { + num: NumberInt("2650"), + value: "https://modelzoo.co/model/pytorch-multi-class-focal-loss" + }, + { + num: NumberInt("2651"), + value: "https://modelzoo.co/model/head-pose" + }, + { + num: NumberInt("2652"), + value: "https://modelzoo.co/model/bimpm-pytorch" + }, + { + num: NumberInt("2653"), + value: "https://modelzoo.co/model/lang-emerge-parlai" + }, + { + num: NumberInt("2654"), + value: "https://modelzoo.co/model/torchelie" + }, + { + num: NumberInt("2655"), + value: "https://modelzoo.co/model/treelstmsentiment" + }, + { + num: NumberInt("2656"), + value: "https://modelzoo.co/model/bilstm-crf-ner-pytorch" + }, + { + num: NumberInt("2657"), + value: "https://modelzoo.co/model/coordconv" + }, + { + num: NumberInt("2658"), + value: "https://modelzoo.co/model/wide-residual-networks-keras" + }, + { + num: NumberInt("2659"), + value: "https://modelzoo.co/model/captcharecognition" + }, + { + num: NumberInt("2660"), + value: "https://modelzoo.co/model/match-lstm" + }, + { + num: NumberInt("2661"), + value: "https://modelzoo.co/model/tdd" + }, + { + num: NumberInt("2662"), + value: "https://modelzoo.co/model/mixup-mxnet" + }, + { + num: NumberInt("2663"), + value: "https://modelzoo.co/model/binary_net" + }, + { + num: NumberInt("2664"), + value: "https://modelzoo.co/model/deep-dream-in-pytorch" + }, + { + num: NumberInt("2665"), + value: "https://modelzoo.co/model/torch-metrics" + }, + { + num: NumberInt("2666"), + value: "https://modelzoo.co/model/toward-controlled-generation-of-text-pytorch" + }, + { + num: NumberInt("2667"), + value: "https://modelzoo.co/model/mia" + }, + { + num: NumberInt("2668"), + value: "https://modelzoo.co/model/fednova" + }, + { + num: NumberInt("2669"), + value: "https://modelzoo.co/model/sampytorch" + }, + { + num: NumberInt("2670"), + value: "https://modelzoo.co/model/ladder-network" + }, + { + num: NumberInt("2671"), + value: "https://modelzoo.co/model/tiny-face-original-detector" + }, + { + num: NumberInt("2672"), + value: "https://modelzoo.co/model/faux-jax" + }, + { + num: NumberInt("2673"), + value: "https://modelzoo.co/model/highway-networks-caffe" + }, + { + num: NumberInt("2674"), + value: "https://modelzoo.co/model/rl-multishot-reid" + }, + { + num: NumberInt("2675"), + value: "https://modelzoo.co/model/wavenet" + }, + { + num: NumberInt("2676"), + value: "https://modelzoo.co/model/whale-detector" + }, + { + num: NumberInt("2677"), + value: "https://modelzoo.co/model/pytorch-mcn" + }, + { + num: NumberInt("2678"), + value: "https://modelzoo.co/model/ssd-text-detection" + }, + { + num: NumberInt("2679"), + value: "https://modelzoo.co/model/qanet-pytorch-2" + }, + { + num: NumberInt("2680"), + value: "https://modelzoo.co/model/pytorch-neucom" + }, + { + num: NumberInt("2681"), + value: "https://modelzoo.co/model/goemotions-pytorch" + }, + { + num: NumberInt("2682"), + value: "https://modelzoo.co/model/kmeans-pytorch" + }, + { + num: NumberInt("2683"), + value: "https://modelzoo.co/model/sdtw-pytorch" + }, + { + num: NumberInt("2684"), + value: "https://modelzoo.co/model/groundbreaking-papers" + }, + { + num: NumberInt("2685"), + value: "https://modelzoo.co/model/jax-rs-moshi" + }, + { + num: NumberInt("2686"), + value: "https://modelzoo.co/model/bpr-pytorch" + }, + { + num: NumberInt("2687"), + value: "https://modelzoo.co/model/extremely-fine-grained-entity-typing" + }, + { + num: NumberInt("2688"), + value: "https://modelzoo.co/model/pt-sdae" + }, + { + num: NumberInt("2689"), + value: "https://modelzoo.co/model/muzero" + }, + { + num: NumberInt("2690"), + value: "https://modelzoo.co/model/pytorch-tree-lstm" + }, + { + num: NumberInt("2691"), + value: "https://modelzoo.co/model/torch-sampling" + }, + { + num: NumberInt("2692"), + value: "https://modelzoo.co/model/real-time-text-detection-dbnet" + }, + { + num: NumberInt("2693"), + value: "https://modelzoo.co/model/fftnet" + }, + { + num: NumberInt("2694"), + value: "https://modelzoo.co/model/triplet-reid-pytorch" + }, + { + num: NumberInt("2695"), + value: "https://modelzoo.co/model/pytorch-fitmodule" + }, + { + num: NumberInt("2696"), + value: "https://modelzoo.co/model/maskrcnn-benchmarkcpp" + }, + { + num: NumberInt("2697"), + value: "https://modelzoo.co/model/neural-style-mmd" + }, + { + num: NumberInt("2698"), + value: "https://modelzoo.co/model/sqeezenet" + }, + { + num: NumberInt("2699"), + value: "https://modelzoo.co/model/lola_dice" + }, + { + num: NumberInt("2700"), + value: "https://modelzoo.co/model/pytorch-radial-basis-function-layer" + }, + { + num: NumberInt("2701"), + value: "https://modelzoo.co/model/admm" + }, + { + num: NumberInt("2702"), + value: "https://modelzoo.co/model/pytorch_tdnn" + }, + { + num: NumberInt("2703"), + value: "https://modelzoo.co/model/molencoder" + }, + { + num: NumberInt("2704"), + value: "https://modelzoo.co/model/nasnet-a-mobile-ported-weights" + }, + { + num: NumberInt("2705"), + value: "https://modelzoo.co/model/deep-belief-network-pytorch" + }, + { + num: NumberInt("2706"), + value: "https://modelzoo.co/model/pytorch-value-iteration-networks" + }, + { + num: NumberInt("2707"), + value: "https://modelzoo.co/model/quantile-regression-dqn-pytorch" + }, + { + num: NumberInt("2708"), + value: "https://modelzoo.co/model/dropblock-pytorch" + }, + { + num: NumberInt("2709"), + value: "https://modelzoo.co/model/yolo-v1-pytorch" + }, + { + num: NumberInt("2710"), + value: "https://modelzoo.co/model/epsr" + }, + { + num: NumberInt("2711"), + value: "https://modelzoo.co/model/mxnet-model" + }, + { + num: NumberInt("2712"), + value: "https://modelzoo.co/model/e2far" + }, + { + num: NumberInt("2713"), + value: "https://modelzoo.co/model/pspnet" + }, + { + num: NumberInt("2714"), + value: "https://modelzoo.co/model/imsat" + }, + { + num: NumberInt("2715"), + value: "https://modelzoo.co/model/cogitare" + }, + { + num: NumberInt("2716"), + value: "https://modelzoo.co/model/pathnet-pytorch" + }, + { + num: NumberInt("2717"), + value: "https://modelzoo.co/model/pytorch_highway" + }, + { + num: NumberInt("2718"), + value: "https://modelzoo.co/model/pytorch-model-parallel" + }, + { + num: NumberInt("2719"), + value: "https://modelzoo.co/model/federated-averaging-pytorch" + }, + { + num: NumberInt("2720"), + value: "https://modelzoo.co/model/scalingscattering" + }, + { + num: NumberInt("2721"), + value: "https://modelzoo.co/model/pytorch-ard" + }, + { + num: NumberInt("2722"), + value: "https://modelzoo.co/model/ctpnmxnet" + }, + { + num: NumberInt("2723"), + value: "https://modelzoo.co/model/character-level-convolutional-neural-nets-for-text" + }, + { + num: NumberInt("2724"), + value: "https://modelzoo.co/model/torchcraft-py" + }, + { + num: NumberInt("2725"), + value: "https://modelzoo.co/model/jax-rs-kotlinx-serialization" + }, + { + num: NumberInt("2726"), + value: "https://modelzoo.co/model/entropy-sgd" + }, + { + num: NumberInt("2727"), + value: "https://modelzoo.co/model/nninit" + }, + { + num: NumberInt("2728"), + value: "https://modelzoo.co/model/pedestrian-attribute-recognition-with-gcn" + }, + { + num: NumberInt("2729"), + value: "https://modelzoo.co/model/kaggle_cifar10" + }, + { + num: NumberInt("2730"), + value: "https://modelzoo.co/model/sine" + }, + { + num: NumberInt("2731"), + value: "https://modelzoo.co/model/candlegp" + }, + { + num: NumberInt("2732"), + value: "https://modelzoo.co/model/neural-attentive-session-based-recommendation-pytorch" + }, + { + num: NumberInt("2733"), + value: "https://modelzoo.co/model/recurrent-neural-networks-for-sentiment-analysis" + }, + { + num: NumberInt("2734"), + value: "https://modelzoo.co/model/roialign-roipool-pytorch" + }, + { + num: NumberInt("2735"), + value: "https://modelzoo.co/model/graph-cnn" + }, + { + num: NumberInt("2736"), + value: "https://modelzoo.co/model/drqn" + }, + { + num: NumberInt("2737"), + value: "https://modelzoo.co/model/shampoopytorch" + }, + { + num: NumberInt("2738"), + value: "https://modelzoo.co/model/cspn-monodepth" + }, + { + num: NumberInt("2739"), + value: "https://modelzoo.co/model/mocha-pytorch" + }, + { + num: NumberInt("2740"), + value: "https://modelzoo.co/model/factorized-bilinear-network" + }, + { + num: NumberInt("2741"), + value: "https://modelzoo.co/model/chainer-ssd" + }, + { + num: NumberInt("2742"), + value: "https://modelzoo.co/model/dagger" + }, + { + num: NumberInt("2743"), + value: "https://modelzoo.co/model/forward-thinking-pytorch" + }, + { + num: NumberInt("2744"), + value: "https://modelzoo.co/model/cnn-based-text-classification" + }, + { + num: NumberInt("2745"), + value: "https://modelzoo.co/model/bttr" + }, + { + num: NumberInt("2746"), + value: "https://modelzoo.co/model/deep-packet" + }, + { + num: NumberInt("2747"), + value: "https://modelzoo.co/model/ge2e-loss" + }, + { + num: NumberInt("2748"), + value: "https://modelzoo.co/model/faster-rcnngluon" + }, + { + num: NumberInt("2749"), + value: "https://modelzoo.co/model/lstnet" + }, + { + num: NumberInt("2750"), + value: "https://modelzoo.co/model/aorun" + }, + { + num: NumberInt("2751"), + value: "https://modelzoo.co/model/ko_en_nmtgluon" + }, + { + num: NumberInt("2752"), + value: "https://modelzoo.co/model/chainer-visualization" + }, + { + num: NumberInt("2753"), + value: "https://modelzoo.co/model/tor10" + }, + { + num: NumberInt("2754"), + value: "https://modelzoo.co/model/srvp" + }, + { + num: NumberInt("2755"), + value: "https://modelzoo.co/model/the-clean-transformer" + }, + { + num: NumberInt("2756"), + value: "https://modelzoo.co/model/pytorch-deep-sets" + }, + { + num: NumberInt("2757"), + value: "https://modelzoo.co/model/attentive-neural-process" + }, + { + num: NumberInt("2758"), + value: "https://modelzoo.co/model/char-rnngluon" + }, + { + num: NumberInt("2759"), + value: "https://modelzoo.co/model/pytorch_highway_networks" + }, + { + num: NumberInt("2760"), + value: "https://modelzoo.co/model/pnnpytorch" + }, + { + num: NumberInt("2761"), + value: "https://modelzoo.co/model/efficientdetpytorch" + }, + { + num: NumberInt("2762"), + value: "https://modelzoo.co/model/highway-network" + }, + { + num: NumberInt("2763"), + value: "https://modelzoo.co/model/binary-stochastic-neurons" + }, + { + num: NumberInt("2764"), + value: "https://modelzoo.co/model/malconv-pytorch" + }, + { + num: NumberInt("2765"), + value: "https://modelzoo.co/model/gluon-dynamic-batchinggluon" + }, + { + num: NumberInt("2766"), + value: "https://modelzoo.co/model/chainer-resnet" + }, + { + num: NumberInt("2767"), + value: "https://modelzoo.co/model/chainer-gogh" + }, + { + num: NumberInt("2768"), + value: "https://modelzoo.co/model/diffdist" + }, + { + num: NumberInt("2769"), + value: "https://modelzoo.co/model/dfw" + }, + { + num: NumberInt("2770"), + value: "https://modelzoo.co/model/co-attention" + }, + { + num: NumberInt("2771"), + value: "https://modelzoo.co/model/cat-net" + }, + { + num: NumberInt("2772"), + value: "https://modelzoo.co/model/dpwa" + }, + { + num: NumberInt("2773"), + value: "https://modelzoo.co/model/generative_zoo" + }, + { + num: NumberInt("2774"), + value: "https://modelzoo.co/model/psmm" + }, + { + num: NumberInt("2775"), + value: "https://modelzoo.co/model/osqpth" + }, + { + num: NumberInt("2776"), + value: "https://modelzoo.co/model/sentence-similarity-classifier-for-pytorch" + }, + { + num: NumberInt("2777"), + value: "https://modelzoo.co/model/r-bert-pytorch" + }, + { + num: NumberInt("2778"), + value: "https://modelzoo.co/model/darkrank" + }, + { + num: NumberInt("2779"), + value: "https://modelzoo.co/model/yelp-restaurant-photo-classifacation" + }, + { + num: NumberInt("2780"), + value: "https://modelzoo.co/model/mlp-gpt-jax" + }, + { + num: NumberInt("2781"), + value: "https://modelzoo.co/model/mxnet-for-ctr" + }, + { + num: NumberInt("2782"), + value: "https://modelzoo.co/model/fast-rcnn" + }, + { + num: NumberInt("2783"), + value: "https://modelzoo.co/model/capsnet-3" + }, + { + num: NumberInt("2784"), + value: "https://modelzoo.co/model/fluidnet_cxx" + }, + { + num: NumberInt("2785"), + value: "https://modelzoo.co/model/pytorch-extras" + }, + { + num: NumberInt("2786"), + value: "https://modelzoo.co/model/lsuv-pytorch" + }, + { + num: NumberInt("2787"), + value: "https://modelzoo.co/model/crnn" + }, + { + num: NumberInt("2788"), + value: "https://modelzoo.co/model/cdl" + }, + { + num: NumberInt("2789"), + value: "https://modelzoo.co/model/mobilenetv3-pytorch" + }, + { + num: NumberInt("2790"), + value: "https://modelzoo.co/model/shake-drop-pytorch" + }, + { + num: NumberInt("2791"), + value: "https://modelzoo.co/model/reseg-pytorch" + }, + { + num: NumberInt("2792"), + value: "https://modelzoo.co/model/batchbald-redux" + }, + { + num: NumberInt("2793"), + value: "https://modelzoo.co/model/prunnable-layers-pytorch" + }, + { + num: NumberInt("2794"), + value: "https://modelzoo.co/model/chinese-word2vec-pytorch" + }, + { + num: NumberInt("2795"), + value: "https://modelzoo.co/model/crnn-with-chinese-support" + }, + { + num: NumberInt("2796"), + value: "https://modelzoo.co/model/deep-leafsnap" + }, + { + num: NumberInt("2797"), + value: "https://modelzoo.co/model/cortexnet" + }, + { + num: NumberInt("2798"), + value: "https://modelzoo.co/model/cru-net" + }, + { + num: NumberInt("2799"), + value: "https://modelzoo.co/model/trpo" + }, + { + num: NumberInt("2800"), + value: "https://modelzoo.co/model/diffmask" + }, + { + num: NumberInt("2801"), + value: "https://modelzoo.co/model/shake-shake-pytorch" + }, + { + num: NumberInt("2802"), + value: "https://modelzoo.co/model/mxnet-videoio" + }, + { + num: NumberInt("2803"), + value: "https://modelzoo.co/model/dropwizard-jaxws" + }, + { + num: NumberInt("2804"), + value: "https://modelzoo.co/model/ram" + }, + { + num: NumberInt("2805"), + value: "https://modelzoo.co/model/associative_compression_networks" + }, + { + num: NumberInt("2806"), + value: "https://modelzoo.co/model/self-tuning-networks" + }, + { + num: NumberInt("2807"), + value: "https://modelzoo.co/model/flow" + }, + { + num: NumberInt("2808"), + value: "https://modelzoo.co/model/contractive-autoencoder-in-pytorch" + }, + { + num: NumberInt("2809"), + value: "https://modelzoo.co/model/shufflenet" + }, + { + num: NumberInt("2810"), + value: "https://modelzoo.co/model/segnet" + }, + { + num: NumberInt("2811"), + value: "https://modelzoo.co/model/segnet-chainer" + }, + { + num: NumberInt("2812"), + value: "https://modelzoo.co/model/simple-fast-rnn" + }, + { + num: NumberInt("2813"), + value: "https://modelzoo.co/model/alexnet3d" + }, + { + num: NumberInt("2814"), + value: "https://modelzoo.co/model/e2c-pytorch" + }, + { + num: NumberInt("2815"), + value: "https://modelzoo.co/model/pytorch_hmax" + }, + { + num: NumberInt("2816"), + value: "https://modelzoo.co/model/pytorch-ctc" + }, + { + num: NumberInt("2817"), + value: "https://modelzoo.co/model/strassennets" + }, + { + num: NumberInt("2818"), + value: "https://modelzoo.co/model/character-level-cnn-text-classification-gluon" + }, + { + num: NumberInt("2819"), + value: "https://modelzoo.co/model/pytorch_nce" + }, + { + num: NumberInt("2820"), + value: "https://modelzoo.co/model/pytorch-autoneb" + }, + { + num: NumberInt("2821"), + value: "https://modelzoo.co/model/faciallandmark" + }, + { + num: NumberInt("2822"), + value: "https://modelzoo.co/model/mlpnlp-nmt" + }, + { + num: NumberInt("2823"), + value: "https://modelzoo.co/model/chainer-resdrop" + }, + { + num: NumberInt("2824"), + value: "https://modelzoo.co/model/siamese" + }, + { + num: NumberInt("2825"), + value: "https://modelzoo.co/model/chamfer-distance" + }, + { + num: NumberInt("2826"), + value: "https://modelzoo.co/model/pytorch-charrnn" + }, + { + num: NumberInt("2827"), + value: "https://modelzoo.co/model/triplet-deep-hash-pytorch" + }, + { + num: NumberInt("2828"), + value: "https://modelzoo.co/model/lstm-to-predict-gender-of-a" + }, + { + num: NumberInt("2829"), + value: "https://modelzoo.co/model/chainer-densenet" + }, + { + num: NumberInt("2830"), + value: "https://modelzoo.co/model/spatial-transformer-networks-tensorflow" + }, + { + num: NumberInt("2831"), + value: "https://modelzoo.co/model/proxprop" + }, + { + num: NumberInt("2832"), + value: "https://modelzoo.co/model/hred-py" + }, + { + num: NumberInt("2833"), + value: "https://modelzoo.co/model/tdnn-pytorch" + }, + { + num: NumberInt("2834"), + value: "https://modelzoo.co/model/sidewindowfilter" + }, + { + num: NumberInt("2835"), + value: "https://modelzoo.co/model/java-jaxrs" + }, + { + num: NumberInt("2836"), + value: "https://modelzoo.co/model/ml-optimizers-jax" + }, + { + num: NumberInt("2837"), + value: "https://modelzoo.co/model/deep-alignment-network-pytorch" + }, + { + num: NumberInt("2838"), + value: "https://modelzoo.co/model/netharn" + }, + { + num: NumberInt("2839"), + value: "https://modelzoo.co/model/abcnn-pytorch" + }, + { + num: NumberInt("2840"), + value: "https://modelzoo.co/model/pytorch-nice" + }, + { + num: NumberInt("2841"), + value: "https://modelzoo.co/model/torch-gel" + }, + { + num: NumberInt("2842"), + value: "https://modelzoo.co/model/pytorch-minimal-gaussian-process" + }, + { + num: NumberInt("2843"), + value: "https://modelzoo.co/model/pban-pytorch" + }, + { + num: NumberInt("2844"), + value: "https://modelzoo.co/model/mixuppytorch" + }, + { + num: NumberInt("2845"), + value: "https://modelzoo.co/model/torchlite" + }, + { + num: NumberInt("2846"), + value: "https://modelzoo.co/model/learning-at-home" + }, + { + num: NumberInt("2847"), + value: "https://modelzoo.co/model/u-netgluon" + }, + { + num: NumberInt("2848"), + value: "https://modelzoo.co/model/evepytorch" + }, + { + num: NumberInt("2849"), + value: "https://modelzoo.co/model/zalando-pytorch" + }, + { + num: NumberInt("2850"), + value: "https://modelzoo.co/model/word2vec-pytorch" + }, + { + num: NumberInt("2851"), + value: "https://modelzoo.co/model/yologluon" + }, + { + num: NumberInt("2852"), + value: "https://modelzoo.co/model/pt-styletransfer" + }, + { + num: NumberInt("2853"), + value: "https://modelzoo.co/model/pytorch-hessianfree" + }, + { + num: NumberInt("2854"), + value: "https://modelzoo.co/model/capsnet" + }, + { + num: NumberInt("2855"), + value: "https://modelzoo.co/model/chainer_stylenet" + }, + { + num: NumberInt("2856"), + value: "https://modelzoo.co/model/orthnet" + }, + { + num: NumberInt("2857"), + value: "https://modelzoo.co/model/mmi-anti-pytorch" + }, + { + num: NumberInt("2858"), + value: "https://modelzoo.co/model/variational-autoencoder-pytorch" + }, + { + num: NumberInt("2859"), + value: "https://modelzoo.co/model/spleeter-pytorch" + }, + { + num: NumberInt("2860"), + value: "https://modelzoo.co/model/jax-muzero" + }, + { + num: NumberInt("2861"), + value: "https://modelzoo.co/model/poisson-convolution-sum" + }, + { + num: NumberInt("2862"), + value: "https://modelzoo.co/model/pytorch-docset" + }, + { + num: NumberInt("2863"), + value: "https://modelzoo.co/model/pytorch-cns" + }, + { + num: NumberInt("2864"), + value: "https://modelzoo.co/model/neural-assembly-compiler" + }, + { + num: NumberInt("2865"), + value: "https://modelzoo.co/model/pinn" + }, + { + num: NumberInt("2866"), + value: "https://modelzoo.co/model/svm" + }, + { + num: NumberInt("2867"), + value: "https://modelzoo.co/model/jaxrs-osgi-extender" + }, + { + num: NumberInt("2868"), + value: "https://modelzoo.co/model/aries-jax-rs-whiteboard" + }, + { + num: NumberInt("2869"), + value: "https://modelzoo.co/model/yolov3-gradcam" + }, + { + num: NumberInt("2870"), + value: "https://modelzoo.co/model/convolutional-neural-fabrics" + }, + { + num: NumberInt("2871"), + value: "https://modelzoo.co/model/c3d-lstm-pytorch" + }, + { + num: NumberInt("2872"), + value: "https://modelzoo.co/model/openpose" + }, + { + num: NumberInt("2873"), + value: "https://modelzoo.co/model/sentiment-analysisgluon" + }, + { + num: NumberInt("2874"), + value: "https://modelzoo.co/model/lgamma" + }, + { + num: NumberInt("2875"), + value: "https://modelzoo.co/model/nonlocalsenet" + }, + { + num: NumberInt("2876"), + value: "https://modelzoo.co/model/vanillacnn" + }, + { + num: NumberInt("2877"), + value: "https://modelzoo.co/model/everrest" + }, + { + num: NumberInt("2878"), + value: "https://modelzoo.co/model/aws-lambda-servlet" + }, + { + num: NumberInt("2879"), + value: "https://modelzoo.co/model/pyprob" + }, + { + num: NumberInt("2880"), + value: "https://modelzoo.co/model/pix2code-pytorch" + }, + { + num: NumberInt("2881"), + value: "https://modelzoo.co/model/multi-agent-ddpg-using-pttorch-and" + }, + { + num: NumberInt("2882"), + value: "https://modelzoo.co/model/ssdfocal-loss" + }, + { + num: NumberInt("2883"), + value: "https://modelzoo.co/model/deeplab-v2" + }, + { + num: NumberInt("2884"), + value: "https://modelzoo.co/model/federated-learning-implementations" + }, + { + num: NumberInt("2885"), + value: "https://modelzoo.co/model/traffic-sign-classification" + }, + { + num: NumberInt("2886"), + value: "https://modelzoo.co/model/ac-blstm" + }, + { + num: NumberInt("2887"), + value: "https://modelzoo.co/model/wavenet-mxnet" + }, + { + num: NumberInt("2888"), + value: "https://modelzoo.co/model/variational-autoencoder" + }, + { + num: NumberInt("2889"), + value: "https://modelzoo.co/model/im2latex" + }, + { + num: NumberInt("2890"), + value: "https://modelzoo.co/model/galapagos_nao" + }, + { + num: NumberInt("2891"), + value: "https://modelzoo.co/model/jaxrs-versioning" + }, + { + num: NumberInt("2892"), + value: "https://modelzoo.co/model/anuvada" + }, + { + num: NumberInt("2893"), + value: "https://modelzoo.co/model/xception" + }, + { + num: NumberInt("2894"), + value: "https://modelzoo.co/model/jax-rs-jersey-application-sample" + }, + { + num: NumberInt("2895"), + value: "https://modelzoo.co/model/nxparser" + }, + { + num: NumberInt("2896"), + value: "https://modelzoo.co/model/hashed-nets" + }, + { + num: NumberInt("2897"), + value: "https://modelzoo.co/model/squeezedet" + }, + { + num: NumberInt("2898"), + value: "https://modelzoo.co/model/visual-semantic-embedding" + }, + { + num: NumberInt("2899"), + value: "https://modelzoo.co/model/jaxmapp" + }, + { + num: NumberInt("2900"), + value: "https://modelzoo.co/model/flink-modelserver" + }, + { + num: NumberInt("2901"), + value: "https://modelzoo.co/model/deephumanprediction" + }, + { + num: NumberInt("2902"), + value: "https://modelzoo.co/model/sequential-matching-networkgluon" + }, + { + num: NumberInt("2903"), + value: "https://modelzoo.co/model/defgluon" + }, + { + num: NumberInt("2904"), + value: "https://modelzoo.co/model/jumpingjax" + }, + { + num: NumberInt("2905"), + value: "https://modelzoo.co/model/yolodark2mxnet" + }, + { + num: NumberInt("2906"), + value: "https://modelzoo.co/model/mx-pointnet" + }, + { + num: NumberInt("2907"), + value: "https://modelzoo.co/model/pointcnnmx" + }, + { + num: NumberInt("2908"), + value: "https://modelzoo.co/model/conv-vis" + }, + { + num: NumberInt("2909"), + value: "https://modelzoo.co/model/jaxws-spring" + }, + { + num: NumberInt("2910"), + value: "https://modelzoo.co/model/advanced-ml-techniques" + }, + { + num: NumberInt("2911"), + value: "https://modelzoo.co/model/sdpoint" + }, + { + num: NumberInt("2912"), + value: "https://modelzoo.co/model/impala-pytorch" + }, + { + num: NumberInt("2913"), + value: "https://modelzoo.co/model/u-netkaggle-dstl" + }, + { + num: NumberInt("2914"), + value: "https://modelzoo.co/model/vqagluon" + }, + { + num: NumberInt("2915"), + value: "https://modelzoo.co/model/jax-ekf" + }, + { + num: NumberInt("2916"), + value: "https://modelzoo.co/model/keras-sde-net" + }, + { + num: NumberInt("2917"), + value: "https://modelzoo.co/model/pytorch-glove" + }, + { + num: NumberInt("2918"), + value: "https://modelzoo.co/model/languagedialect-identification-with-multiple-character-level-cnns" + }, + { + num: NumberInt("2919"), + value: "https://modelzoo.co/model/zero-shot-intent-capsnet" + }, + { + num: NumberInt("2920"), + value: "https://modelzoo.co/model/tiny-face-w-training" + }, + { + num: NumberInt("2921"), + value: "https://modelzoo.co/model/siamese-mxnet" + }, + { + num: NumberInt("2922"), + value: "https://modelzoo.co/model/p3d" + }, + { + num: NumberInt("2923"), + value: "https://modelzoo.co/model/cnnhighway-net" + }, + { + num: NumberInt("2924"), + value: "https://modelzoo.co/model/spectrallda" + }, + { + num: NumberInt("2925"), + value: "https://modelzoo.co/model/memnn" + }, + { + num: NumberInt("2926"), + value: "https://modelzoo.co/model/chainer-example-overfeat-classify" + }, + { + num: NumberInt("2927"), + value: "https://modelzoo.co/model/yolotiny_v2" + }, + { + num: NumberInt("2928"), + value: "https://modelzoo.co/model/sparsegpax" + }, + { + num: NumberInt("2929"), + value: "https://modelzoo.co/model/haiku-mup" + }, + { + num: NumberInt("2930"), + value: "https://modelzoo.co/model/mucko" + }, + { + num: NumberInt("2931"), + value: "https://modelzoo.co/model/lightcnn" + }, + { + num: NumberInt("2932"), + value: "https://modelzoo.co/model/netty-jax-ws" + }, + { + num: NumberInt("2933"), + value: "https://modelzoo.co/model/dxp-rest-example" + }, + { + num: NumberInt("2934"), + value: "https://modelzoo.co/model/spring-boot-jaxws-demo" + }, + { + num: NumberInt("2935"), + value: "https://modelzoo.co/model/federated-learning-pytorch" + }, + { + num: NumberInt("2936"), + value: "https://modelzoo.co/model/point-transformer-cls" + }, + { + num: NumberInt("2937"), + value: "https://modelzoo.co/model/memn2n" + }, + { + num: NumberInt("2938"), + value: "https://modelzoo.co/model/rnn-transducerrnnt-loss-using-cpp" + }, + { + num: NumberInt("2939"), + value: "https://modelzoo.co/model/deformable-conv" + }, + { + num: NumberInt("2940"), + value: "https://modelzoo.co/model/jax-ws-client" + }, + { + num: NumberInt("2941"), + value: "https://modelzoo.co/model/vertx-jersey" + }, + { + num: NumberInt("2942"), + value: "https://modelzoo.co/model/jax-spectral" + }, + { + num: NumberInt("2943"), + value: "https://modelzoo.co/model/pointwise-convolutional-neural-network" + }, + { + num: NumberInt("2944"), + value: "https://modelzoo.co/model/siamese_network_on_omniglotgluon" + }, + { + num: NumberInt("2945"), + value: "https://modelzoo.co/model/tacotron" + }, + { + num: NumberInt("2946"), + value: "https://modelzoo.co/model/dreamerv2-jax" + }, + { + num: NumberInt("2947"), + value: "https://modelzoo.co/model/nerfjax" + }, + { + num: NumberInt("2948"), + value: "https://modelzoo.co/model/st-resnet" + }, + { + num: NumberInt("2949"), + value: "https://modelzoo.co/model/class-activation-mapping" + }, + { + num: NumberInt("2950"), + value: "https://modelzoo.co/model/mxnet-recommendergluon" + }, + { + num: NumberInt("2951"), + value: "https://modelzoo.co/model/dreamax" + }, + { + num: NumberInt("2952"), + value: "https://modelzoo.co/model/svd2" + }, + { + num: NumberInt("2953"), + value: "https://modelzoo.co/model/ngd-in-wide-nn" + }, + { + num: NumberInt("2954"), + value: "https://modelzoo.co/model/perceiver-jax" + }, + { + num: NumberInt("2955"), + value: "https://modelzoo.co/model/networksample" + }, + { + num: NumberInt("2956"), + value: "https://modelzoo.co/model/dynamic-capacity-networks" + }, + { + num: NumberInt("2957"), + value: "https://modelzoo.co/model/neural-attention-model-abstractive-summarization" + }, + { + num: NumberInt("2958"), + value: "https://modelzoo.co/model/torchplus" + }, + { + num: NumberInt("2959"), + value: "https://modelzoo.co/model/deepdep" + }, + { + num: NumberInt("2960"), + value: "https://modelzoo.co/model/xceptionkeras2mxnet" + }, + { + num: NumberInt("2961"), + value: "https://modelzoo.co/model/visualbackprop" + }, + { + num: NumberInt("2962"), + value: "https://modelzoo.co/model/vat" + }, + { + num: NumberInt("2963"), + value: "https://modelzoo.co/model/jax-transformer" + }, + { + num: NumberInt("2964"), + value: "https://modelzoo.co/model/spring-boot-hibernate-multitenant-jaxrs-api" + }, + { + num: NumberInt("2965"), + value: "https://modelzoo.co/model/soapstone" + }, + { + num: NumberInt("2966"), + value: "https://modelzoo.co/model/ofbiz-rest-impl" + }, + { + num: NumberInt("2967"), + value: "https://modelzoo.co/model/laxy" + }, + { + num: NumberInt("2968"), + value: "https://modelzoo.co/model/flaxton-proxy" + }, + { + num: NumberInt("2969"), + value: "https://modelzoo.co/model/cartoon-gan-tf20" + }, + { + num: NumberInt("2970"), + value: "https://modelzoo.co/model/3d-u-net-pytorch-model-parallel" + }, + { + num: NumberInt("2971"), + value: "https://modelzoo.co/model/pytorch-mixup" + }, + { + num: NumberInt("2972"), + value: "https://modelzoo.co/model/range-loss" + }, + { + num: NumberInt("2973"), + value: "https://modelzoo.co/model/rangelossgluon" + }, + { + num: NumberInt("2974"), + value: "https://modelzoo.co/model/superresolutioncnn" + }, + { + num: NumberInt("2975"), + value: "https://modelzoo.co/model/fast-style-transfer" + }, + { + num: NumberInt("2976"), + value: "https://modelzoo.co/model/loss-surfaces" + }, + { + num: NumberInt("2977"), + value: "https://modelzoo.co/model/ysnotesoap" + }, + { + num: NumberInt("2978"), + value: "https://modelzoo.co/model/jaxrk" + }, + { + num: NumberInt("2979"), + value: "https://modelzoo.co/model/nlp-journey-jax" + }, + { + num: NumberInt("2980"), + value: "https://modelzoo.co/model/private-cross-silo-fl" + }, + { + num: NumberInt("2981"), + value: "https://modelzoo.co/model/jax-rs" + }, + { + num: NumberInt("2982"), + value: "https://modelzoo.co/model/madgrad" + }, + { + num: NumberInt("2983"), + value: "https://modelzoo.co/model/schnax" + }, + { + num: NumberInt("2984"), + value: "https://modelzoo.co/model/training-rnns-as-fast-as-cnns" + }, + { + num: NumberInt("2985"), + value: "https://modelzoo.co/model/charlstm" + }, + { + num: NumberInt("2986"), + value: "https://modelzoo.co/model/pytorch-deep-learning-models" + }, + { + num: NumberInt("2987"), + value: "https://modelzoo.co/model/chest-xray" + }, + { + num: NumberInt("2988"), + value: "https://modelzoo.co/model/ppogluon" + }, + { + num: NumberInt("2989"), + value: "https://modelzoo.co/model/mini-hmc-jax" + }, + { + num: NumberInt("2990"), + value: "https://modelzoo.co/model/backbone-wine-cellar" + }, + { + num: NumberInt("2991"), + value: "https://modelzoo.co/model/relaxed-machines" + }, + { + num: NumberInt("2992"), + value: "https://modelzoo.co/model/heroes-service" + }, + { + num: NumberInt("2993"), + value: "https://modelzoo.co/model/apirestgenerator" + }, + { + num: NumberInt("2994"), + value: "https://modelzoo.co/model/nepali-poet-generation-with-char-rnn" + }, + { + num: NumberInt("2995"), + value: "https://modelzoo.co/model/transformer-tensorflow" + }, + { + num: NumberInt("2996"), + value: "https://modelzoo.co/model/neural-network-pruning-sparsification" + }, + { + num: NumberInt("2997"), + value: "https://modelzoo.co/model/am-softmax" + }, + { + num: NumberInt("2998"), + value: "https://modelzoo.co/model/pytorch-text-crf" + }, + { + num: NumberInt("2999"), + value: "https://modelzoo.co/model/senetfrom-caffe" + }, + { + num: NumberInt("3000"), + value: "https://modelzoo.co/model/convolutional-sketch-inversion" + }, + { + num: NumberInt("3001"), + value: "https://modelzoo.co/model/dynamic-pose-estimation" + }, + { + num: NumberInt("3002"), + value: "https://modelzoo.co/model/reinspect" + }, + { + num: NumberInt("3003"), + value: "https://modelzoo.co/model/parserchianggluon" + }, + { + num: NumberInt("3004"), + value: "https://modelzoo.co/model/ner-with-bidirectional-lstm-cnns" + }, + { + num: NumberInt("3005"), + value: "https://modelzoo.co/model/prednet" + }, + { + num: NumberInt("3006"), + value: "https://modelzoo.co/model/adgm" + }, + { + num: NumberInt("3007"), + value: "https://modelzoo.co/model/imsat-chainer" + }, + { + num: NumberInt("3008"), + value: "https://modelzoo.co/model/reproduce-j1j2model-via-cnn" + }, + { + num: NumberInt("3009"), + value: "https://modelzoo.co/model/onlineplatformsteam" + }, + { + num: NumberInt("3010"), + value: "https://modelzoo.co/model/poc-jax-rs" + }, + { + num: NumberInt("3011"), + value: "https://modelzoo.co/model/resteasy-sse" + }, + { + num: NumberInt("3012"), + value: "https://modelzoo.co/model/ebikeconnect-api" + }, + { + num: NumberInt("3013"), + value: "https://modelzoo.co/model/entmax-jax" + }, + { + num: NumberInt("3014"), + value: "https://modelzoo.co/model/jaxb-inherit" + }, + { + num: NumberInt("3015"), + value: "https://modelzoo.co/model/jaxon-dialogs" + }, + { + num: NumberInt("3016"), + value: "https://modelzoo.co/model/jaxrs-cxf-camel-spring-example" + }, + { + num: NumberInt("3017"), + value: "https://modelzoo.co/model/pytorch-phocnet" + }, + { + num: NumberInt("3018"), + value: "https://modelzoo.co/model/pytorch-neuroevolution" + }, + { + num: NumberInt("3019"), + value: "https://modelzoo.co/model/pytorch-resnext" + }, + { + num: NumberInt("3020"), + value: "https://modelzoo.co/model/ppo-pytorch-2" + }, + { + num: NumberInt("3021"), + value: "https://modelzoo.co/model/convolutional-pose-machines" + }, + { + num: NumberInt("3022"), + value: "https://modelzoo.co/model/netvlad" + }, + { + num: NumberInt("3023"), + value: "https://modelzoo.co/model/go-flax-id" + }, + { + num: NumberInt("3024"), + value: "https://modelzoo.co/model/jaxbee" + }, + { + num: NumberInt("3025"), + value: "https://modelzoo.co/model/spring-jaxws-cxf" + }, + { + num: NumberInt("3026"), + value: "https://modelzoo.co/model/rest-jaxrs-example" + }, + { + num: NumberInt("3027"), + value: "https://modelzoo.co/model/jju" + }, + { + num: NumberInt("3028"), + value: "https://modelzoo.co/model/jaxro" + }, + { + num: NumberInt("3029"), + value: "https://modelzoo.co/model/lynx" + }, + { + num: NumberInt("3030"), + value: "https://modelzoo.co/model/infinispan-discovery" + }, + { + num: NumberInt("3031"), + value: "https://modelzoo.co/model/xjc-immutable-plugin" + }, + { + num: NumberInt("3032"), + value: "https://modelzoo.co/model/jaxws-jersey-client-api" + }, + { + num: NumberInt("3033"), + value: "https://modelzoo.co/model/htng-property-2009b-guestselfservice" + }, + { + num: NumberInt("3034"), + value: "https://modelzoo.co/model/resnext" + }, + { + num: NumberInt("3035"), + value: "https://modelzoo.co/model/autoregressive-novelty-detection" + }, + { + num: NumberInt("3036"), + value: "https://modelzoo.co/model/ssd-pytorch-2" + }, + { + num: NumberInt("3037"), + value: "https://modelzoo.co/model/capsnet-4" + }, + { + num: NumberInt("3038"), + value: "https://modelzoo.co/model/tabnet-pytorch" + }, + { + num: NumberInt("3039"), + value: "https://modelzoo.co/model/pytorch-implementation-of-highway-networks" + }, + { + num: NumberInt("3040"), + value: "https://modelzoo.co/model/artnet-pytorch" + }, + { + num: NumberInt("3041"), + value: "https://modelzoo.co/model/building-efficient-convnets-using-redundant-feature" + }, + { + num: NumberInt("3042"), + value: "https://modelzoo.co/model/pytorch-cifar10" + }, + { + num: NumberInt("3043"), + value: "https://modelzoo.co/model/perceptron-pytorch-autograd" + }, + { + num: NumberInt("3044"), + value: "https://modelzoo.co/model/faster-rcnn-2" + }, + { + num: NumberInt("3045"), + value: "https://modelzoo.co/model/pytorch-workspace" + }, + { + num: NumberInt("3046"), + value: "https://modelzoo.co/model/semi-supervised-models" + }, + { + num: NumberInt("3047"), + value: "https://modelzoo.co/model/exponentiated-gradient-pytorch" + }, + { + num: NumberInt("3048"), + value: "https://modelzoo.co/model/flashnet" + }, + { + num: NumberInt("3049"), + value: "https://modelzoo.co/model/classification-pytorch-colab" + }, + { + num: NumberInt("3050"), + value: "https://modelzoo.co/model/openai-mxnet" + }, + { + num: NumberInt("3051"), + value: "https://modelzoo.co/model/mnist-oneshot" + }, + { + num: NumberInt("3052"), + value: "https://modelzoo.co/model/diffsats" + }, + { + num: NumberInt("3053"), + value: "https://modelzoo.co/model/jax-gru" + }, + { + num: NumberInt("3054"), + value: "https://modelzoo.co/model/pytorch-word2vec-2" + }, + { + num: NumberInt("3055"), + value: "https://modelzoo.co/model/bert-for-retrieval-based-dialog-system" + }, + { + num: NumberInt("3056"), + value: "https://modelzoo.co/model/siamese_pytorch-2" + }, + { + num: NumberInt("3057"), + value: "https://modelzoo.co/model/siam-rpn" + }, + { + num: NumberInt("3058"), + value: "https://modelzoo.co/model/word2vec" + }, + { + num: NumberInt("3059"), + value: "https://modelzoo.co/model/capsule-networks-pytorch" + }, + { + num: NumberInt("3060"), + value: "https://modelzoo.co/model/lucad" + }, + { + num: NumberInt("3061"), + value: "https://modelzoo.co/model/vqa" + }, + { + num: NumberInt("3062"), + value: "https://modelzoo.co/model/geometric-matching" + }, + { + num: NumberInt("3063"), + value: "https://modelzoo.co/model/collaborative_filtering" + }, + { + num: NumberInt("3064"), + value: "https://modelzoo.co/model/chainer-fluid" + }, + { + num: NumberInt("3065"), + value: "https://modelzoo.co/model/ddgm" + }, + { + num: NumberInt("3066"), + value: "https://modelzoo.co/model/flax-bert" + }, + { + num: NumberInt("3067"), + value: "https://modelzoo.co/model/nodejs-flaxton" + }, + { + num: NumberInt("3068"), + value: "https://modelzoo.co/model/jaxfss" + }, + { + num: NumberInt("3069"), + value: "https://modelzoo.co/model/onlineplatformxboxlive" + }, + { + num: NumberInt("3070"), + value: "https://modelzoo.co/model/vivit-weights-converter" + }, + { + num: NumberInt("3071"), + value: "https://modelzoo.co/model/deep-learning-book-implementations" + }, + { + num: NumberInt("3072"), + value: "https://modelzoo.co/model/fractalnet" + }, + { + num: NumberInt("3073"), + value: "https://modelzoo.co/model/iouloss" + }, + { + num: NumberInt("3074"), + value: "https://modelzoo.co/model/cicada-classification" + }, + { + num: NumberInt("3075"), + value: "https://modelzoo.co/model/dpsh" + }, + { + num: NumberInt("3076"), + value: "https://modelzoo.co/model/memn2ngluon" + }, + { + num: NumberInt("3077"), + value: "https://modelzoo.co/model/sequence-sampling" + }, + { + num: NumberInt("3078"), + value: "https://modelzoo.co/model/flaxcrawler-jax" + }, + { + num: NumberInt("3079"), + value: "https://modelzoo.co/model/flax-bspline-experiment" + }, + { + num: NumberInt("3080"), + value: "https://modelzoo.co/model/jax-v-pytorch" + }, + { + num: NumberInt("3081"), + value: "https://modelzoo.co/model/holographic-embeddings-for-graph-completion-and" + }, + { + num: NumberInt("3082"), + value: "https://modelzoo.co/model/pytorch-implementations" + }, + { + num: NumberInt("3083"), + value: "https://modelzoo.co/model/character-aware-language-models-pytorch-implementation" + }, + { + num: NumberInt("3084"), + value: "https://modelzoo.co/model/minibatch_discrimination" + }, + { + num: NumberInt("3085"), + value: "https://modelzoo.co/model/mineclone-unity" + }, + { + num: NumberInt("3086"), + value: "https://modelzoo.co/model/gpt-2-haiku" + }, + { + num: NumberInt("3087"), + value: "https://modelzoo.co/model/tpu-tutorial" + }, + { + num: NumberInt("3088"), + value: "https://modelzoo.co/model/flax-28" + }, + { + num: NumberInt("3089"), + value: "https://modelzoo.co/model/flaxbot-jax" + }, + { + num: NumberInt("3090"), + value: "https://modelzoo.co/model/flax-57" + }, + { + num: NumberInt("3091"), + value: "https://modelzoo.co/model/flax-online" + }, + { + num: NumberInt("3092"), + value: "https://modelzoo.co/model/deep-vit-flax" + }, + { + num: NumberInt("3093"), + value: "https://modelzoo.co/model/rationalnets" + }, + { + num: NumberInt("3094"), + value: "https://modelzoo.co/model/jax_practice-2" + }, + { + num: NumberInt("3095"), + value: "https://modelzoo.co/model/marge" + }, + { + num: NumberInt("3096"), + value: "https://modelzoo.co/model/jax-implementations" + }, + { + num: NumberInt("3097"), + value: "https://modelzoo.co/model/autoencoder" + }, + { + num: NumberInt("3098"), + value: "https://modelzoo.co/model/deepcontextualbandits" + }, + { + num: NumberInt("3099"), + value: "https://modelzoo.co/model/differentialprivacy" + }, + { + num: NumberInt("3100"), + value: "https://modelzoo.co/model/domainadaptation" + }, + { + num: NumberInt("3101"), + value: "https://modelzoo.co/model/inception" + }, + { + num: NumberInt("3102"), + value: "https://modelzoo.co/model/keypointnet" + }, + { + num: NumberInt("3103"), + value: "https://modelzoo.co/model/learningtorememberrareevents" + }, + { + num: NumberInt("3104"), + value: "https://modelzoo.co/model/lexnetc" + }, + { + num: NumberInt("3105"), + value: "https://modelzoo.co/model/lm1b" + }, + { + num: NumberInt("3106"), + value: "https://modelzoo.co/model/lmcommonsense" + }, + { + num: NumberInt("3107"), + value: "https://modelzoo.co/model/namignizer" + }, + { + num: NumberInt("3108"), + value: "https://modelzoo.co/model/neuralgpu" + }, + { + num: NumberInt("3109"), + value: "https://modelzoo.co/model/neuralprogrammer" + }, + { + num: NumberInt("3110"), + value: "https://modelzoo.co/model/nextframeprediction" + }, + { + num: NumberInt("3111"), + value: "https://modelzoo.co/model/ptn" + }, + { + num: NumberInt("3112"), + value: "https://modelzoo.co/model/marco" + }, + { + num: NumberInt("3113"), + value: "https://modelzoo.co/model/qakg" + }, + { + num: NumberInt("3114"), + value: "https://modelzoo.co/model/realnvp" + }, + { + num: NumberInt("3115"), + value: "https://modelzoo.co/model/rebar" + }, + { + num: NumberInt("3116"), + value: "https://modelzoo.co/model/resnet" + }, + { + num: NumberInt("3117"), + value: "https://modelzoo.co/model/seq2species" + }, + { + num: NumberInt("3118"), + value: "https://modelzoo.co/model/skipthoughts" + }, + { + num: NumberInt("3119"), + value: "https://modelzoo.co/model/swivel" + }, + { + num: NumberInt("3120"), + value: "https://modelzoo.co/model/syntaxnet" + }, + { + num: NumberInt("3121"), + value: "https://modelzoo.co/model/tcn" + }, + { + num: NumberInt("3122"), + value: "https://modelzoo.co/model/textsum" + }, + { + num: NumberInt("3123"), + value: "https://modelzoo.co/model/transformer" + }, + { + num: NumberInt("3124"), + value: "https://modelzoo.co/model/videoprediction" + }, + { + num: NumberInt("3125"), + value: "https://modelzoo.co/model/deep-q-network" + }, + { + num: NumberInt("3126"), + value: "https://modelzoo.co/model/ac" + }, + { + num: NumberInt("3127"), + value: "https://modelzoo.co/model/a3c" + }, + { + num: NumberInt("3128"), + value: "https://modelzoo.co/model/network-in-network-model" + }, + { + num: NumberInt("3129"), + value: "https://modelzoo.co/model/models-from-the-bmvc-2014-paper-return" + }, + { + num: NumberInt("3130"), + value: "https://modelzoo.co/model/models-used-by-the-vgg-team" + }, + { + num: NumberInt("3131"), + value: "https://modelzoo.co/model/places-cnn-model-from-mit" + }, + { + num: NumberInt("3132"), + value: "https://modelzoo.co/model/googlenet-gpu-implementation-from-princeton" + }, + { + num: NumberInt("3133"), + value: "https://modelzoo.co/model/caffenet-fine-tuned-for-oxford-flowers-dataset" + }, + { + num: NumberInt("3134"), + value: "https://modelzoo.co/model/cnn-models-for-salient-object-subitizing" + }, + { + num: NumberInt("3135"), + value: "https://modelzoo.co/model/places_cnds_models-on-scene-recognition" + }, + { + num: NumberInt("3136"), + value: "https://modelzoo.co/model/models-for-age-and-gender-classification" + }, + { + num: NumberInt("3137"), + value: "https://modelzoo.co/model/parsenet" + }, + { + num: NumberInt("3138"), + value: "https://modelzoo.co/model/conditional-random-fields-as-recurrent-neural" + }, + { + num: NumberInt("3139"), + value: "https://modelzoo.co/model/holistically-nested-edge-detection" + }, + { + num: NumberInt("3140"), + value: "https://modelzoo.co/model/translating-videos-to-natural-language" + }, + { + num: NumberInt("3141"), + value: "https://modelzoo.co/model/vgg-face-cnn-descriptor" + }, + { + num: NumberInt("3142"), + value: "https://modelzoo.co/model/yearbook-photo-dating" + }, + { + num: NumberInt("3143"), + value: "https://modelzoo.co/model/ccnn" + }, + { + num: NumberInt("3144"), + value: "https://modelzoo.co/model/facial-landmark-detection-with-tweaked-convolutional" + }, + { + num: NumberInt("3145"), + value: "https://modelzoo.co/model/faster-r-cnn" + }, + { + num: NumberInt("3146"), + value: "https://modelzoo.co/model/sequence-to-sequence-video-to" + }, + { + num: NumberInt("3147"), + value: "https://modelzoo.co/model/pascal-voc-2012-multilabel-classification-model" + }, + { + num: NumberInt("3148"), + value: "https://modelzoo.co/model/squeezenet" + }, + { + num: NumberInt("3149"), + value: "https://modelzoo.co/model/mixture-dcnn" + }, + { + num: NumberInt("3150"), + value: "https://modelzoo.co/model/mulimodal-compact-bilinear-pooling-for-vqa" + }, + { + num: NumberInt("3151"), + value: "https://modelzoo.co/model/pose-aware-cnn-models-pams-for-face" + }, + { + num: NumberInt("3152"), + value: "https://modelzoo.co/model/learning-structured-sparsity-in-deep-neural" + }, + { + num: NumberInt("3153"), + value: "https://modelzoo.co/model/neural-activation-constellations" + }, + { + num: NumberInt("3154"), + value: "https://modelzoo.co/model/resface101" + }, + { + num: NumberInt("3155"), + value: "https://modelzoo.co/model/striving-for-simplicity" + }, + { + num: NumberInt("3156"), + value: "https://modelzoo.co/model/vgg-4x-without-degradation" + }, + { + num: NumberInt("3157"), + value: "https://modelzoo.co/model/using-ranking-cnn-for-age-estimation" + }, + { + num: NumberInt("3158"), + value: "https://modelzoo.co/model/lets-keep-it-simple" + }, + { + num: NumberInt("3159"), + value: "https://modelzoo.co/model/ssd-caffe" + }, + { + num: NumberInt("3160"), + value: "https://modelzoo.co/model/bvlc-googlenet" + }, + { + num: NumberInt("3161"), + value: "https://modelzoo.co/model/bvlc-reference-rcnn-ilsvrc13" + }, + { + num: NumberInt("3162"), + value: "https://modelzoo.co/model/densenet-121" + }, + { + num: NumberInt("3163"), + value: "https://modelzoo.co/model/inception-v1" + }, + { + num: NumberInt("3164"), + value: "https://modelzoo.co/model/squeezenet-caffe2" + }, + { + num: NumberInt("3165"), + value: "https://modelzoo.co/model/zfnet-512" + }, + { + num: NumberInt("3166"), + value: "https://modelzoo.co/model/learning-local-feature-descriptors-with-triplets" + }, + { + num: NumberInt("3167"), + value: "https://modelzoo.co/model/self-norm-nets" + }, + { + num: NumberInt("3168"), + value: "https://modelzoo.co/model/lstm-for-har" + }, + { + num: NumberInt("3169"), + value: "https://modelzoo.co/model/pix2pix-mxnet" + }, + { + num: NumberInt("3170"), + value: "https://modelzoo.co/model/dirnet" + }, + { + num: NumberInt("3171"), + value: "https://modelzoo.co/model/densely-connected-convolutional-networks-keras" + }, + { + num: NumberInt("3172"), + value: "https://modelzoo.co/model/dfi" + }, + { + num: NumberInt("3173"), + value: "https://modelzoo.co/model/context-encoder" + }, + { + num: NumberInt("3174"), + value: "https://modelzoo.co/model/chainer_rnnlm" + }, + { + num: NumberInt("3175"), + value: "https://modelzoo.co/model/chainer_examples-chainer" + }, + { + num: NumberInt("3176"), + value: "https://modelzoo.co/model/qrnn" + }, + { + num: NumberInt("3177"), + value: "https://modelzoo.co/model/chainer_ca" + }, + { + num: NumberInt("3178"), + value: "https://modelzoo.co/model/chainer-libdnn" + }, + { + num: NumberInt("3179"), + value: "https://modelzoo.co/model/face68pts" + }, + { + num: NumberInt("3180"), + value: "https://modelzoo.co/model/uis-rnn" + }, + { + num: NumberInt("3181"), + value: "https://modelzoo.co/model/vgg16-deconvolution-network" + }, + { + num: NumberInt("3182"), + value: "https://modelzoo.co/model/mxnet_tetris" + }, + { + num: NumberInt("3183"), + value: "https://modelzoo.co/model/gluon-nlpgluon" + }, + { + num: NumberInt("3184"), + value: "https://modelzoo.co/model/segnet-caffe" + }, + { + num: NumberInt("3185"), + value: "https://modelzoo.co/model/dqngluon" + }, + { + num: NumberInt("3186"), + value: "https://modelzoo.co/model/gluonseggluon" + }, + { + num: NumberInt("3187"), + value: "https://modelzoo.co/model/double-dqngluon" + }, + { + num: NumberInt("3188"), + value: "https://modelzoo.co/model/matchnet" + }, + { + num: NumberInt("3189"), + value: "https://modelzoo.co/model/deepid-v1" + }, + { + num: NumberInt("3190"), + value: "https://modelzoo.co/model/c3d-mxnet" + }, + { + num: NumberInt("3191"), + value: "https://modelzoo.co/model/drl" + }, + { + num: NumberInt("3192"), + value: "https://modelzoo.co/model/fcn-aspp" + }, + { + num: NumberInt("3193"), + value: "https://modelzoo.co/model/deep-q-learning-pong-with-tensorflow-and" + }, + { + num: NumberInt("3194"), + value: "https://modelzoo.co/model/deeplab-caffe" + }, + { + num: NumberInt("3195"), + value: "https://modelzoo.co/model/vgg-face" + }, + { + num: NumberInt("3196"), + value: "https://modelzoo.co/model/lrcn" + }, + { + num: NumberInt("3197"), + value: "https://modelzoo.co/model/places-cnn" + }, + { + num: NumberInt("3198"), + value: "https://modelzoo.co/model/srcnn" + }, + { + num: NumberInt("3199"), + value: "https://modelzoo.co/model/deepdrive" + }, + { + num: NumberInt("3200"), + value: "https://modelzoo.co/model/berkeley-deepdrive" + }, + { + num: NumberInt("3201"), + value: "https://modelzoo.co/model/princeton-deepdriving" + }, + { + num: NumberInt("3202"), + value: "https://modelzoo.co/model/sentiment-analysis" + }, + { + num: NumberInt("3203"), + value: "https://modelzoo.co/model/alexnet" + }, + { + num: NumberInt("3204"), + value: "https://modelzoo.co/model/inception-v2" + }, + { + num: NumberInt("3205"), + value: "https://modelzoo.co/model/styletransfer" + }, + { + num: NumberInt("3206"), + value: "https://modelzoo.co/model/vgg19" + }, + { + num: NumberInt("3207"), + value: "https://modelzoo.co/model/multi-gpu-multi-label-densenet-gluon" + }, + { + num: NumberInt("3208"), + value: "https://modelzoo.co/model/nasnet-agluon" + }, + { + num: NumberInt("3209"), + value: "https://modelzoo.co/model/light-head-r-cnn" + }, + { + num: NumberInt("3210"), + value: "https://modelzoo.co/model/segnet-mxnet" + }, + { + num: NumberInt("3211"), + value: "https://modelzoo.co/model/east" + }, + { + num: NumberInt("3212"), + value: "https://modelzoo.co/model/rc3d" + }, + { + num: NumberInt("3213"), + value: "https://modelzoo.co/model/receptive-field-tool" + }, + { + num: NumberInt("3214"), + value: "https://modelzoo.co/model/reuters-topic-classification" + }, + { + num: NumberInt("3215"), + value: "https://modelzoo.co/model/lstm-on-the-imdb-dataset-text" + }, + { + num: NumberInt("3216"), + value: "https://modelzoo.co/model/bidirectional-lstm-on-the-imdb-dataset" + }, + { + num: NumberInt("3217"), + value: "https://modelzoo.co/model/1d-cnn-on-the-imdb-dataset" + }, + { + num: NumberInt("3218"), + value: "https://modelzoo.co/model/1d-cnn-lstm-on-the-imdb-dataset" + }, + { + num: NumberInt("3219"), + value: "https://modelzoo.co/model/lstm-based-network-on-the-babi-dataset" + }, + { + num: NumberInt("3220"), + value: "https://modelzoo.co/model/memory-network-on-the-babi-dataset" + }, + { + num: NumberInt("3221"), + value: "https://modelzoo.co/model/sequence-to-sequence-learning-for-performing" + }, + { + num: NumberInt("3222"), + value: "https://modelzoo.co/model/lstm-text-generation" + }, + { + num: NumberInt("3223"), + value: "https://modelzoo.co/model/using-pre-trained-word-embeddings" + }, + { + num: NumberInt("3224"), + value: "https://modelzoo.co/model/fasttext-on-the-imdb-dataset" + }, + { + num: NumberInt("3225"), + value: "https://modelzoo.co/model/structurally-constrained-recurrent-nets-text-generation" + }, + { + num: NumberInt("3226"), + value: "https://modelzoo.co/model/simple-cnn-on-mnist" + }, + { + num: NumberInt("3227"), + value: "https://modelzoo.co/model/simple-cnn-on-cifar10-with-data" + }, + { + num: NumberInt("3228"), + value: "https://modelzoo.co/model/inception-v3" + }, + { + num: NumberInt("3229"), + value: "https://modelzoo.co/model/vgg-16-with-pre-trained-weights" + }, + { + num: NumberInt("3230"), + value: "https://modelzoo.co/model/vgg-19-with-pre-trained-weights" + }, + { + num: NumberInt("3231"), + value: "https://modelzoo.co/model/neural-style-transfer-keras" + }, + { + num: NumberInt("3232"), + value: "https://modelzoo.co/model/visualizing-the-filters-learned-by-a" + }, + { + num: NumberInt("3233"), + value: "https://modelzoo.co/model/deep-dreams" + }, + { + num: NumberInt("3234"), + value: "https://modelzoo.co/model/stateful-lstm" + }, + { + num: NumberInt("3235"), + value: "https://modelzoo.co/model/siamese-network" + }, + { + num: NumberInt("3236"), + value: "https://modelzoo.co/model/pretraining-on-a-different-dataset" + }, + { + num: NumberInt("3237"), + value: "https://modelzoo.co/model/s2cnn" + }, + { + num: NumberInt("3238"), + value: "https://modelzoo.co/model/jackson-jaxrs-propertyfiltering" + }, + { + num: NumberInt("3239"), + value: "https://modelzoo.co/model/e3nn-jax" + }, + { + num: NumberInt("3240"), + value: "https://modelzoo.co/model/jaxtorch" + }, + { + num: NumberInt("3241"), + value: "https://modelzoo.co/model/osgi-jaxrs-extracted" + }, + { + num: NumberInt("3242"), + value: "https://modelzoo.co/model/pytorch-implementation-2" + }, + { + num: NumberInt("3243"), + value: "https://modelzoo.co/model/flax-bert-jax" + }, + { + num: NumberInt("3244"), + value: "https://modelzoo.co/model/lecun1989-flax" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://modelzoo.co/", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://modelzoo.co/" + } + ], + links: "https://modelzoo.co/", + name: "modelzoo", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_linktext", + desc: "", + type: "string", + exampleValue: "OpenPose 24000OpenPose represents the first real-time multi-person system to jointly detect human body, hand, and facial keypoints (in total 130 keypoints) on single images.\nCaffeCV" + }, + { + id: NumberInt("1"), + name: "para2_linkAddress", + desc: "", + type: "string", + exampleValue: "https://modelzoo.co/model/openpose-caffe" + } + ], + url: "https://modelzoo.co/" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63edd241c85da553b7a9d503"), + containJudge: false, + desc: "http://www.ceic.ac.cn/history", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "http://www.ceic.ac.cn/history", + links: "http://www.ceic.ac.cn/history", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Del Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环输入", + sequence: [ + NumberInt("6"), + NumberInt("7"), + NumberInt("10") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "3", + pathList: "", + textList: "20\n50", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n \n 历史查询\n \n \n \n 时间: 至 \n \n \n 纬度:大于  小于 单位:度 范围:-90至90\n\n \n \n 经度:大于  小于 单位:度 范围:-180至180\n \n \n 深度:大于  小于 单位:千米\n \n \n 震级:大于  小于 \n 查询\n \n \n \n\n \n 查询结果:显示到地图保存到本地\n\n \n \n \n \n 震级(M)\n 发震时刻(UTC+8)\n\n 纬度(°)\n 经度(°)\n 深度(千米)\n 参考位置\n\n \n \n \n \n 当前页: 总页数:\n \n \n \n \n \n\n\n" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/h1[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "历史查询" + } + ], + default: "" + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("6"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "输入内容", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"weidu1\"]", + wait: NumberInt("0"), + value: "1" + } + }, + { + id: NumberInt("4"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击查询", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"search\"]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination\")]/ul[1]/li[10]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("10"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("12"), + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination\")]/ul[1]/li/a[text()='»']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("11"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击下一页", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination\")]/ul[1]/li[10]/a[1]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("12"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("13") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("2"), + pathList: "//*[contains(@class, \"tr-red\")]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[3]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[4]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[5]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[6]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[7]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[8]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[9]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[10]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[11]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[12]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[13]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[14]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[15]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[16]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[17]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[18]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[19]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[20]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[21]", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("13"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "保存数据", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para5_text", + desc: "", + relativeXpath: "/td[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "6.1" + }, + { + num: NumberInt("1"), + value: "5.6" + }, + { + num: NumberInt("2"), + value: "3.0" + }, + { + num: NumberInt("3"), + value: "3.6" + }, + { + num: NumberInt("4"), + value: "4.3" + }, + { + num: NumberInt("5"), + value: "3.6" + }, + { + num: NumberInt("6"), + value: "3.1" + }, + { + num: NumberInt("7"), + value: "2.8" + }, + { + num: NumberInt("8"), + value: "3.2" + }, + { + num: NumberInt("9"), + value: "3.3" + }, + { + num: NumberInt("10"), + value: "2.9" + }, + { + num: NumberInt("11"), + value: "3.0" + }, + { + num: NumberInt("12"), + value: "4.2" + }, + { + num: NumberInt("13"), + value: "3.1" + }, + { + num: NumberInt("14"), + value: "5.8" + }, + { + num: NumberInt("15"), + value: "2.9" + }, + { + num: NumberInt("16"), + value: "2.8" + }, + { + num: NumberInt("17"), + value: "4.3" + }, + { + num: NumberInt("18"), + value: "3.0" + }, + { + num: NumberInt("19"), + value: "3.0" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para6_text", + desc: "", + relativeXpath: "/td[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2023-02-1602:10:08" + }, + { + num: NumberInt("1"), + value: "2023-02-1421:16:51" + }, + { + num: NumberInt("2"), + value: "2023-02-1414:40:16" + }, + { + num: NumberInt("3"), + value: "2023-02-1403:35:10" + }, + { + num: NumberInt("4"), + value: "2023-02-1402:38:48" + }, + { + num: NumberInt("5"), + value: "2023-02-1318:38:47" + }, + { + num: NumberInt("6"), + value: "2023-02-1301:23:35" + }, + { + num: NumberInt("7"), + value: "2023-02-1216:42:23" + }, + { + num: NumberInt("8"), + value: "2023-02-1211:37:27" + }, + { + num: NumberInt("9"), + value: "2023-02-1208:27:45" + }, + { + num: NumberInt("10"), + value: "2023-02-1200:32:03" + }, + { + num: NumberInt("11"), + value: "2023-02-1120:29:48" + }, + { + num: NumberInt("12"), + value: "2023-02-1119:35:47" + }, + { + num: NumberInt("13"), + value: "2023-02-1117:47:29" + }, + { + num: NumberInt("14"), + value: "2023-02-1116:55:06" + }, + { + num: NumberInt("15"), + value: "2023-02-1114:39:53" + }, + { + num: NumberInt("16"), + value: "2023-02-1114:35:30" + }, + { + num: NumberInt("17"), + value: "2023-02-1110:41:42" + }, + { + num: NumberInt("18"), + value: "2023-02-1015:30:27" + }, + { + num: NumberInt("19"), + value: "2023-02-1000:06:31" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para7_text", + desc: "", + relativeXpath: "/td[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "12.50" + }, + { + num: NumberInt("1"), + value: "45.15" + }, + { + num: NumberInt("2"), + value: "41.14" + }, + { + num: NumberInt("3"), + value: "46.62" + }, + { + num: NumberInt("4"), + value: "38.96" + }, + { + num: NumberInt("5"), + value: "43.78" + }, + { + num: NumberInt("6"), + value: "29.66" + }, + { + num: NumberInt("7"), + value: "39.76" + }, + { + num: NumberInt("8"), + value: "42.26" + }, + { + num: NumberInt("9"), + value: "39.93" + }, + { + num: NumberInt("10"), + value: "26.39" + }, + { + num: NumberInt("11"), + value: "41.22" + }, + { + num: NumberInt("12"), + value: "23.40" + }, + { + num: NumberInt("13"), + value: "38.28" + }, + { + num: NumberInt("14"), + value: "3.70" + }, + { + num: NumberInt("15"), + value: "39.92" + }, + { + num: NumberInt("16"), + value: "23.76" + }, + { + num: NumberInt("17"), + value: "23.76" + }, + { + num: NumberInt("18"), + value: "36.17" + }, + { + num: NumberInt("19"), + value: "31.94" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para8_text", + desc: "", + relativeXpath: "/td[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "123.95" + }, + { + num: NumberInt("1"), + value: "23.30" + }, + { + num: NumberInt("2"), + value: "83.47" + }, + { + num: NumberInt("3"), + value: "119.92" + }, + { + num: NumberInt("4"), + value: "92.75" + }, + { + num: NumberInt("5"), + value: "84.82" + }, + { + num: NumberInt("6"), + value: "102.01" + }, + { + num: NumberInt("7"), + value: "115.63" + }, + { + num: NumberInt("8"), + value: "85.14" + }, + { + num: NumberInt("9"), + value: "96.41" + }, + { + num: NumberInt("10"), + value: "99.91" + }, + { + num: NumberInt("11"), + value: "83.26" + }, + { + num: NumberInt("12"), + value: "121.69" + }, + { + num: NumberInt("13"), + value: "75.09" + }, + { + num: NumberInt("14"), + value: "126.95" + }, + { + num: NumberInt("15"), + value: "96.37" + }, + { + num: NumberInt("16"), + value: "114.63" + }, + { + num: NumberInt("17"), + value: "114.64" + }, + { + num: NumberInt("18"), + value: "77.51" + }, + { + num: NumberInt("19"), + value: "92.84" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para9_text", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "20" + }, + { + num: NumberInt("1"), + value: "10" + }, + { + num: NumberInt("2"), + value: "15" + }, + { + num: NumberInt("3"), + value: "16" + }, + { + num: NumberInt("4"), + value: "10" + }, + { + num: NumberInt("5"), + value: "18" + }, + { + num: NumberInt("6"), + value: "12" + }, + { + num: NumberInt("7"), + value: "14" + }, + { + num: NumberInt("8"), + value: "10" + }, + { + num: NumberInt("9"), + value: "11" + }, + { + num: NumberInt("10"), + value: "10" + }, + { + num: NumberInt("11"), + value: "10" + }, + { + num: NumberInt("12"), + value: "29" + }, + { + num: NumberInt("13"), + value: "122" + }, + { + num: NumberInt("14"), + value: "20" + }, + { + num: NumberInt("15"), + value: "11" + }, + { + num: NumberInt("16"), + value: "10" + }, + { + num: NumberInt("17"), + value: "11" + }, + { + num: NumberInt("18"), + value: "85" + }, + { + num: NumberInt("19"), + value: "10" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para10_linktext", + desc: "", + relativeXpath: "/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "菲律宾" + }, + { + num: NumberInt("1"), + value: "罗马尼亚" + }, + { + num: NumberInt("2"), + value: "新疆阿克苏地区库车市" + }, + { + num: NumberInt("3"), + value: "内蒙古锡林郭勒盟东乌珠穆沁旗" + }, + { + num: NumberInt("4"), + value: "青海海西州茫崖市" + }, + { + num: NumberInt("5"), + value: "新疆塔城地区乌苏市" + }, + { + num: NumberInt("6"), + value: "四川甘孜州泸定县" + }, + { + num: NumberInt("7"), + value: "北京房山区" + }, + { + num: NumberInt("8"), + value: "新疆巴音郭楞州轮台县" + }, + { + num: NumberInt("9"), + value: "甘肃酒泉市瓜州县" + }, + { + num: NumberInt("10"), + value: "云南大理州剑川县" + }, + { + num: NumberInt("11"), + value: "新疆阿克苏地区库车市" + }, + { + num: NumberInt("12"), + value: "台湾台东县海域" + }, + { + num: NumberInt("13"), + value: "新疆克孜勒苏州阿克陶县" + }, + { + num: NumberInt("14"), + value: "印尼塔劳群岛" + }, + { + num: NumberInt("15"), + value: "甘肃酒泉市瓜州县" + }, + { + num: NumberInt("16"), + value: "广东河源市源城区(有感)" + }, + { + num: NumberInt("17"), + value: "广东河源市源城区" + }, + { + num: NumberInt("18"), + value: "新疆喀什地区叶城县" + }, + { + num: NumberInt("19"), + value: "西藏那曲市比如县" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para11_linkAddress", + desc: "", + relativeXpath: "/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://news.ceic.ac.cn/CC20230216021009.html" + }, + { + num: NumberInt("1"), + value: "https://news.ceic.ac.cn/CC20230214211651.html" + }, + { + num: NumberInt("2"), + value: "https://news.ceic.ac.cn/CD20230214144016.html" + }, + { + num: NumberInt("3"), + value: "https://news.ceic.ac.cn/CD20230214033510.html" + }, + { + num: NumberInt("4"), + value: "https://news.ceic.ac.cn/CC20230214023849.html" + }, + { + num: NumberInt("5"), + value: "https://news.ceic.ac.cn/CD20230213183848.html" + }, + { + num: NumberInt("6"), + value: "https://news.ceic.ac.cn/CD20230213012336.html" + }, + { + num: NumberInt("7"), + value: "https://news.ceic.ac.cn/CD20230212164224.html" + }, + { + num: NumberInt("8"), + value: "https://news.ceic.ac.cn/CD20230212113728.html" + }, + { + num: NumberInt("9"), + value: "https://news.ceic.ac.cn/CD20230212082746.html" + }, + { + num: NumberInt("10"), + value: "https://news.ceic.ac.cn/CD20230212003204.html" + }, + { + num: NumberInt("11"), + value: "https://news.ceic.ac.cn/CD20230211202949.html" + }, + { + num: NumberInt("12"), + value: "https://news.ceic.ac.cn/CD20230211193548.html" + }, + { + num: NumberInt("13"), + value: "https://news.ceic.ac.cn/CD20230211174729.html" + }, + { + num: NumberInt("14"), + value: "https://news.ceic.ac.cn/CC20230211165507.html" + }, + { + num: NumberInt("15"), + value: "https://news.ceic.ac.cn/CD20230211143954.html" + }, + { + num: NumberInt("16"), + value: "https://news.ceic.ac.cn/CD20230211143530.html" + }, + { + num: NumberInt("17"), + value: "https://news.ceic.ac.cn/CC20230211104143.html" + }, + { + num: NumberInt("18"), + value: "https://news.ceic.ac.cn/CD20230210153027.html" + }, + { + num: NumberInt("19"), + value: "https://news.ceic.ac.cn/CD20230210000631.html" + } + ], + default: "" + } + ], + loopType: NumberInt("2") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "http://www.ceic.ac.cn/history", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "http://www.ceic.ac.cn/history" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("4"), + nodeName: "循环输入", + desc: "Text/URL to be entered, multiple lines should be separated by \\n", + type: "string", + exampleValue: "20\n50", + value: "20\n50" + }, + { + id: NumberInt("2"), + name: "loopTimes_循环点击下一页_2", + nodeId: NumberInt("10"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "http://www.ceic.ac.cn/history", + name: "地震局历史内容爬取", + outputParameters: [ + { + id: NumberInt("0"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "6.1" + }, + { + id: NumberInt("1"), + name: "para6_text", + desc: "", + type: "string", + exampleValue: "2023-02-1602:10:08" + }, + { + id: NumberInt("2"), + name: "para7_text", + desc: "", + type: "string", + exampleValue: "12.50" + }, + { + id: NumberInt("3"), + name: "para8_text", + desc: "", + type: "string", + exampleValue: "123.95" + }, + { + id: NumberInt("4"), + name: "para9_text", + desc: "", + type: "string", + exampleValue: "20" + }, + { + id: NumberInt("5"), + name: "para10_linktext", + desc: "", + type: "string", + exampleValue: "菲律宾" + }, + { + id: NumberInt("6"), + name: "para11_linkAddress", + desc: "", + type: "string", + exampleValue: "https://news.ceic.ac.cn/CC20230216021009.html" + } + ], + url: "http://www.ceic.ac.cn/history" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63edefed869cb52a8a8f6ed3"), + containJudge: false, + desc: "http://www.ceic.ac.cn/history", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("7"), + NumberInt("8"), + NumberInt("16") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("2") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "打开网页", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "http://www.ceic.ac.cn/history", + links: "http://www.ceic.ac.cn/history", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "打开网页", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "打开网页", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("2"), + index: NumberInt("7"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "输入文本", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"weidu1\"]", + wait: NumberInt("0"), + value: "2" + } + }, + { + id: NumberInt("3"), + index: NumberInt("8"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击查询", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"search\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("10") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("2"), + pathList: "//*[contains(@class, \"tr-red\")]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[3]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[4]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[5]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[6]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[7]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[8]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[9]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[10]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[11]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[12]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[13]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[14]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[15]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[16]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[17]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[18]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[19]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[20]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[21]", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "6.12023-02-16 02:10:0812.50123.9520菲律宾" + }, + { + num: NumberInt("1"), + value: "5.62023-02-14 21:16:5145.1523.3010罗马尼亚" + }, + { + num: NumberInt("2"), + value: "3.02023-02-14 14:40:1641.1483.4715新疆阿克苏地区库车市" + }, + { + num: NumberInt("3"), + value: "3.62023-02-14 03:35:1046.62119.9216内蒙古锡林郭勒盟东乌珠穆沁旗" + }, + { + num: NumberInt("4"), + value: "4.32023-02-14 02:38:4838.9692.7510青海海西州茫崖市" + }, + { + num: NumberInt("5"), + value: "3.62023-02-13 18:38:4743.7884.8218新疆塔城地区乌苏市" + }, + { + num: NumberInt("6"), + value: "3.12023-02-13 01:23:3529.66102.0112四川甘孜州泸定县" + }, + { + num: NumberInt("7"), + value: "2.82023-02-12 16:42:2339.76115.6314北京房山区" + }, + { + num: NumberInt("8"), + value: "3.22023-02-12 11:37:2742.2685.1410新疆巴音郭楞州轮台县" + }, + { + num: NumberInt("9"), + value: "3.32023-02-12 08:27:4539.9396.4111甘肃酒泉市瓜州县" + }, + { + num: NumberInt("10"), + value: "2.92023-02-12 00:32:0326.3999.9110云南大理州剑川县" + }, + { + num: NumberInt("11"), + value: "3.02023-02-11 20:29:4841.2283.2610新疆阿克苏地区库车市" + }, + { + num: NumberInt("12"), + value: "4.22023-02-11 19:35:4723.40121.6929台湾台东县海域" + }, + { + num: NumberInt("13"), + value: "3.12023-02-11 17:47:2938.2875.09122新疆克孜勒苏州阿克陶县" + }, + { + num: NumberInt("14"), + value: "5.82023-02-11 16:55:063.70126.9520印尼塔劳群岛" + }, + { + num: NumberInt("15"), + value: "2.92023-02-11 14:39:5339.9296.3711甘肃酒泉市瓜州县" + }, + { + num: NumberInt("16"), + value: "2.82023-02-11 14:35:3023.76114.6310广东河源市源城区(有感)" + }, + { + num: NumberInt("17"), + value: "4.32023-02-11 10:41:4223.76114.6411广东河源市源城区" + }, + { + num: NumberInt("18"), + value: "3.02023-02-10 15:30:2736.1777.5185新疆喀什地区叶城县" + }, + { + num: NumberInt("19"), + value: "3.02023-02-10 00:06:3131.9492.8410西藏那曲市比如县" + } + ], + default: "" + } + ], + loopType: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"tr-red\")]/td[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"cid\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "6.12023-02-16 02:10:0812.50123.9520菲律宾" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "震级(M)发震时刻(UTC+8)纬度(°)经度(°)深度(千米)参考位置" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "5.62023-02-14 21:16:5145.1523.3010罗马尼亚" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.02023-02-14 14:40:1641.1483.4715新疆阿克苏地区库车市" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.62023-02-14 03:35:1046.62119.9216内蒙古锡林郭勒盟东乌珠穆沁旗" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[6]", + exampleValues: [ + { + num: NumberInt("0"), + value: "4.32023-02-14 02:38:4838.9692.7510青海海西州茫崖市" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[7]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.62023-02-13 18:38:4743.7884.8218新疆塔城地区乌苏市" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para9_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[8]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.12023-02-13 01:23:3529.66102.0112四川甘孜州泸定县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para10_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[9]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2.82023-02-12 16:42:2339.76115.6314北京房山区" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para11_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[10]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.22023-02-12 11:37:2742.2685.1410新疆巴音郭楞州轮台县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para12_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[11]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.32023-02-12 08:27:4539.9396.4111甘肃酒泉市瓜州县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para13_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[12]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2.92023-02-12 00:32:0326.3999.9110云南大理州剑川县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para14_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[13]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.02023-02-11 20:29:4841.2283.2610新疆阿克苏地区库车市" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para15_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[14]", + exampleValues: [ + { + num: NumberInt("0"), + value: "4.22023-02-11 19:35:4723.40121.6929台湾台东县海域" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para16_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[15]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.12023-02-11 17:47:2938.2875.09122新疆克孜勒苏州阿克陶县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para17_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[16]", + exampleValues: [ + { + num: NumberInt("0"), + value: "5.82023-02-11 16:55:063.70126.9520印尼塔劳群岛" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para18_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[17]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2.92023-02-11 14:39:5339.9296.3711甘肃酒泉市瓜州县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para19_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[18]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2.82023-02-11 14:35:3023.76114.6310广东河源市源城区(有感)" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para20_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[19]", + exampleValues: [ + { + num: NumberInt("0"), + value: "4.32023-02-11 10:41:4223.76114.6411广东河源市源城区" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para21_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[20]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.02023-02-10 15:30:2736.1777.5185新疆喀什地区叶城县" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para22_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[21]", + exampleValues: [ + { + num: NumberInt("0"), + value: "3.02023-02-10 00:06:3131.9492.8410西藏那曲市比如县" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: false, + name: "para23_linktext", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[2]/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "菲律宾" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: false, + name: "para24_linkAddress", + desc: "", + relativeXpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[2]/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://news.ceic.ac.cn/CC20230216021009.html" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("14"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("15") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("15"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("4"), + index: NumberInt("16"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("17"), + NumberInt("18"), + NumberInt("19") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("2"), + pathList: "//*[contains(@class, \"tr-red\")]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[3]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[4]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[5]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[6]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[7]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[8]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[9]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[10]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[11]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[12]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[13]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[14]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[15]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[16]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[17]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[18]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[19]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[20]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[21]", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("17"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para25_text", + desc: "", + relativeXpath: "/td", + exampleValues: [ + { + num: NumberInt("0"), + value: "6.1" + }, + { + num: NumberInt("1"), + value: "5.6" + }, + { + num: NumberInt("2"), + value: "3.0" + }, + { + num: NumberInt("3"), + value: "3.6" + }, + { + num: NumberInt("4"), + value: "4.3" + }, + { + num: NumberInt("5"), + value: "3.6" + }, + { + num: NumberInt("6"), + value: "3.1" + }, + { + num: NumberInt("7"), + value: "2.8" + }, + { + num: NumberInt("8"), + value: "3.2" + }, + { + num: NumberInt("9"), + value: "3.3" + }, + { + num: NumberInt("10"), + value: "2.9" + }, + { + num: NumberInt("11"), + value: "3.0" + }, + { + num: NumberInt("12"), + value: "4.2" + }, + { + num: NumberInt("13"), + value: "3.1" + }, + { + num: NumberInt("14"), + value: "5.8" + }, + { + num: NumberInt("15"), + value: "2.9" + }, + { + num: NumberInt("16"), + value: "2.8" + }, + { + num: NumberInt("17"), + value: "4.3" + }, + { + num: NumberInt("18"), + value: "3.0" + }, + { + num: NumberInt("19"), + value: "3.0" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para26_text", + desc: "", + relativeXpath: "/td[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2023-02-1602:10:08" + }, + { + num: NumberInt("1"), + value: "2023-02-1421:16:51" + }, + { + num: NumberInt("2"), + value: "2023-02-1414:40:16" + }, + { + num: NumberInt("3"), + value: "2023-02-1403:35:10" + }, + { + num: NumberInt("4"), + value: "2023-02-1402:38:48" + }, + { + num: NumberInt("5"), + value: "2023-02-1318:38:47" + }, + { + num: NumberInt("6"), + value: "2023-02-1301:23:35" + }, + { + num: NumberInt("7"), + value: "2023-02-1216:42:23" + }, + { + num: NumberInt("8"), + value: "2023-02-1211:37:27" + }, + { + num: NumberInt("9"), + value: "2023-02-1208:27:45" + }, + { + num: NumberInt("10"), + value: "2023-02-1200:32:03" + }, + { + num: NumberInt("11"), + value: "2023-02-1120:29:48" + }, + { + num: NumberInt("12"), + value: "2023-02-1119:35:47" + }, + { + num: NumberInt("13"), + value: "2023-02-1117:47:29" + }, + { + num: NumberInt("14"), + value: "2023-02-1116:55:06" + }, + { + num: NumberInt("15"), + value: "2023-02-1114:39:53" + }, + { + num: NumberInt("16"), + value: "2023-02-1114:35:30" + }, + { + num: NumberInt("17"), + value: "2023-02-1110:41:42" + }, + { + num: NumberInt("18"), + value: "2023-02-1015:30:27" + }, + { + num: NumberInt("19"), + value: "2023-02-1000:06:31" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para27_text", + desc: "", + relativeXpath: "/td[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "12.50" + }, + { + num: NumberInt("1"), + value: "45.15" + }, + { + num: NumberInt("2"), + value: "41.14" + }, + { + num: NumberInt("3"), + value: "46.62" + }, + { + num: NumberInt("4"), + value: "38.96" + }, + { + num: NumberInt("5"), + value: "43.78" + }, + { + num: NumberInt("6"), + value: "29.66" + }, + { + num: NumberInt("7"), + value: "39.76" + }, + { + num: NumberInt("8"), + value: "42.26" + }, + { + num: NumberInt("9"), + value: "39.93" + }, + { + num: NumberInt("10"), + value: "26.39" + }, + { + num: NumberInt("11"), + value: "41.22" + }, + { + num: NumberInt("12"), + value: "23.40" + }, + { + num: NumberInt("13"), + value: "38.28" + }, + { + num: NumberInt("14"), + value: "3.70" + }, + { + num: NumberInt("15"), + value: "39.92" + }, + { + num: NumberInt("16"), + value: "23.76" + }, + { + num: NumberInt("17"), + value: "23.76" + }, + { + num: NumberInt("18"), + value: "36.17" + }, + { + num: NumberInt("19"), + value: "31.94" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para28_text", + desc: "", + relativeXpath: "/td[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "123.95" + }, + { + num: NumberInt("1"), + value: "23.30" + }, + { + num: NumberInt("2"), + value: "83.47" + }, + { + num: NumberInt("3"), + value: "119.92" + }, + { + num: NumberInt("4"), + value: "92.75" + }, + { + num: NumberInt("5"), + value: "84.82" + }, + { + num: NumberInt("6"), + value: "102.01" + }, + { + num: NumberInt("7"), + value: "115.63" + }, + { + num: NumberInt("8"), + value: "85.14" + }, + { + num: NumberInt("9"), + value: "96.41" + }, + { + num: NumberInt("10"), + value: "99.91" + }, + { + num: NumberInt("11"), + value: "83.26" + }, + { + num: NumberInt("12"), + value: "121.69" + }, + { + num: NumberInt("13"), + value: "75.09" + }, + { + num: NumberInt("14"), + value: "126.95" + }, + { + num: NumberInt("15"), + value: "96.37" + }, + { + num: NumberInt("16"), + value: "114.63" + }, + { + num: NumberInt("17"), + value: "114.64" + }, + { + num: NumberInt("18"), + value: "77.51" + }, + { + num: NumberInt("19"), + value: "92.84" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para29_text", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "20" + }, + { + num: NumberInt("1"), + value: "10" + }, + { + num: NumberInt("2"), + value: "15" + }, + { + num: NumberInt("3"), + value: "16" + }, + { + num: NumberInt("4"), + value: "10" + }, + { + num: NumberInt("5"), + value: "18" + }, + { + num: NumberInt("6"), + value: "12" + }, + { + num: NumberInt("7"), + value: "14" + }, + { + num: NumberInt("8"), + value: "10" + }, + { + num: NumberInt("9"), + value: "11" + }, + { + num: NumberInt("10"), + value: "10" + }, + { + num: NumberInt("11"), + value: "10" + }, + { + num: NumberInt("12"), + value: "29" + }, + { + num: NumberInt("13"), + value: "122" + }, + { + num: NumberInt("14"), + value: "20" + }, + { + num: NumberInt("15"), + value: "11" + }, + { + num: NumberInt("16"), + value: "10" + }, + { + num: NumberInt("17"), + value: "11" + }, + { + num: NumberInt("18"), + value: "85" + }, + { + num: NumberInt("19"), + value: "10" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para30_linktext", + desc: "", + relativeXpath: "/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "菲律宾" + }, + { + num: NumberInt("1"), + value: "罗马尼亚" + }, + { + num: NumberInt("2"), + value: "新疆阿克苏地区库车市" + }, + { + num: NumberInt("3"), + value: "内蒙古锡林郭勒盟东乌珠穆沁旗" + }, + { + num: NumberInt("4"), + value: "青海海西州茫崖市" + }, + { + num: NumberInt("5"), + value: "新疆塔城地区乌苏市" + }, + { + num: NumberInt("6"), + value: "四川甘孜州泸定县" + }, + { + num: NumberInt("7"), + value: "北京房山区" + }, + { + num: NumberInt("8"), + value: "新疆巴音郭楞州轮台县" + }, + { + num: NumberInt("9"), + value: "甘肃酒泉市瓜州县" + }, + { + num: NumberInt("10"), + value: "云南大理州剑川县" + }, + { + num: NumberInt("11"), + value: "新疆阿克苏地区库车市" + }, + { + num: NumberInt("12"), + value: "台湾台东县海域" + }, + { + num: NumberInt("13"), + value: "新疆克孜勒苏州阿克陶县" + }, + { + num: NumberInt("14"), + value: "印尼塔劳群岛" + }, + { + num: NumberInt("15"), + value: "甘肃酒泉市瓜州县" + }, + { + num: NumberInt("16"), + value: "广东河源市源城区(有感)" + }, + { + num: NumberInt("17"), + value: "广东河源市源城区" + }, + { + num: NumberInt("18"), + value: "新疆喀什地区叶城县" + }, + { + num: NumberInt("19"), + value: "西藏那曲市比如县" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para31_linkAddress", + desc: "", + relativeXpath: "/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://news.ceic.ac.cn/CC20230216021009.html" + }, + { + num: NumberInt("1"), + value: "https://news.ceic.ac.cn/CC20230214211651.html" + }, + { + num: NumberInt("2"), + value: "https://news.ceic.ac.cn/CD20230214144016.html" + }, + { + num: NumberInt("3"), + value: "https://news.ceic.ac.cn/CD20230214033510.html" + }, + { + num: NumberInt("4"), + value: "https://news.ceic.ac.cn/CC20230214023849.html" + }, + { + num: NumberInt("5"), + value: "https://news.ceic.ac.cn/CD20230213183848.html" + }, + { + num: NumberInt("6"), + value: "https://news.ceic.ac.cn/CD20230213012336.html" + }, + { + num: NumberInt("7"), + value: "https://news.ceic.ac.cn/CD20230212164224.html" + }, + { + num: NumberInt("8"), + value: "https://news.ceic.ac.cn/CD20230212113728.html" + }, + { + num: NumberInt("9"), + value: "https://news.ceic.ac.cn/CD20230212082746.html" + }, + { + num: NumberInt("10"), + value: "https://news.ceic.ac.cn/CD20230212003204.html" + }, + { + num: NumberInt("11"), + value: "https://news.ceic.ac.cn/CD20230211202949.html" + }, + { + num: NumberInt("12"), + value: "https://news.ceic.ac.cn/CD20230211193548.html" + }, + { + num: NumberInt("13"), + value: "https://news.ceic.ac.cn/CD20230211174729.html" + }, + { + num: NumberInt("14"), + value: "https://news.ceic.ac.cn/CC20230211165507.html" + }, + { + num: NumberInt("15"), + value: "https://news.ceic.ac.cn/CD20230211143954.html" + }, + { + num: NumberInt("16"), + value: "https://news.ceic.ac.cn/CD20230211143530.html" + }, + { + num: NumberInt("17"), + value: "https://news.ceic.ac.cn/CC20230211104143.html" + }, + { + num: NumberInt("18"), + value: "https://news.ceic.ac.cn/CD20230210153027.html" + }, + { + num: NumberInt("19"), + value: "https://news.ceic.ac.cn/CD20230210000631.html" + } + ], + default: "" + } + ], + loopType: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("18"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击详情页面", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"cid\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("7"), + index: NumberInt("19"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("20") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("20"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "存储详情页具体内容", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para32_text", + desc: "", + relativeXpath: "/th", + exampleValues: [ + { + num: NumberInt("0"), + value: "发震时刻:" + }, + { + num: NumberInt("1"), + value: "纬度:" + }, + { + num: NumberInt("2"), + value: "经度:" + }, + { + num: NumberInt("3"), + value: "深度:" + }, + { + num: NumberInt("4"), + value: "震级:" + }, + { + num: NumberInt("5"), + value: "参考位置:" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para33_text", + desc: "", + relativeXpath: "/td[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2023-02-1602:10:08" + }, + { + num: NumberInt("1"), + value: "12.50°" + }, + { + num: NumberInt("2"), + value: "123.95°" + }, + { + num: NumberInt("3"), + value: "20千米" + }, + { + num: NumberInt("4"), + value: "6.1" + }, + { + num: NumberInt("5"), + value: "菲律宾" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "打开网页", + value: "http://www.ceic.ac.cn/history", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "http://www.ceic.ac.cn/history" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "输入文本", + nodeId: NumberInt("7"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "2", + value: "2" + } + ], + links: "http://www.ceic.ac.cn/history", + name: "地震局新的测试", + outputParameters: [ + { + id: NumberInt("0"), + name: "para25_text", + desc: "", + type: "string", + exampleValue: "6.1" + }, + { + id: NumberInt("1"), + name: "para26_text", + desc: "", + type: "string", + exampleValue: "2023-02-1602:10:08" + }, + { + id: NumberInt("2"), + name: "para27_text", + desc: "", + type: "string", + exampleValue: "12.50" + }, + { + id: NumberInt("3"), + name: "para28_text", + desc: "", + type: "string", + exampleValue: "123.95" + }, + { + id: NumberInt("4"), + name: "para29_text", + desc: "", + type: "string", + exampleValue: "20" + }, + { + id: NumberInt("5"), + name: "para30_linktext", + desc: "", + type: "string", + exampleValue: "菲律宾" + }, + { + id: NumberInt("6"), + name: "para31_linkAddress", + desc: "", + type: "string", + exampleValue: "https://news.ceic.ac.cn/CC20230216021009.html" + }, + { + id: NumberInt("7"), + name: "para32_text", + desc: "", + type: "string", + exampleValue: "发震时刻:" + }, + { + id: NumberInt("8"), + name: "para33_text", + desc: "", + type: "string", + exampleValue: "2023-02-1602:10:08" + } + ], + url: "http://www.ceic.ac.cn/history" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63ee0e64869cb52a8a8f6ed5"), + containJudge: false, + desc: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("10") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "0", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Loop", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("6"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("10"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("12"), + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("11"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("12"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("14"), + NumberInt("15") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("4"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("4"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【基本案情】" + }, + { + num: NumberInt("1"), + value: "  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。" + }, + { + num: NumberInt("2"), + value: "  【裁判结果】" + }, + { + num: NumberInt("3"), + value: "  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。" + }, + { + num: NumberInt("4"), + value: "  【典型意义】" + }, + { + num: NumberInt("5"), + value: "  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。" + }, + { + num: NumberInt("1"), + value: "  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。" + }, + { + num: NumberInt("2"), + value: "  【裁判结果】" + }, + { + num: NumberInt("3"), + value: "  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。" + }, + { + num: NumberInt("4"), + value: "  【典型意义】" + }, + { + num: NumberInt("5"), + value: "  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【基本案情】" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("7"), + index: NumberInt("14"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("8"), + index: NumberInt("15"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("16"), + NumberInt("17") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("4"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[1]/div[4]/p", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("9"), + index: NumberInt("16"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("4"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【基本案情】" + }, + { + num: NumberInt("1"), + value: "  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。" + }, + { + num: NumberInt("2"), + value: "  【裁判结果】" + }, + { + num: NumberInt("3"), + value: "  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。" + }, + { + num: NumberInt("4"), + value: "  【典型意义】" + }, + { + num: NumberInt("5"), + value: "  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。" + }, + { + num: NumberInt("1"), + value: "  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。" + }, + { + num: NumberInt("2"), + value: "  【裁判结果】" + }, + { + num: NumberInt("3"), + value: "  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。" + }, + { + num: NumberInt("4"), + value: "  【典型意义】" + }, + { + num: NumberInt("5"), + value: "  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para3_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "  【基本案情】" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("10"), + index: NumberInt("17"), + parentId: NumberInt("8"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("18") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("11"), + index: NumberInt("18"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("2"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("10"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + }, + { + id: NumberInt("3"), + name: "loopTimes_Loop_3", + nodeId: NumberInt("17"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法网自测", + outputParameters: [ + { + id: NumberInt("0"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "  【基本案情】" + } + ], + url: "chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63ef19ebca6c77f85032efad"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para1_linktext", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + }, + { + num: NumberInt("1"), + value: "灵宝豫翔水产养殖有限公司诉三门峡市城乡一体化示范区管理委员会、灵宝市大王镇人民.." + }, + { + num: NumberInt("2"), + value: "碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案" + }, + { + num: NumberInt("3"), + value: "新乡市生态环境局与封丘县龙润精细化工有限公司生态环境损害赔偿司法确认案" + }, + { + num: NumberInt("4"), + value: "黑龙江阳光种业有限公司诉植物新品种复审委员会植物新品种申请驳回复审行政纠纷案" + }, + { + num: NumberInt("5"), + value: "贵州省遵义县巾英铁厂诉贵州省遵义市人民政府行政征收补偿案" + }, + { + num: NumberInt("6"), + value: "王某某诉云南省保山市自然资源和规划局限期拆除决定及云南省保山市人民政府行政复议案" + }, + { + num: NumberInt("7"), + value: "邹某某等17人诉重庆绿岛新区管理委员会行政协议五案" + }, + { + num: NumberInt("8"), + value: "旬阳县润农房地产开发有限公司诉陕西省旬阳县住房和城乡建设局行政行为违法及行政赔.." + }, + { + num: NumberInt("9"), + value: "彭某某等40人诉福建省福安市人民政府等四单位强制拆除行为案" + }, + { + num: NumberInt("10"), + value: "发得顺实业(深圳)有限公司诉广东省佛山市禅城区人民政府房屋征收补偿决定及广东省.." + }, + { + num: NumberInt("11"), + value: "衢州金宏建设工程有限公司诉浙江省衢州市社会保险事业管理局行政给付案" + }, + { + num: NumberInt("12"), + value: "沈某某诉浙江省宁波市奉化区综合行政执法局政府信息公开案" + }, + { + num: NumberInt("13"), + value: "湖北省京山昌盛园林有限公司诉湖北省京山市人民政府、湖北省京山市新市镇人民政府行.." + }, + { + num: NumberInt("14"), + value: "蔡某某诉山东省泗水县人民政府土地征收案" + }, + { + num: NumberInt("15"), + value: "毕某某诉内蒙古自治区宁城县市场监督管理局行政处罚案" + }, + { + num: NumberInt("16"), + value: "王某某诉吉林省白山市人力资源和社会保障局行政确认案" + }, + { + num: NumberInt("17"), + value: "江苏中厦集团有限公司诉黑龙江省大庆市让胡路区人民政府住房和城乡建设局行政处罚案;" + }, + { + num: NumberInt("18"), + value: "北京富宁经贸有限责任公司宁夏特产连锁超市诉北京市东城区市场监督管理局行政处罚决.." + }, + { + num: NumberInt("19"), + value: "海口博泰隆房地产开发有限公司诉海口市人民政府有偿收回国有土地使用权案" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para2_linkAddress", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397580.shtml" + }, + { + num: NumberInt("1"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397563.shtml" + }, + { + num: NumberInt("2"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397553.shtml" + }, + { + num: NumberInt("3"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397536.shtml" + }, + { + num: NumberInt("4"), + value: "https://www.chinacourt.org/article/detail/2021/09/id/6250921.shtml" + }, + { + num: NumberInt("5"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174681.shtml" + }, + { + num: NumberInt("6"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174680.shtml" + }, + { + num: NumberInt("7"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174679.shtml" + }, + { + num: NumberInt("8"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174677.shtml" + }, + { + num: NumberInt("9"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174673.shtml" + }, + { + num: NumberInt("10"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174671.shtml" + }, + { + num: NumberInt("11"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174669.shtml" + }, + { + num: NumberInt("12"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174668.shtml" + }, + { + num: NumberInt("13"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174662.shtml" + }, + { + num: NumberInt("14"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174661.shtml" + }, + { + num: NumberInt("15"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174658.shtml" + }, + { + num: NumberInt("16"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174655.shtml" + }, + { + num: NumberInt("17"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174654.shtml" + }, + { + num: NumberInt("18"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174651.shtml" + }, + { + num: NumberInt("19"), + value: "https://www.chinacourt.org/article/detail/2020/07/id/5378776.shtml" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para3_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案[2021-11-25]" + }, + { + num: NumberInt("1"), + value: "灵宝豫翔水产养殖有限公司诉三门峡市城乡一体化示范区管理委员会、灵宝市大王镇人民..[2021-11-25]" + }, + { + num: NumberInt("2"), + value: "碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案[2021-11-25]" + }, + { + num: NumberInt("3"), + value: "新乡市生态环境局与封丘县龙润精细化工有限公司生态环境损害赔偿司法确认案[2021-11-25]" + }, + { + num: NumberInt("4"), + value: "黑龙江阳光种业有限公司诉植物新品种复审委员会植物新品种申请驳回复审行政纠纷案[2021-09-07]" + }, + { + num: NumberInt("5"), + value: "贵州省遵义县巾英铁厂诉贵州省遵义市人民政府行政征收补偿案[2021-07-29]" + }, + { + num: NumberInt("6"), + value: "王某某诉云南省保山市自然资源和规划局限期拆除决定及云南省保山市人民政府行政复议案[2021-07-29]" + }, + { + num: NumberInt("7"), + value: "邹某某等17人诉重庆绿岛新区管理委员会行政协议五案[2021-07-29]" + }, + { + num: NumberInt("8"), + value: "旬阳县润农房地产开发有限公司诉陕西省旬阳县住房和城乡建设局行政行为违法及行政赔..[2021-07-29]" + }, + { + num: NumberInt("9"), + value: "彭某某等40人诉福建省福安市人民政府等四单位强制拆除行为案[2021-07-29]" + }, + { + num: NumberInt("10"), + value: "发得顺实业(深圳)有限公司诉广东省佛山市禅城区人民政府房屋征收补偿决定及广东省..[2021-07-29]" + }, + { + num: NumberInt("11"), + value: "衢州金宏建设工程有限公司诉浙江省衢州市社会保险事业管理局行政给付案[2021-07-29]" + }, + { + num: NumberInt("12"), + value: "沈某某诉浙江省宁波市奉化区综合行政执法局政府信息公开案[2021-07-29]" + }, + { + num: NumberInt("13"), + value: "湖北省京山昌盛园林有限公司诉湖北省京山市人民政府、湖北省京山市新市镇人民政府行..[2021-07-29]" + }, + { + num: NumberInt("14"), + value: "蔡某某诉山东省泗水县人民政府土地征收案[2021-07-29]" + }, + { + num: NumberInt("15"), + value: "毕某某诉内蒙古自治区宁城县市场监督管理局行政处罚案[2021-07-29]" + }, + { + num: NumberInt("16"), + value: "王某某诉吉林省白山市人力资源和社会保障局行政确认案[2021-07-29]" + }, + { + num: NumberInt("17"), + value: "江苏中厦集团有限公司诉黑龙江省大庆市让胡路区人民政府住房和城乡建设局行政处罚案;[2021-07-29]" + }, + { + num: NumberInt("18"), + value: "北京富宁经贸有限责任公司宁夏特产连锁超市诉北京市东城区市场监督管理局行政处罚决..[2021-07-29]" + }, + { + num: NumberInt("19"), + value: "海口博泰隆房地产开发有限公司诉海口市人民政府有偿收回国有土地使用权案[2020-07-27]" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("8"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("9"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para4_linktext", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + }, + { + num: NumberInt("1"), + value: "灵宝豫翔水产养殖有限公司诉三门峡市城乡一体化示范区管理委员会、灵宝市大王镇人民.." + }, + { + num: NumberInt("2"), + value: "碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案" + }, + { + num: NumberInt("3"), + value: "新乡市生态环境局与封丘县龙润精细化工有限公司生态环境损害赔偿司法确认案" + }, + { + num: NumberInt("4"), + value: "黑龙江阳光种业有限公司诉植物新品种复审委员会植物新品种申请驳回复审行政纠纷案" + }, + { + num: NumberInt("5"), + value: "贵州省遵义县巾英铁厂诉贵州省遵义市人民政府行政征收补偿案" + }, + { + num: NumberInt("6"), + value: "王某某诉云南省保山市自然资源和规划局限期拆除决定及云南省保山市人民政府行政复议案" + }, + { + num: NumberInt("7"), + value: "邹某某等17人诉重庆绿岛新区管理委员会行政协议五案" + }, + { + num: NumberInt("8"), + value: "旬阳县润农房地产开发有限公司诉陕西省旬阳县住房和城乡建设局行政行为违法及行政赔.." + }, + { + num: NumberInt("9"), + value: "彭某某等40人诉福建省福安市人民政府等四单位强制拆除行为案" + }, + { + num: NumberInt("10"), + value: "发得顺实业(深圳)有限公司诉广东省佛山市禅城区人民政府房屋征收补偿决定及广东省.." + }, + { + num: NumberInt("11"), + value: "衢州金宏建设工程有限公司诉浙江省衢州市社会保险事业管理局行政给付案" + }, + { + num: NumberInt("12"), + value: "沈某某诉浙江省宁波市奉化区综合行政执法局政府信息公开案" + }, + { + num: NumberInt("13"), + value: "湖北省京山昌盛园林有限公司诉湖北省京山市人民政府、湖北省京山市新市镇人民政府行.." + }, + { + num: NumberInt("14"), + value: "蔡某某诉山东省泗水县人民政府土地征收案" + }, + { + num: NumberInt("15"), + value: "毕某某诉内蒙古自治区宁城县市场监督管理局行政处罚案" + }, + { + num: NumberInt("16"), + value: "王某某诉吉林省白山市人力资源和社会保障局行政确认案" + }, + { + num: NumberInt("17"), + value: "江苏中厦集团有限公司诉黑龙江省大庆市让胡路区人民政府住房和城乡建设局行政处罚案;" + }, + { + num: NumberInt("18"), + value: "北京富宁经贸有限责任公司宁夏特产连锁超市诉北京市东城区市场监督管理局行政处罚决.." + }, + { + num: NumberInt("19"), + value: "海口博泰隆房地产开发有限公司诉海口市人民政府有偿收回国有土地使用权案" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para5_linkAddress", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397580.shtml" + }, + { + num: NumberInt("1"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397563.shtml" + }, + { + num: NumberInt("2"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397553.shtml" + }, + { + num: NumberInt("3"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397536.shtml" + }, + { + num: NumberInt("4"), + value: "https://www.chinacourt.org/article/detail/2021/09/id/6250921.shtml" + }, + { + num: NumberInt("5"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174681.shtml" + }, + { + num: NumberInt("6"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174680.shtml" + }, + { + num: NumberInt("7"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174679.shtml" + }, + { + num: NumberInt("8"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174677.shtml" + }, + { + num: NumberInt("9"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174673.shtml" + }, + { + num: NumberInt("10"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174671.shtml" + }, + { + num: NumberInt("11"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174669.shtml" + }, + { + num: NumberInt("12"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174668.shtml" + }, + { + num: NumberInt("13"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174662.shtml" + }, + { + num: NumberInt("14"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174661.shtml" + }, + { + num: NumberInt("15"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174658.shtml" + }, + { + num: NumberInt("16"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174655.shtml" + }, + { + num: NumberInt("17"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174654.shtml" + }, + { + num: NumberInt("18"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174651.shtml" + }, + { + num: NumberInt("19"), + value: "https://www.chinacourt.org/article/detail/2020/07/id/5378776.shtml" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法网大分类测试", + outputParameters: [ + { + id: NumberInt("0"), + name: "para4_linktext", + desc: "", + type: "string", + exampleValue: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + }, + { + id: NumberInt("1"), + name: "para5_linkAddress", + desc: "", + type: "string", + exampleValue: "https://www.chinacourt.org/article/detail/2021/11/id/6397580.shtml" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63ef274fa496190e317dc61c"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml" + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml", + name: "中国法网翻页测试", + outputParameters: [ ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA/page/1.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63ef2dddca6c77f85032efaf"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3"), + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "0", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案[2021-11-25]" + }, + { + num: NumberInt("1"), + value: "灵宝豫翔水产养殖有限公司诉三门峡市城乡一体化示范区管理委员会、灵宝市大王镇人民..[2021-11-25]" + }, + { + num: NumberInt("2"), + value: "碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案[2021-11-25]" + }, + { + num: NumberInt("3"), + value: "新乡市生态环境局与封丘县龙润精细化工有限公司生态环境损害赔偿司法确认案[2021-11-25]" + }, + { + num: NumberInt("4"), + value: "黑龙江阳光种业有限公司诉植物新品种复审委员会植物新品种申请驳回复审行政纠纷案[2021-09-07]" + }, + { + num: NumberInt("5"), + value: "贵州省遵义县巾英铁厂诉贵州省遵义市人民政府行政征收补偿案[2021-07-29]" + }, + { + num: NumberInt("6"), + value: "王某某诉云南省保山市自然资源和规划局限期拆除决定及云南省保山市人民政府行政复议案[2021-07-29]" + }, + { + num: NumberInt("7"), + value: "邹某某等17人诉重庆绿岛新区管理委员会行政协议五案[2021-07-29]" + }, + { + num: NumberInt("8"), + value: "旬阳县润农房地产开发有限公司诉陕西省旬阳县住房和城乡建设局行政行为违法及行政赔..[2021-07-29]" + }, + { + num: NumberInt("9"), + value: "彭某某等40人诉福建省福安市人民政府等四单位强制拆除行为案[2021-07-29]" + }, + { + num: NumberInt("10"), + value: "发得顺实业(深圳)有限公司诉广东省佛山市禅城区人民政府房屋征收补偿决定及广东省..[2021-07-29]" + }, + { + num: NumberInt("11"), + value: "衢州金宏建设工程有限公司诉浙江省衢州市社会保险事业管理局行政给付案[2021-07-29]" + }, + { + num: NumberInt("12"), + value: "沈某某诉浙江省宁波市奉化区综合行政执法局政府信息公开案[2021-07-29]" + }, + { + num: NumberInt("13"), + value: "湖北省京山昌盛园林有限公司诉湖北省京山市人民政府、湖北省京山市新市镇人民政府行..[2021-07-29]" + }, + { + num: NumberInt("14"), + value: "蔡某某诉山东省泗水县人民政府土地征收案[2021-07-29]" + }, + { + num: NumberInt("15"), + value: "毕某某诉内蒙古自治区宁城县市场监督管理局行政处罚案[2021-07-29]" + }, + { + num: NumberInt("16"), + value: "王某某诉吉林省白山市人力资源和社会保障局行政确认案[2021-07-29]" + }, + { + num: NumberInt("17"), + value: "江苏中厦集团有限公司诉黑龙江省大庆市让胡路区人民政府住房和城乡建设局行政处罚案;[2021-07-29]" + }, + { + num: NumberInt("18"), + value: "北京富宁经贸有限责任公司宁夏特产连锁超市诉北京市东城区市场监督管理局行政处罚决..[2021-07-29]" + }, + { + num: NumberInt("19"), + value: "海口博泰隆房地产开发有限公司诉海口市人民政府有偿收回国有土地使用权案[2020-07-27]" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("4"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法律网翻页", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案[2021-11-25]" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f2b347a496190e317dc624"), + containJudge: false, + desc: "http://aiwork.huilan.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4"), + NumberInt("5") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "http://aiwork.huilan.com", + links: "http://aiwork.huilan.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"el-form\")]/div[1]/div[1]/div[1]/input[1]", + wait: NumberInt("0"), + value: "duyp" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"el-input--small\")]/input[1]", + wait: NumberInt("0"), + value: "wozaijia3456" + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"el-button\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("10"), + NumberInt("9") + ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div/div[2]/div[2]/div[3]/div/div[1]/div[2]/div/div/div/div[1]/div/div/div/div[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"tab-2022\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "/td[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "一月" + }, + { + num: NumberInt("1"), + value: "二月" + }, + { + num: NumberInt("2"), + value: "三月" + }, + { + num: NumberInt("3"), + value: "四月" + }, + { + num: NumberInt("4"), + value: "五月" + }, + { + num: NumberInt("5"), + value: "六月" + }, + { + num: NumberInt("6"), + value: "七月" + }, + { + num: NumberInt("7"), + value: "八月" + }, + { + num: NumberInt("8"), + value: "九月" + }, + { + num: NumberInt("9"), + value: "十月" + }, + { + num: NumberInt("10"), + value: "十一月" + }, + { + num: NumberInt("11"), + value: "十二月" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para2_text", + desc: "", + relativeXpath: "/td[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "张荣" + }, + { + num: NumberInt("1"), + value: "孙金宝" + }, + { + num: NumberInt("2"), + value: "孙金宝" + }, + { + num: NumberInt("3"), + value: "张晓东" + }, + { + num: NumberInt("4"), + value: "孙金宝" + }, + { + num: NumberInt("5"), + value: "吴金妹" + }, + { + num: NumberInt("6"), + value: "孙金宝" + }, + { + num: NumberInt("7"), + value: "周志伟" + }, + { + num: NumberInt("8"), + value: "张荣" + }, + { + num: NumberInt("9"), + value: "范殿炜" + }, + { + num: NumberInt("10"), + value: "孙金宝" + }, + { + num: NumberInt("11"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para3_text", + desc: "", + relativeXpath: "/td[3]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "张荣" + }, + { + num: NumberInt("1"), + value: "孙金宝" + }, + { + num: NumberInt("2"), + value: "邵亚瑞" + }, + { + num: NumberInt("3"), + value: "张晓东" + }, + { + num: NumberInt("4"), + value: "杜丹丹" + }, + { + num: NumberInt("5"), + value: "周志伟" + }, + { + num: NumberInt("6"), + value: "蔡号" + }, + { + num: NumberInt("7"), + value: "张晓东" + }, + { + num: NumberInt("8"), + value: "张荣" + }, + { + num: NumberInt("9"), + value: "张晓东" + }, + { + num: NumberInt("10"), + value: "张晓东" + }, + { + num: NumberInt("11"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para4_text", + desc: "", + relativeXpath: "/td[4]/div[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "任慧慧,戴武宁" + }, + { + num: NumberInt("2"), + value: "秦曙野" + }, + { + num: NumberInt("3"), + value: "任慧慧" + }, + { + num: NumberInt("4"), + value: "杨波" + }, + { + num: NumberInt("5"), + value: "丁鹏" + }, + { + num: NumberInt("6"), + value: "" + }, + { + num: NumberInt("7"), + value: "徐志勇" + }, + { + num: NumberInt("8"), + value: "刘会宾,王涛" + }, + { + num: NumberInt("9"), + value: "丁慧珍" + }, + { + num: NumberInt("10"), + value: "王志飞" + }, + { + num: NumberInt("11"), + value: "乔瑞晓" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("7"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("11"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para5_text", + desc: "", + relativeXpath: "/td[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "一月" + }, + { + num: NumberInt("1"), + value: "二月" + }, + { + num: NumberInt("2"), + value: "三月" + }, + { + num: NumberInt("3"), + value: "四月" + }, + { + num: NumberInt("4"), + value: "五月" + }, + { + num: NumberInt("5"), + value: "六月" + }, + { + num: NumberInt("6"), + value: "七月" + }, + { + num: NumberInt("7"), + value: "八月" + }, + { + num: NumberInt("8"), + value: "九月" + }, + { + num: NumberInt("9"), + value: "十月" + }, + { + num: NumberInt("10"), + value: "十一月" + }, + { + num: NumberInt("11"), + value: "十二月" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para6_text", + desc: "", + relativeXpath: "/td[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "张荣" + }, + { + num: NumberInt("1"), + value: "孙金宝" + }, + { + num: NumberInt("2"), + value: "孙金宝" + }, + { + num: NumberInt("3"), + value: "张晓东" + }, + { + num: NumberInt("4"), + value: "孙金宝" + }, + { + num: NumberInt("5"), + value: "吴金妹" + }, + { + num: NumberInt("6"), + value: "孙金宝" + }, + { + num: NumberInt("7"), + value: "周志伟" + }, + { + num: NumberInt("8"), + value: "张荣" + }, + { + num: NumberInt("9"), + value: "范殿炜" + }, + { + num: NumberInt("10"), + value: "孙金宝" + }, + { + num: NumberInt("11"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para7_text", + desc: "", + relativeXpath: "/td[3]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "张荣" + }, + { + num: NumberInt("1"), + value: "孙金宝" + }, + { + num: NumberInt("2"), + value: "邵亚瑞" + }, + { + num: NumberInt("3"), + value: "张晓东" + }, + { + num: NumberInt("4"), + value: "杜丹丹" + }, + { + num: NumberInt("5"), + value: "周志伟" + }, + { + num: NumberInt("6"), + value: "蔡号" + }, + { + num: NumberInt("7"), + value: "张晓东" + }, + { + num: NumberInt("8"), + value: "张荣" + }, + { + num: NumberInt("9"), + value: "张晓东" + }, + { + num: NumberInt("10"), + value: "张晓东" + }, + { + num: NumberInt("11"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para8_text", + desc: "", + relativeXpath: "/td[4]/div[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "任慧慧,戴武宁" + }, + { + num: NumberInt("2"), + value: "秦曙野" + }, + { + num: NumberInt("3"), + value: "任慧慧" + }, + { + num: NumberInt("4"), + value: "杨波" + }, + { + num: NumberInt("5"), + value: "丁鹏" + }, + { + num: NumberInt("6"), + value: "" + }, + { + num: NumberInt("7"), + value: "徐志勇" + }, + { + num: NumberInt("8"), + value: "刘会宾,王涛" + }, + { + num: NumberInt("9"), + value: "丁慧珍" + }, + { + num: NumberInt("10"), + value: "王志飞" + }, + { + num: NumberInt("11"), + value: "乔瑞晓" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "http://aiwork.huilan.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "http://aiwork.huilan.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "duyp", + value: "duyp" + }, + { + id: NumberInt("2"), + name: "inputText_2", + nodeName: "Input Text", + nodeId: NumberInt("3"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "wozaijia3456", + value: "wozaijia3456" + } + ], + links: "http://aiwork.huilan.com", + name: "huilan", + outputParameters: [ + { + id: NumberInt("0"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "一月" + }, + { + id: NumberInt("1"), + name: "para6_text", + desc: "", + type: "string", + exampleValue: "张荣" + }, + { + id: NumberInt("2"), + name: "para7_text", + desc: "", + type: "string", + exampleValue: "张荣" + }, + { + id: NumberInt("3"), + name: "para8_text", + desc: "", + type: "string", + exampleValue: "任慧慧,戴武宁" + } + ], + url: "http://aiwork.huilan.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f2db56a496190e317dc626"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3"), + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5"), + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \n \n \n \t\t首页 >审判 > 典型案例\n \n \n \n 石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案\n \n \n\t\t\t \n 2021-11-25 15:50:06 | 来源:最高人民法院 \n \n \n \n \n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 \n \n\t\t\t\n\t\t\t\n\t\t\t\n \n\t\t\t\t\n 责任编辑:于子平\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n \n \n \t\n \t相关新闻:\n \n \t碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案子女不履行赡养义务可作为公益诉讼立案受理吗?潮州饶平法院宣判一起刑附民公益诉讼案\n中国生物多样性保护与绿色发展基金会诉秦皇岛方圆包装玻璃有限公司大气环境责任纠...岳阳法检两院环境公益诉讼座谈会在君山召开检方规范个人信息保护公益诉讼案件办理重庆江津法院一审宣判一起涉古树公益诉讼案 \n \n \n \n \n \n \n \n \n\t\t\t\t\t\t“黑物流”刘晓强等人敲..\n\t\t\t\t\t\t程海明等人敲诈勒索企业..\n\t\t\t\t\t\t华士中等人火车站敲诈勒..\n\t\t\t\t\t\t王维刚等人电子市场“软..\n\t\t\t\t\t\t房屋“黑中介”刘康等人..\n\t\t\t\t\t\t陈海涛等人组织、领导、.. \n \n \n \n \n \n \t\n\n \t要闻\n \n \t\n \t\n \t周强主持最高人民法院党组理论学习中心组集体学习研讨时强调 ... \t\n \n   12月7日上午,最高人民法院党组理论学习中心组就网络舆论传播工作开展集体学习研讨,最高人民法院党组书记、院长周强主持...  【详情】 \n \n 新时代推动法治进程十大案件启动网络投票中国应用法学研究所招收博士后研究人员公告最高法知识产权法庭改进文书样式推动技...最高人民法院民二庭破产审判研究中心(...工信部下架106款侵害用户权益APP \n \n\n \n \n \t庭审直播\n \n \n \n \n\n \n \n 点击排行\n \n \n 上海一中院公开宣判被告人顾国平等集资诈骗案新时代推动法治进程十大案件启动网络投票曾经的法官党建赋能“三新”引领法院工作高质量发展王某某诉某康复器具公司侵权责任纠纷案习近平出席全国宗教工作会议并发表重要讲话杞县法院开展“12.4”国家宪法日宣传活动遗产继承,有“典”护着尽孝者山东警方通报被拐儿童孙卓、符建涛户籍初查情况审理人身损害赔偿案件适用法律若干问题的解释(征...\t\t\t\t\t \n \n \n\n \n \n 图文直播\n \n \n\t\t\t\t\t\t最高法 最高检 公安部 司法部 《关于加强减刑、假释案件实质化审理的意见》新闻发布会\n\t\t\t\t\t\t生物多样性保护专题指导性案例暨“新时代推动法治进程十大案件——2021年度”宣传活动启动新闻发布会\n\t\t\t\t\t\t残疾人权益保护十大典型案例新闻发布会\n\t\t\t\t\t\t全国法院整治年底不立案新闻发布会\n\t\t\t\t\t\t执行领域突出问题集中整治阶段性进展暨全国法院执行案款集中发放日活动新闻发布会 \n \n \n " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("6"), + index: NumberInt("7"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 " + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("2"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("4"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法律网站测试1", + outputParameters: [ + { + id: NumberInt("0"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + }, + { + id: NumberInt("1"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "\n \t   【基本案情】  2006 年以来,王晓红等在黄河河道上建设养殖场。石嘴山市惠农区人民检察院(以下简称惠农区检察院)调查发现,上述养殖场的建筑未经相关行政部门审批,属于在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,严重影响黄河行洪、防洪安全;石嘴山市惠农区农业农村和水务局(以下简称惠农区农水局)对上述情况存在未履行监管职责的问题。惠农区检察院遂于2019年7月向惠农区农水局发出检察建议。2019年11月惠农区检察院提起环境行政公益诉讼,请求确认惠农区农水局未依法履行河道监管职责的行为违法,判令惠农区农水局依法履行监管职责,及时恢复土地原状。2019年11月26日,惠农区检察院收到惠农区农水局回复并经实地查看后,认为惠农区农水局已经履行了对涉案养殖场的违法建筑设施拆除的法定监管职责,遂撤回了该项诉讼请求,保留确认违法的诉讼请求。  【裁判结果】  宁夏回族自治区石嘴山市大武口区人民法院作出判决:确认被告惠农区农水局未依法履行责令王晓红等拆除在惠农区黄河河道管理范围内的养殖场违法建筑的河道监管职责的行为违法。一审判决后,双方均未提起上诉。  【典型意义】  本案系违法占用黄河河道建设生产场所及居住房屋引发的行政公益诉讼案件。在河道管理范围内修建阻碍行洪建筑物、构筑物的乱建行为,违反了国家河道管理规定,也严重影响行洪、防洪安全,对黄河两岸居民生活和生产安全造成潜在危害。本案通过行政公益诉讼,人民法院依法确认行政主管机关行为违法,有效促使行政主管机关积极履行法定监管职责,为黄河流域生态保护提供了有力司法支撑。 " + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f30049ca6c77f85032efbe"), + containJudge: false, + desc: "https://aiwork.huilan.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4"), + NumberInt("5") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://aiwork.huilan.com", + links: "https://aiwork.huilan.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"el-form\")]/div[1]/div[1]/div[1]/input[1]", + wait: NumberInt("0"), + value: "duyp" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"el-input--small\")]/input[1]", + wait: NumberInt("0"), + value: "wozaijia3456" + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"el-button\")]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("7") + ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"tab-2022\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("8"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "/td[1]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "一月" + }, + { + num: NumberInt("1"), + value: "二月" + }, + { + num: NumberInt("2"), + value: "三月" + }, + { + num: NumberInt("3"), + value: "四月" + }, + { + num: NumberInt("4"), + value: "五月" + }, + { + num: NumberInt("5"), + value: "六月" + }, + { + num: NumberInt("6"), + value: "七月" + }, + { + num: NumberInt("7"), + value: "八月" + }, + { + num: NumberInt("8"), + value: "九月" + }, + { + num: NumberInt("9"), + value: "十月" + }, + { + num: NumberInt("10"), + value: "十一月" + }, + { + num: NumberInt("11"), + value: "十二月" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para2_text", + desc: "", + relativeXpath: "/td[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "张荣" + }, + { + num: NumberInt("1"), + value: "孙金宝" + }, + { + num: NumberInt("2"), + value: "孙金宝" + }, + { + num: NumberInt("3"), + value: "张晓东" + }, + { + num: NumberInt("4"), + value: "孙金宝" + }, + { + num: NumberInt("5"), + value: "吴金妹" + }, + { + num: NumberInt("6"), + value: "孙金宝" + }, + { + num: NumberInt("7"), + value: "周志伟" + }, + { + num: NumberInt("8"), + value: "张荣" + }, + { + num: NumberInt("9"), + value: "范殿炜" + }, + { + num: NumberInt("10"), + value: "孙金宝" + }, + { + num: NumberInt("11"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para3_text", + desc: "", + relativeXpath: "/td[3]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "张荣" + }, + { + num: NumberInt("1"), + value: "孙金宝" + }, + { + num: NumberInt("2"), + value: "邵亚瑞" + }, + { + num: NumberInt("3"), + value: "张晓东" + }, + { + num: NumberInt("4"), + value: "杜丹丹" + }, + { + num: NumberInt("5"), + value: "周志伟" + }, + { + num: NumberInt("6"), + value: "蔡号" + }, + { + num: NumberInt("7"), + value: "张晓东" + }, + { + num: NumberInt("8"), + value: "张荣" + }, + { + num: NumberInt("9"), + value: "张晓东" + }, + { + num: NumberInt("10"), + value: "张晓东" + }, + { + num: NumberInt("11"), + value: "" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "para4_text", + desc: "", + relativeXpath: "/td[4]/div[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "任慧慧,戴武宁" + }, + { + num: NumberInt("2"), + value: "秦曙野" + }, + { + num: NumberInt("3"), + value: "任慧慧" + }, + { + num: NumberInt("4"), + value: "杨波" + }, + { + num: NumberInt("5"), + value: "丁鹏" + }, + { + num: NumberInt("6"), + value: "" + }, + { + num: NumberInt("7"), + value: "徐志勇" + }, + { + num: NumberInt("8"), + value: "刘会宾,王涛" + }, + { + num: NumberInt("9"), + value: "丁慧珍" + }, + { + num: NumberInt("10"), + value: "王志飞" + }, + { + num: NumberInt("11"), + value: "乔瑞晓" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://aiwork.huilan.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://aiwork.huilan.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "duyp", + value: "duyp" + }, + { + id: NumberInt("2"), + name: "inputText_2", + nodeName: "Input Text", + nodeId: NumberInt("3"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "wozaijia3456", + value: "wozaijia3456" + } + ], + links: "https://aiwork.huilan.com", + name: "汇联网站测试1", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "一月" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "张荣" + }, + { + id: NumberInt("2"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "张荣" + }, + { + id: NumberInt("3"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "任慧慧,戴武宁" + } + ], + url: "https://aiwork.huilan.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f31e00ca6c77f85032efc2"), + containJudge: false, + desc: "https://www.baidu.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.baidu.com", + links: "https://www.baidu.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[5]/div[1]/div[1]/div[3]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para1_linktext", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "0春耕备耕扎实推进" + }, + { + num: NumberInt("1"), + value: "3续写大众冰雪运动新辉煌" + }, + { + num: NumberInt("2"), + value: "1杭州两学校现阳性 15例均为首次感染" + }, + { + num: NumberInt("3"), + value: "4曾对疫情一问三不知的唐主任有新职" + }, + { + num: NumberInt("4"), + value: "2医院回应弄错试管婴儿:没必要计较" + }, + { + num: NumberInt("5"), + value: "5桑姓艺人欠1.5万不还成老赖" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para2_linkAddress", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.baidu.com/s?wd=%E6%98%A5%E8%80%95%E5%A4%87%E8%80%95%E6%89%8E%E5%AE%9E%E6%8E%A8%E8%BF%9B&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("1"), + value: "https://www.baidu.com/s?wd=%E7%BB%AD%E5%86%99%E5%A4%A7%E4%BC%97%E5%86%B0%E9%9B%AA%E8%BF%90%E5%8A%A8%E6%96%B0%E8%BE%89%E7%85%8C&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("2"), + value: "https://www.baidu.com/s?wd=%E6%9D%AD%E5%B7%9E%E4%B8%A4%E5%AD%A6%E6%A0%A1%E7%8E%B0%E9%98%B3%E6%80%A7+15%E4%BE%8B%E5%9D%87%E4%B8%BA%E9%A6%96%E6%AC%A1%E6%84%9F%E6%9F%93&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("3"), + value: "https://www.baidu.com/s?wd=%E6%9B%BE%E5%AF%B9%E7%96%AB%E6%83%85%E4%B8%80%E9%97%AE%E4%B8%89%E4%B8%8D%E7%9F%A5%E7%9A%84%E5%94%90%E4%B8%BB%E4%BB%BB%E6%9C%89%E6%96%B0%E8%81%8C&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("4"), + value: "https://www.baidu.com/s?wd=%E5%8C%BB%E9%99%A2%E5%9B%9E%E5%BA%94%E5%BC%84%E9%94%99%E8%AF%95%E7%AE%A1%E5%A9%B4%E5%84%BF%EF%BC%9A%E6%B2%A1%E5%BF%85%E8%A6%81%E8%AE%A1%E8%BE%83&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("5"), + value: "https://www.baidu.com/s?wd=%E6%A1%91%E5%A7%93%E8%89%BA%E4%BA%BA%E6%AC%A01.5%E4%B8%87%E4%B8%8D%E8%BF%98%E6%88%90%E8%80%81%E8%B5%96&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.baidu.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.baidu.com" + } + ], + links: "https://www.baidu.com", + name: "百度网站测试", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_linktext", + desc: "", + type: "string", + exampleValue: "0春耕备耕扎实推进" + }, + { + id: NumberInt("1"), + name: "para2_linkAddress", + desc: "", + type: "string", + exampleValue: "https://www.baidu.com/s?wd=%E6%98%A5%E8%80%95%E5%A4%87%E8%80%95%E6%89%8E%E5%AE%9E%E6%8E%A8%E8%BF%9B&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + } + ], + url: "https://www.baidu.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f49387a496190e317dc63d"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "最外层点击行政案例", + sequence: [ + NumberInt("4"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[2]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[text()='下一页']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("3"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "点击每一页的主题细节", + sequence: [ + NumberInt("7"), + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18 | 来源:最高人民法院 " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   (一)基本案情  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。  (二)裁判结果  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。  (三)典型意义  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。   " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("8"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   (一)基本案情  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。  (二)裁判结果  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。  (三)典型意义  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。   " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (二)裁判结果" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para9_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (三)典型意义" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para10_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[6]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_循环点击下一页_1", + nodeId: NumberInt("4"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法院爬取测试", + outputParameters: [ + { + id: NumberInt("0"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + }, + { + id: NumberInt("1"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "2020-07-27 16:44:18" + }, + { + id: NumberInt("2"), + name: "para6_text", + desc: "", + type: "string", + exampleValue: "\n \t   (一)基本案情  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。  (二)裁判结果  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。  (三)典型意义  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。   " + }, + { + id: NumberInt("3"), + name: "para7_text", + desc: "", + type: "string", + exampleValue: "  (二)裁判结果" + }, + { + id: NumberInt("4"), + name: "para8_text", + desc: "", + type: "string", + exampleValue: "  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。" + }, + { + id: NumberInt("5"), + name: "para9_text", + desc: "", + type: "string", + exampleValue: "  (三)典型意义" + }, + { + id: NumberInt("6"), + name: "para10_text", + desc: "", + type: "string", + exampleValue: "  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f57bf5a496190e317dc640"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3"), + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"morepage\"]/div[2]/div[1]/div[2]/ul/li/a", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para1_linktext", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + }, + { + num: NumberInt("1"), + value: "灵宝豫翔水产养殖有限公司诉三门峡市城乡一体化示范区管理委员会、灵宝市大王镇人民.." + }, + { + num: NumberInt("2"), + value: "碌曲县人民检察院诉碌曲县水务水电局行政公益诉讼案" + }, + { + num: NumberInt("3"), + value: "新乡市生态环境局与封丘县龙润精细化工有限公司生态环境损害赔偿司法确认案" + }, + { + num: NumberInt("4"), + value: "黑龙江阳光种业有限公司诉植物新品种复审委员会植物新品种申请驳回复审行政纠纷案" + }, + { + num: NumberInt("5"), + value: "贵州省遵义县巾英铁厂诉贵州省遵义市人民政府行政征收补偿案" + }, + { + num: NumberInt("6"), + value: "王某某诉云南省保山市自然资源和规划局限期拆除决定及云南省保山市人民政府行政复议案" + }, + { + num: NumberInt("7"), + value: "邹某某等17人诉重庆绿岛新区管理委员会行政协议五案" + }, + { + num: NumberInt("8"), + value: "旬阳县润农房地产开发有限公司诉陕西省旬阳县住房和城乡建设局行政行为违法及行政赔.." + }, + { + num: NumberInt("9"), + value: "彭某某等40人诉福建省福安市人民政府等四单位强制拆除行为案" + }, + { + num: NumberInt("10"), + value: "发得顺实业(深圳)有限公司诉广东省佛山市禅城区人民政府房屋征收补偿决定及广东省.." + }, + { + num: NumberInt("11"), + value: "衢州金宏建设工程有限公司诉浙江省衢州市社会保险事业管理局行政给付案" + }, + { + num: NumberInt("12"), + value: "沈某某诉浙江省宁波市奉化区综合行政执法局政府信息公开案" + }, + { + num: NumberInt("13"), + value: "湖北省京山昌盛园林有限公司诉湖北省京山市人民政府、湖北省京山市新市镇人民政府行.." + }, + { + num: NumberInt("14"), + value: "蔡某某诉山东省泗水县人民政府土地征收案" + }, + { + num: NumberInt("15"), + value: "毕某某诉内蒙古自治区宁城县市场监督管理局行政处罚案" + }, + { + num: NumberInt("16"), + value: "王某某诉吉林省白山市人力资源和社会保障局行政确认案" + }, + { + num: NumberInt("17"), + value: "江苏中厦集团有限公司诉黑龙江省大庆市让胡路区人民政府住房和城乡建设局行政处罚案;" + }, + { + num: NumberInt("18"), + value: "北京富宁经贸有限责任公司宁夏特产连锁超市诉北京市东城区市场监督管理局行政处罚决.." + }, + { + num: NumberInt("19"), + value: "海口博泰隆房地产开发有限公司诉海口市人民政府有偿收回国有土地使用权案" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para2_linkAddress", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]//p", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397580.shtml" + }, + { + num: NumberInt("1"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397563.shtml" + }, + { + num: NumberInt("2"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397553.shtml" + }, + { + num: NumberInt("3"), + value: "https://www.chinacourt.org/article/detail/2021/11/id/6397536.shtml" + }, + { + num: NumberInt("4"), + value: "https://www.chinacourt.org/article/detail/2021/09/id/6250921.shtml" + }, + { + num: NumberInt("5"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174681.shtml" + }, + { + num: NumberInt("6"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174680.shtml" + }, + { + num: NumberInt("7"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174679.shtml" + }, + { + num: NumberInt("8"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174677.shtml" + }, + { + num: NumberInt("9"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174673.shtml" + }, + { + num: NumberInt("10"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174671.shtml" + }, + { + num: NumberInt("11"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174669.shtml" + }, + { + num: NumberInt("12"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174668.shtml" + }, + { + num: NumberInt("13"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174662.shtml" + }, + { + num: NumberInt("14"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174661.shtml" + }, + { + num: NumberInt("15"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174658.shtml" + }, + { + num: NumberInt("16"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174655.shtml" + }, + { + num: NumberInt("17"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174654.shtml" + }, + { + num: NumberInt("18"), + value: "https://www.chinacourt.org/article/detail/2021/07/id/6174651.shtml" + }, + { + num: NumberInt("19"), + value: "https://www.chinacourt.org/article/detail/2020/07/id/5378776.shtml" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法律网测试翻页", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_linktext", + desc: "", + type: "string", + exampleValue: "石嘴山市惠农区人民检察院诉石嘴山市惠农区农业农村和水务局行政公益诉讼案" + }, + { + id: NumberInt("1"), + name: "para2_linkAddress", + desc: "", + type: "string", + exampleValue: "https://www.chinacourt.org/article/detail/2021/11/id/6397580.shtml" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f57d09ca6c77f85032efd6"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "最外层点击行政案例", + sequence: [ + NumberInt("4"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"morepage\"]/div[2]/div[1]/div[2]/ul/li/a", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[text()='下一页']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("3"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "点击每一页的主题细节", + sequence: [ + NumberInt("7"), + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18 | 来源:最高人民法院 " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   (一)基本案情  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。  (二)裁判结果  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。  (三)典型意义  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。   " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("8"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n \t   (一)基本案情  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。  (二)裁判结果  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。  (三)典型意义  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。   " + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (二)裁判结果" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para9_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  (三)典型意义" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para10_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[4]/p[6]", + exampleValues: [ + { + num: NumberInt("0"), + value: "  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_循环点击下一页_1", + nodeId: NumberInt("4"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法院爬取测试", + outputParameters: [ + { + id: NumberInt("0"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + }, + { + id: NumberInt("1"), + name: "para5_text", + desc: "", + type: "string", + exampleValue: "2020-07-27 16:44:18" + }, + { + id: NumberInt("2"), + name: "para6_text", + desc: "", + type: "string", + exampleValue: "\n \t   (一)基本案情  2014年7月3日,古田县人民政府(以下简称古田县政府)与福建爱乐投资有限公司(以下简称福建爱乐公司)签订了《古田县翠屏湖片区项目投资框架协议书》,约定项目总投资约50亿元,用地总面积约1000亩,项目定位为酒店、居住、旅游为一体的现代化高端生态城市综合体。其后,双方又签订了《补充协议》。2015年4月23日,福建爱乐公司指派庄某某通过公开拍卖竞得首期开发建设用地103084平方米,并与原古田县国土资源局签订《国有建设用地使用权出让合同》,支付了土地出让金人民币1.2亿元。2015年5月8日,古田翠屏湖爱乐置业有限公司(以下简称古田爱乐公司)成立,作为案涉投资开发项目的落地公司。2015年7月13日,古田爱乐公司与原古田县国土资源局签订《国有建设用地使用权出让合同》(合同补充条款),约定由古田爱乐公司承接庄某某之前签订的《国有建设用地使用权出让合同》中全部权利义务。随后,古田爱乐公司进行项目建设,不同程度建设了酒店、附属楼及50余栋别墅并预售了部分别墅。其后,古田县政府及有关部门以适应省生态文明实验区建设需要,依照新颁布的水资源、国有林场的有关行政管理规定,按照省有关主管部门的意见和建议,以停止翠屏湖沿线公路内侧地产类开发项目的实施、对翠屏湖高头岭片区规划进行新的调整等为由,叫停了案涉项目的开发建设和经营销售。同时,古田县政府成立整改对接工作小组,启动协商收回国有建设用地使用权等工作。后因收回及补偿事宜协商未果,古田爱乐公司、福建爱乐公司提起行政诉讼,请求解除双方签订的招商引资合同(《古田县翠屏湖片区项目投资框架协议书》和《补充协议》)及补偿损失约2.6亿元。  (二)裁判结果  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。  (三)典型意义  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。   " + }, + { + id: NumberInt("3"), + name: "para7_text", + desc: "", + type: "string", + exampleValue: "  (二)裁判结果" + }, + { + id: NumberInt("4"), + name: "para8_text", + desc: "", + type: "string", + exampleValue: "  福建省福州市中级人民法院一审认为,因政策、规划、用途等调整,涉案行政协议已无法履行,福建爱乐公司和古田爱乐公司请求解除案涉行政协议应予支持。同时,以相关评估机构对收回涉案土地使用权及在建工程的评估价格作为解除案涉行政协议造成损失金额的计算依据,确定支付给古田爱乐公司的损失金额。为此,一审判决:解除双方签订的《古田县翠屏湖片区项目投资框架协议书》及《补充协议》;由古田县政府向古田爱乐公司支付302146933元及相关利息的损失;驳回古田爱乐公司和福建爱乐公司的其他诉讼请求。福建省高级人民法院二审期间,经多方组织调解,促成各方就案涉行政协议的解除、企业损失的支付、项目建设用地收回、在建工程的交接、相关购房户及建筑商款项的善后工作等事项自愿达成调解协议。根据调解协议,二审法院依法作出了《行政调解书》。" + }, + { + id: NumberInt("5"), + name: "para9_text", + desc: "", + type: "string", + exampleValue: "  (三)典型意义" + }, + { + id: NumberInt("6"), + name: "para10_text", + desc: "", + type: "string", + exampleValue: "  行政机关与民营企业依法签订的行政协议应受法律保护,行政机关应对符合法律规定解除行政协议给民营企业合法产权造成的损失依法给予补偿,切实保护民营企业的合法产权。行政协议具有双方意思表示一致的特点,审理行政协议案件可适用审理民事合同纠纷的相关规则,因此,属于可适用调解的行政案件。二审法院为认真贯彻落实生态文明实验区建设要求,切实保护好民营企业的合法产权,有效化解和实质性解决行政争议,积极组织各方当事人协商调解。在查明事实、分清责任的基础上,为双方厘清是非、释明法理,终于使各方取得共识,达成调解协议。不仅有效化解了案涉行政协议的争议,还一揽子解决了因解除案涉行政协议引起的土地使用权出让合同解除、土地使用权收回、在建工程交接以及有关购房户、工程款纠纷等一系列相关问题。既为生态文明建设大局提供司法服务,又为民营企业合法产权提供司法保障,促进了法治政府、诚信政府建设,有利于营造良好的营商环境,取得了较好的法律效果和社会效果。" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f58550ca6c77f85032efd7"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "New Crawler Task", + outputParameters: [ ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f589c8ca6c77f85032efd9"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("4"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[text='下一页']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "每次点击下一页", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环当前页每个标题链接", + sequence: [ + NumberInt("5"), + NumberInt("6") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "循环当前页每个标题内容", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_循环点击下一页_1", + nodeId: NumberInt("2"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法律网站翻页标题类型合集", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "2020-07-27 16:44:18" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f58bc0a496190e317dc643"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("4"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[text()='下一页']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "每次点击下一页", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环当前页每个标题链接", + sequence: [ + NumberInt("5"), + NumberInt("6") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "循环当前页每个标题内容", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[2]/div[2]/p[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_循环点击下一页_1", + nodeId: NumberInt("2"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml", + name: "中国法律网站翻页标题类型合集", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "2020-07-27 16:44:18" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwMjAwNjAwAAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f5c7c5ca6c77f85032efdb"), + containJudge: false, + desc: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml", + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "典型案例循环", + sequence: [ + NumberInt("3"), + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "典型案例循环点击", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"more_left\")]/div[2]/ul[1]/li[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"paginationControl\")]/a[text()='下一页']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击下一页", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"paginationControl\")]/a[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击当前页的每个标题链接", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "循环点击当前页标题的每个链接", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"list_br\")]/div[1]/ul[1]/li[1]/span[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("8"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "提取数据", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "//*[@id=\"detail\"]/div[2]/div[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[1]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2020-07-27 16:44:18" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml" + }, + { + id: NumberInt("1"), + name: "loopTimes_循环点击下一页_1", + nodeId: NumberInt("4"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml", + name: "中国法律网站数据爬取", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "古田翠屏湖爱乐置业有限公司、福建爱乐投资有限公司诉古田县人民政府行政协议及赔偿案" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "2020-07-27 16:44:18" + } + ], + url: "https://www.chinacourt.org/article/subjectdetail/type/more/id/MzAwNEiqNDAwAiMDAA.shtml" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63f856c0ca6c77f85032efdc"), + containJudge: false, + desc: "https://www.baidu.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.baidu.com", + links: "https://www.baidu.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3"), + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"hotsearch-content-wrapper\"]/li/a[1]/span[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"hotsearch-content-wrapper\"]/li[1]/a[1]/span[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[4]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/p[1]/a[1]/em[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "新春加速度 中国经济跑出新活力" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[4]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/p[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n 近日,从中央到地方,各行各业开启加速模式。RCEP原产地证书签证量增长、春运期间全国日均邮件2.59亿件、中巴经济...\n 详细 >" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.baidu.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.baidu.com" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("2"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.baidu.com", + name: "百度翻页测试", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "新春加速度 中国经济跑出新活力" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "\n 近日,从中央到地方,各行各业开启加速模式。RCEP原产地证书签证量增长、春运期间全国日均邮件2.59亿件、中巴经济...\n 详细 >" + } + ], + url: "https://www.baidu.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("63fd5ff5a496190e317dc649"), + containJudge: false, + desc: "https://www.baidu.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "打开网页", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.baidu.com", + links: "https://www.baidu.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环", + sequence: [ + NumberInt("3"), + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"hotsearch-content-wrapper\"]/li/a[1]/span[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "1", + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击元素", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"hotsearch-content-wrapper\"]/li[1]/a[1]/span[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "提取数据", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[4]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/p[1]/a[1]/em[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "数字中国建设整体布局规划" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[4]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/p[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n 近日,中共中央、国务院印发了《数字中国建设整体布局规划》。《规划》指出,建设数字中国是推进中国式现代化的重要引擎、构筑国家竞争新优势的支撑。\n 详细 >" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "打开网页", + value: "https://www.baidu.com", + desc: "要采集的网址列表,多行以\\n分开", + type: "string", + exampleValue: "https://www.jd.com" + } + ], + links: "https://www.baidu.com", + name: "新的百度任务", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "数字中国建设整体布局规划" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "\n 近日,中共中央、国务院印发了《数字中国建设整体布局规划》。《规划》指出,建设数字中国是推进中国式现代化的重要引擎、构筑国家竞争新优势的支撑。\n 详细 >" + } + ], + url: "https://www.baidu.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("6407e6f3e9c32379f083e86e"), + containJudge: false, + desc: "https://www.ncbi.nlm.nih.gov/protein", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("13"), + NumberInt("14"), + NumberInt("17") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ncbi.nlm.nih.gov/protein", + links: "https://www.ncbi.nlm.nih.gov/protein", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"_seqlen\"]/li[1]/div[1]/h3[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"_seqlen\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[1]/div[2]/div[2]/div[1]/dl[1]/dd[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + } + ], + default: "" + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[1]/div[1]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[1]/div[2]/div[2]/div[1]/dl[1]/dd[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + } + ] + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[2]/div[1]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200203" + } + ] + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para5_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[3]/div[1]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200202" + } + ] + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para6_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[4]/div[1]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200201" + } + ] + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para7_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[5]/div[1]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "222447004" + } + ] + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para8_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n Summary20 per pageSort by Default orderFormatSummaryGenPeptGenPept (full)FASTAFASTA (text)ASN.1Revision HistoryAccession ListGI ListItems per page5102050100200Sort byDefault orderAccessionDate ModifiedDate ReleasedOrganism NameTaxonomy IDApplySend to:\n jQuery(document).ready( function () {\n jQuery(\"#send_to_menu input[type='radio']\").click( function () {\n var selectedValue = jQuery(this).val().toLowerCase();\n var selectedDiv = jQuery(\"#send_to_menu div.\" + selectedValue);\n \n if(selectedDiv.is(\":hidden\")){ \n jQuery(\"#send_to_menu div.submenu:visible\").slideUp();\n selectedDiv.slideDown();\n }\n });\n \n });\n \n jQuery(\"#sendto\").bind(\"ncbipopperclose\", function(){\n jQuery(\"#send_to_menu div.submenu:visible\").css(\"display\",\"none\");\n jQuery(\"#send_to_menu input[type='radio']:checked\").attr(\"checked\",false);\n });\n \n Choose DestinationFileClipboardCollectionsFormatSummaryGenPeptGenPept (full)FASTAASN.1XMLINSDSeq XMLTinySeq XMLFeature TableFASTA CDSAccession ListGI ListGFF3Sort byDefault orderAccessionDate ModifiedDate ReleasedOrganism NameTaxonomy ID\n function x_showgi(el) {\n // ID-4455\n var elSeq = document.getElementById(\"file_showgi_section\");\n if (el.options[el.selectedIndex].getAttribute(\"showgi\") === \"true\") {\n elSeq.style.display = \"\";\n } else {\n elSeq.style.display = \"none\";\n }\n }\n setTimeout(function() {\n x_showgi(document.getElementById(\"file_format\"));\n }, 1000);\n Show GICreate FileAdd to ClipboardStart from citationAdd to Collections\n \n \n \n \n \n \n See the results of this search (480 items) in our new Identical Protein Groups database.\n\n \n Items: 1 to 20 of 198253Selected: 5\n << First< PrevPage of 9913Next >Last >>\n \n \n \n \n \n \n \n Select item 232002041.Chain S, 10-mer Peptide10 aa proteinAccession: 1JUI_S GI: 23200204PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 232002032.Chain R, 10-mer Peptide10 aa proteinAccession: 1JUI_R GI: 23200203PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 232002023.Chain Q, 10-mer Peptide10 aa proteinAccession: 1JUI_Q GI: 23200202PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 232002014.Chain P, 10-mer Peptide10 aa proteinAccession: 1JUI_P GI: 23200201PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 2224470045.Chain F, Latent membrane protein 2 peptide9 aa proteinAccession: 3BVN_F GI: 222447004PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 2224470016.Chain C, Latent membrane protein 2 peptide9 aa proteinAccession: 3BVN_C GI: 222447001PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 2537224357.Chain P, PEPTIDE LIGAND CONTAINING HPQ10 aa proteinAccession: 1VWH_P GI: 253722435PubMed GenPeptIdentical ProteinsFASTAGraphicsSelect item 2537224348.Chain P, PEPTIDE LIGAND CONTAINING HPQ10 aa proteinAccession: 1VWG_P GI: 253722434PubMed GenPeptIdentical ProteinsFASTAGraphicsSelect item 21940229.Chain P, STREP-TAG PEPTIDE9 aa proteinAccession: 1RST_P GI: 2194022PubMed GenPeptIdentical ProteinsFASTAGraphicsSelect item 219402010.Chain P, STREP-TAG II PEPTIDE10 aa proteinAccession: 1RSU_P GI: 2194020PubMed GenPeptIdentical ProteinsFASTAGraphicsSelect item 40324241311.Chain P, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWJ_P GI: 403242413PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 40324241212.Chain M, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWJ_M GI: 403242412PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 35738089113.Chain P, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWR_P GI: 357380891PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 35738089014.Chain P, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWQ_P GI: 357380890PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 35738088915.Chain P, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWL_P GI: 357380889PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 35738088816.Chain M, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWL_M GI: 357380888PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 35738088617.Chain P, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWK_P GI: 357380886PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 35738088518.Chain M, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWK_M GI: 357380885PubMed Taxonomy GenPeptIdentical ProteinsFASTAGraphicsSelect item 34510055519.Chain P, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWI_P GI: 345100555PubMed GenPeptIdentical ProteinsFASTAGraphicsSelect item 34510055420.Chain M, PEPTIDE LIGAND CONTAINING HPQ9 aa proteinAccession: 1VWI_M GI: 345100554PubMed GenPeptIdentical ProteinsFASTAGraphics\n \n \n \n \n << First< PrevPage of 9913Next >Last >>\n \n Summary20 per pageSort by Default orderFormatSummaryGenPeptGenPept (full)FASTAFASTA (text)ASN.1Revision HistoryAccession ListGI ListItems per page5102050100200Sort byDefault orderAccessionDate ModifiedDate ReleasedOrganism NameTaxonomy IDApplySend to:\n jQuery(document).ready( function () {\n jQuery(\"#send_to_menu2 input[type='radio']\").click( function () {\n var selectedValue = jQuery(this).val().toLowerCase();\n var selectedDiv = jQuery(\"#send_to_menu2 div.\" + selectedValue);\n \n if(selectedDiv.is(\":hidden\")){ \n jQuery(\"#send_to_menu2 div.submenu:visible\").slideUp();\n selectedDiv.slideDown();\n }\n });\n \n });\n \n jQuery(\"#sendto2\").bind(\"ncbipopperclose\", function(){\n jQuery(\"#send_to_menu2 div.submenu:visible\").css(\"display\",\"none\");\n jQuery(\"#send_to_menu2 input[type='radio']:checked\").attr(\"checked\",false);\n });\n \n Choose DestinationFileClipboardCollectionsFormatSummaryGenPeptGenPept (full)FASTAASN.1XMLINSDSeq XMLTinySeq XMLFeature TableFASTA CDSAccession ListGI ListGFF3Sort byDefault orderAccessionDate ModifiedDate ReleasedOrganism NameTaxonomy ID\n function x_showgi(el) {\n // ID-4455\n var elSeq = document.getElementById(\"file_showgi_section\");\n if (el.options[el.selectedIndex].getAttribute(\"showgi\") === \"true\") {\n elSeq.style.display = \"\";\n } else {\n elSeq.style.display = \"none\";\n }\n }\n setTimeout(function() {\n x_showgi(document.getElementById(\"file_format\"));\n }, 1000);\n Show GICreate FileAdd to ClipboardStart from citationAdd to Collections\n " + } + ] + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("7") + ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("8"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("8"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para9_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + }, + { + num: NumberInt("1"), + value: "23200203" + }, + { + num: NumberInt("2"), + value: "23200202" + }, + { + num: NumberInt("3"), + value: "23200201" + }, + { + num: NumberInt("4"), + value: "222447004" + }, + { + num: NumberInt("5"), + value: "222447001" + }, + { + num: NumberInt("6"), + value: "253722435" + }, + { + num: NumberInt("7"), + value: "253722434" + }, + { + num: NumberInt("8"), + value: "2194022" + }, + { + num: NumberInt("9"), + value: "2194020" + }, + { + num: NumberInt("10"), + value: "403242413" + }, + { + num: NumberInt("11"), + value: "403242412" + }, + { + num: NumberInt("12"), + value: "357380891" + }, + { + num: NumberInt("13"), + value: "357380890" + }, + { + num: NumberInt("14"), + value: "357380889" + }, + { + num: NumberInt("15"), + value: "357380888" + }, + { + num: NumberInt("16"), + value: "357380886" + }, + { + num: NumberInt("17"), + value: "357380885" + }, + { + num: NumberInt("18"), + value: "345100555" + }, + { + num: NumberInt("19"), + value: "345100554" + }, + { + num: NumberInt("20"), + value: "253722439" + }, + { + num: NumberInt("21"), + value: "253722438" + }, + { + num: NumberInt("22"), + value: "253722437" + }, + { + num: NumberInt("23"), + value: "253722436" + }, + { + num: NumberInt("24"), + value: "253722433" + }, + { + num: NumberInt("25"), + value: "253722432" + }, + { + num: NumberInt("26"), + value: "253722431" + }, + { + num: NumberInt("27"), + value: "253722430" + }, + { + num: NumberInt("28"), + value: "253722429" + }, + { + num: NumberInt("29"), + value: "253722428" + }, + { + num: NumberInt("30"), + value: "2981824" + }, + { + num: NumberInt("31"), + value: "443014" + }, + { + num: NumberInt("32"), + value: "443011" + }, + { + num: NumberInt("33"), + value: "1036305139" + }, + { + num: NumberInt("34"), + value: "1036305138" + }, + { + num: NumberInt("35"), + value: "1036305137" + }, + { + num: NumberInt("36"), + value: "1036305136" + }, + { + num: NumberInt("37"), + value: "1036305135" + }, + { + num: NumberInt("38"), + value: "1036305134" + }, + { + num: NumberInt("39"), + value: "228312556" + }, + { + num: NumberInt("40"), + value: "20150903" + }, + { + num: NumberInt("41"), + value: "20150902" + }, + { + num: NumberInt("42"), + value: "20150901" + }, + { + num: NumberInt("43"), + value: "20150900" + }, + { + num: NumberInt("44"), + value: "409187959" + }, + { + num: NumberInt("45"), + value: "354459760" + }, + { + num: NumberInt("46"), + value: "354459759" + }, + { + num: NumberInt("47"), + value: "347948701" + }, + { + num: NumberInt("48"), + value: "228312287" + }, + { + num: NumberInt("49"), + value: "228312284" + }, + { + num: NumberInt("50"), + value: "119389935" + }, + { + num: NumberInt("51"), + value: "75765233" + }, + { + num: NumberInt("52"), + value: "75765230" + }, + { + num: NumberInt("53"), + value: "75765227" + }, + { + num: NumberInt("54"), + value: "75765224" + }, + { + num: NumberInt("55"), + value: "75765221" + }, + { + num: NumberInt("56"), + value: "75765218" + }, + { + num: NumberInt("57"), + value: "75765215" + }, + { + num: NumberInt("58"), + value: "75765178" + }, + { + num: NumberInt("59"), + value: "461641" + }, + { + num: NumberInt("60"), + value: "1700031052" + }, + { + num: NumberInt("61"), + value: "1700031050" + }, + { + num: NumberInt("62"), + value: "134104482" + }, + { + num: NumberInt("63"), + value: "134104480" + }, + { + num: NumberInt("64"), + value: "134104478" + }, + { + num: NumberInt("65"), + value: "134104476" + }, + { + num: NumberInt("66"), + value: "134104474" + }, + { + num: NumberInt("67"), + value: "134104472" + }, + { + num: NumberInt("68"), + value: "134104470" + }, + { + num: NumberInt("69"), + value: "34810318" + }, + { + num: NumberInt("70"), + value: "34810312" + }, + { + num: NumberInt("71"), + value: "380259128" + }, + { + num: NumberInt("72"), + value: "323714393" + }, + { + num: NumberInt("73"), + value: "323714392" + }, + { + num: NumberInt("74"), + value: "323714391" + }, + { + num: NumberInt("75"), + value: "323714390" + }, + { + num: NumberInt("76"), + value: "323714387" + }, + { + num: NumberInt("77"), + value: "323714386" + }, + { + num: NumberInt("78"), + value: "323714385" + }, + { + num: NumberInt("79"), + value: "67464074" + }, + { + num: NumberInt("80"), + value: "67464069" + }, + { + num: NumberInt("81"), + value: "999917" + }, + { + num: NumberInt("82"), + value: "999914" + }, + { + num: NumberInt("83"), + value: "159164758" + }, + { + num: NumberInt("84"), + value: "2152672176" + }, + { + num: NumberInt("85"), + value: "1393955870" + }, + { + num: NumberInt("86"), + value: "1393955869" + }, + { + num: NumberInt("87"), + value: "1393955868" + }, + { + num: NumberInt("88"), + value: "1393955867" + }, + { + num: NumberInt("89"), + value: "1393955866" + }, + { + num: NumberInt("90"), + value: "1393955865" + }, + { + num: NumberInt("91"), + value: "1279526455" + }, + { + num: NumberInt("92"), + value: "1279526454" + }, + { + num: NumberInt("93"), + value: "1279526453" + }, + { + num: NumberInt("94"), + value: "1279526452" + }, + { + num: NumberInt("95"), + value: "641389948" + }, + { + num: NumberInt("96"), + value: "641389947" + }, + { + num: NumberInt("97"), + value: "641389946" + }, + { + num: NumberInt("98"), + value: "520728720" + }, + { + num: NumberInt("99"), + value: "520728719" + }, + { + num: NumberInt("100"), + value: "520728718" + }, + { + num: NumberInt("101"), + value: "520728717" + }, + { + num: NumberInt("102"), + value: "520728716" + }, + { + num: NumberInt("103"), + value: "520728715" + }, + { + num: NumberInt("104"), + value: "520728714" + }, + { + num: NumberInt("105"), + value: "520728713" + }, + { + num: NumberInt("106"), + value: "520728712" + }, + { + num: NumberInt("107"), + value: "520728711" + }, + { + num: NumberInt("108"), + value: "520728710" + }, + { + num: NumberInt("109"), + value: "520728709" + }, + { + num: NumberInt("110"), + value: "480312031" + }, + { + num: NumberInt("111"), + value: "480312030" + }, + { + num: NumberInt("112"), + value: "480312027" + }, + { + num: NumberInt("113"), + value: "480312026" + }, + { + num: NumberInt("114"), + value: "480312025" + }, + { + num: NumberInt("115"), + value: "480312024" + }, + { + num: NumberInt("116"), + value: "215261317" + }, + { + num: NumberInt("117"), + value: "215261316" + }, + { + num: NumberInt("118"), + value: "83754702" + }, + { + num: NumberInt("119"), + value: "83754701" + }, + { + num: NumberInt("120"), + value: "71042779" + }, + { + num: NumberInt("121"), + value: "71042778" + }, + { + num: NumberInt("122"), + value: "24987445" + }, + { + num: NumberInt("123"), + value: "2554845" + }, + { + num: NumberInt("124"), + value: "1064968" + }, + { + num: NumberInt("125"), + value: "230018" + }, + { + num: NumberInt("126"), + value: "230015" + }, + { + num: NumberInt("127"), + value: "2230345817" + }, + { + num: NumberInt("128"), + value: "365813032" + }, + { + num: NumberInt("129"), + value: "365813029" + }, + { + num: NumberInt("130"), + value: "311772216" + }, + { + num: NumberInt("131"), + value: "20150183" + }, + { + num: NumberInt("132"), + value: "955264934" + }, + { + num: NumberInt("133"), + value: "955264933" + }, + { + num: NumberInt("134"), + value: "588292920" + }, + { + num: NumberInt("135"), + value: "588292919" + }, + { + num: NumberInt("136"), + value: "588292918" + }, + { + num: NumberInt("137"), + value: "588292917" + }, + { + num: NumberInt("138"), + value: "575403330" + }, + { + num: NumberInt("139"), + value: "575403328" + }, + { + num: NumberInt("140"), + value: "575403326" + }, + { + num: NumberInt("141"), + value: "575403325" + }, + { + num: NumberInt("142"), + value: "575403322" + }, + { + num: NumberInt("143"), + value: "575403321" + }, + { + num: NumberInt("144"), + value: "575403310" + }, + { + num: NumberInt("145"), + value: "575403309" + }, + { + num: NumberInt("146"), + value: "575403306" + }, + { + num: NumberInt("147"), + value: "575403305" + }, + { + num: NumberInt("148"), + value: "575403302" + }, + { + num: NumberInt("149"), + value: "575403301" + }, + { + num: NumberInt("150"), + value: "575403298" + }, + { + num: NumberInt("151"), + value: "575403297" + }, + { + num: NumberInt("152"), + value: "575403294" + }, + { + num: NumberInt("153"), + value: "575403293" + }, + { + num: NumberInt("154"), + value: "575403290" + }, + { + num: NumberInt("155"), + value: "575403289" + }, + { + num: NumberInt("156"), + value: "24987408" + }, + { + num: NumberInt("157"), + value: "7245960" + }, + { + num: NumberInt("158"), + value: "7245957" + }, + { + num: NumberInt("159"), + value: "6730519" + }, + { + num: NumberInt("160"), + value: "1064966" + }, + { + num: NumberInt("161"), + value: "226192643" + }, + { + num: NumberInt("162"), + value: "226192641" + }, + { + num: NumberInt("163"), + value: "226192635" + }, + { + num: NumberInt("164"), + value: "313471757" + }, + { + num: NumberInt("165"), + value: "380764138" + }, + { + num: NumberInt("166"), + value: "380764135" + }, + { + num: NumberInt("167"), + value: "380764132" + }, + { + num: NumberInt("168"), + value: "380764129" + }, + { + num: NumberInt("169"), + value: "380764126" + }, + { + num: NumberInt("170"), + value: "380764123" + }, + { + num: NumberInt("171"), + value: "380764120" + }, + { + num: NumberInt("172"), + value: "380764111" + }, + { + num: NumberInt("173"), + value: "380764108" + }, + { + num: NumberInt("174"), + value: "213424211" + }, + { + num: NumberInt("175"), + value: "213424210" + }, + { + num: NumberInt("176"), + value: "206582000" + }, + { + num: NumberInt("177"), + value: "206581999" + }, + { + num: NumberInt("178"), + value: "6730547" + }, + { + num: NumberInt("179"), + value: "6730542" + }, + { + num: NumberInt("180"), + value: "827343371" + }, + { + num: NumberInt("181"), + value: "378792145" + }, + { + num: NumberInt("182"), + value: "378792142" + }, + { + num: NumberInt("183"), + value: "319443778" + }, + { + num: NumberInt("184"), + value: "319443777" + }, + { + num: NumberInt("185"), + value: "56553909" + }, + { + num: NumberInt("186"), + value: "1752309654" + }, + { + num: NumberInt("187"), + value: "1690533021" + }, + { + num: NumberInt("188"), + value: "971826035" + }, + { + num: NumberInt("189"), + value: "971826034" + }, + { + num: NumberInt("190"), + value: "971826031" + }, + { + num: NumberInt("191"), + value: "971826030" + }, + { + num: NumberInt("192"), + value: "403242416" + }, + { + num: NumberInt("193"), + value: "361130616" + }, + { + num: NumberInt("194"), + value: "361130614" + }, + { + num: NumberInt("195"), + value: "354459822" + }, + { + num: NumberInt("196"), + value: "354459818" + }, + { + num: NumberInt("197"), + value: "281500941" + }, + { + num: NumberInt("198"), + value: "118137431" + }, + { + num: NumberInt("199"), + value: "90109286" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("9"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("9"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("7"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop click next page", + sequence: [ + NumberInt("10") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("10"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("10"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("8"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("12") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("11"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("11"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para10_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "90109283" + }, + { + num: NumberInt("1"), + value: "50513650" + }, + { + num: NumberInt("2"), + value: "50513648" + }, + { + num: NumberInt("3"), + value: "33357134" + }, + { + num: NumberInt("4"), + value: "7245954" + }, + { + num: NumberInt("5"), + value: "7245951" + }, + { + num: NumberInt("6"), + value: "3891455" + }, + { + num: NumberInt("7"), + value: "1229749463" + }, + { + num: NumberInt("8"), + value: "1229749461" + }, + { + num: NumberInt("9"), + value: "1285033057" + }, + { + num: NumberInt("10"), + value: "973743950" + }, + { + num: NumberInt("11"), + value: "973743948" + }, + { + num: NumberInt("12"), + value: "1942092" + }, + { + num: NumberInt("13"), + value: "253722462" + }, + { + num: NumberInt("14"), + value: "253722335" + }, + { + num: NumberInt("15"), + value: "82407914" + }, + { + num: NumberInt("16"), + value: "82407911" + }, + { + num: NumberInt("17"), + value: "82407908" + }, + { + num: NumberInt("18"), + value: "82407905" + }, + { + num: NumberInt("19"), + value: "1951684507" + }, + { + num: NumberInt("20"), + value: "1951684506" + }, + { + num: NumberInt("21"), + value: "1229749431" + }, + { + num: NumberInt("22"), + value: "1229749430" + }, + { + num: NumberInt("23"), + value: "393715165" + }, + { + num: NumberInt("24"), + value: "326328022" + }, + { + num: NumberInt("25"), + value: "326328020" + }, + { + num: NumberInt("26"), + value: "326328018" + }, + { + num: NumberInt("27"), + value: "260100190" + }, + { + num: NumberInt("28"), + value: "260100188" + }, + { + num: NumberInt("29"), + value: "254220969" + }, + { + num: NumberInt("30"), + value: "228311833" + }, + { + num: NumberInt("31"), + value: "228311831" + }, + { + num: NumberInt("32"), + value: "210060917" + }, + { + num: NumberInt("33"), + value: "187609187" + }, + { + num: NumberInt("34"), + value: "159795705" + }, + { + num: NumberInt("35"), + value: "159795704" + }, + { + num: NumberInt("36"), + value: "75766452" + }, + { + num: NumberInt("37"), + value: "75766450" + }, + { + num: NumberInt("38"), + value: "55670240" + }, + { + num: NumberInt("39"), + value: "34810640" + }, + { + num: NumberInt("40"), + value: "34810639" + }, + { + num: NumberInt("41"), + value: "29726582" + }, + { + num: NumberInt("42"), + value: "29726581" + }, + { + num: NumberInt("43"), + value: "1858697035" + }, + { + num: NumberInt("44"), + value: "1858697033" + }, + { + num: NumberInt("45"), + value: "1858697032" + }, + { + num: NumberInt("46"), + value: "1777435770" + }, + { + num: NumberInt("47"), + value: "1777435769" + }, + { + num: NumberInt("48"), + value: "1052245220" + }, + { + num: NumberInt("49"), + value: "1052245219" + }, + { + num: NumberInt("50"), + value: "1048348328" + }, + { + num: NumberInt("51"), + value: "1048348326" + }, + { + num: NumberInt("52"), + value: "400977517" + }, + { + num: NumberInt("53"), + value: "388604050" + }, + { + num: NumberInt("54"), + value: "388604047" + }, + { + num: NumberInt("55"), + value: "255311792" + }, + { + num: NumberInt("56"), + value: "203282429" + }, + { + num: NumberInt("57"), + value: "186973126" + }, + { + num: NumberInt("58"), + value: "186973125" + }, + { + num: NumberInt("59"), + value: "185177971" + }, + { + num: NumberInt("60"), + value: "185177970" + }, + { + num: NumberInt("61"), + value: "185177784" + }, + { + num: NumberInt("62"), + value: "185177783" + }, + { + num: NumberInt("63"), + value: "185177782" + }, + { + num: NumberInt("64"), + value: "185177781" + }, + { + num: NumberInt("65"), + value: "185177780" + }, + { + num: NumberInt("66"), + value: "185177777" + }, + { + num: NumberInt("67"), + value: "185177776" + }, + { + num: NumberInt("68"), + value: "185177775" + }, + { + num: NumberInt("69"), + value: "78100776" + }, + { + num: NumberInt("70"), + value: "27573558" + }, + { + num: NumberInt("71"), + value: "27573555" + }, + { + num: NumberInt("72"), + value: "24987387" + }, + { + num: NumberInt("73"), + value: "16975109" + }, + { + num: NumberInt("74"), + value: "16975106" + }, + { + num: NumberInt("75"), + value: "16975097" + }, + { + num: NumberInt("76"), + value: "16975094" + }, + { + num: NumberInt("77"), + value: "15988374" + }, + { + num: NumberInt("78"), + value: "1311413" + }, + { + num: NumberInt("79"), + value: "1311412" + }, + { + num: NumberInt("80"), + value: "2438257093" + }, + { + num: NumberInt("81"), + value: "2438257092" + }, + { + num: NumberInt("82"), + value: "2438255994" + }, + { + num: NumberInt("83"), + value: "820957305" + }, + { + num: NumberInt("84"), + value: "820957303" + }, + { + num: NumberInt("85"), + value: "820957302" + }, + { + num: NumberInt("86"), + value: "820957301" + }, + { + num: NumberInt("87"), + value: "226192639" + }, + { + num: NumberInt("88"), + value: "3891509" + }, + { + num: NumberInt("89"), + value: "78101009" + }, + { + num: NumberInt("90"), + value: "290789975" + }, + { + num: NumberInt("91"), + value: "228312136" + }, + { + num: NumberInt("92"), + value: "228312135" + }, + { + num: NumberInt("93"), + value: "14488574" + }, + { + num: NumberInt("94"), + value: "14488570" + }, + { + num: NumberInt("95"), + value: "14488566" + }, + { + num: NumberInt("96"), + value: "14488562" + }, + { + num: NumberInt("97"), + value: "394985959" + }, + { + num: NumberInt("98"), + value: "1995654977" + }, + { + num: NumberInt("99"), + value: "1995654976" + }, + { + num: NumberInt("100"), + value: "1995654975" + }, + { + num: NumberInt("101"), + value: "1995654974" + }, + { + num: NumberInt("102"), + value: "213424133" + }, + { + num: NumberInt("103"), + value: "213424130" + }, + { + num: NumberInt("104"), + value: "170292253" + }, + { + num: NumberInt("105"), + value: "161172208" + }, + { + num: NumberInt("106"), + value: "161172207" + }, + { + num: NumberInt("107"), + value: "161172206" + }, + { + num: NumberInt("108"), + value: "146387025" + }, + { + num: NumberInt("109"), + value: "146386775" + }, + { + num: NumberInt("110"), + value: "146386774" + }, + { + num: NumberInt("111"), + value: "82407814" + }, + { + num: NumberInt("112"), + value: "71042065" + }, + { + num: NumberInt("113"), + value: "55670289" + }, + { + num: NumberInt("114"), + value: "55670285" + }, + { + num: NumberInt("115"), + value: "55670282" + }, + { + num: NumberInt("116"), + value: "55670279" + }, + { + num: NumberInt("117"), + value: "55670258" + }, + { + num: NumberInt("118"), + value: "55670255" + }, + { + num: NumberInt("119"), + value: "55670252" + }, + { + num: NumberInt("120"), + value: "55670249" + }, + { + num: NumberInt("121"), + value: "55670246" + }, + { + num: NumberInt("122"), + value: "55670243" + }, + { + num: NumberInt("123"), + value: "55670237" + }, + { + num: NumberInt("124"), + value: "55670234" + }, + { + num: NumberInt("125"), + value: "55670231" + }, + { + num: NumberInt("126"), + value: "34810522" + }, + { + num: NumberInt("127"), + value: "34810521" + }, + { + num: NumberInt("128"), + value: "27573564" + }, + { + num: NumberInt("129"), + value: "27573561" + }, + { + num: NumberInt("130"), + value: "27573552" + }, + { + num: NumberInt("131"), + value: "27573549" + }, + { + num: NumberInt("132"), + value: "7766972" + }, + { + num: NumberInt("133"), + value: "7766971" + }, + { + num: NumberInt("134"), + value: "2554792" + }, + { + num: NumberInt("135"), + value: "1827515833" + }, + { + num: NumberInt("136"), + value: "1827515832" + }, + { + num: NumberInt("137"), + value: "1624687897" + }, + { + num: NumberInt("138"), + value: "1272616475" + }, + { + num: NumberInt("139"), + value: "1272616474" + }, + { + num: NumberInt("140"), + value: "1272616473" + }, + { + num: NumberInt("141"), + value: "1189432129" + }, + { + num: NumberInt("142"), + value: "1025734705" + }, + { + num: NumberInt("143"), + value: "767259504" + }, + { + num: NumberInt("144"), + value: "767259503" + }, + { + num: NumberInt("145"), + value: "767259502" + }, + { + num: NumberInt("146"), + value: "672886496" + }, + { + num: NumberInt("147"), + value: "510101671" + }, + { + num: NumberInt("148"), + value: "510101670" + }, + { + num: NumberInt("149"), + value: "510101659" + }, + { + num: NumberInt("150"), + value: "510101658" + }, + { + num: NumberInt("151"), + value: "510101647" + }, + { + num: NumberInt("152"), + value: "510101646" + }, + { + num: NumberInt("153"), + value: "510101636" + }, + { + num: NumberInt("154"), + value: "510101635" + }, + { + num: NumberInt("155"), + value: "510101623" + }, + { + num: NumberInt("156"), + value: "510101622" + }, + { + num: NumberInt("157"), + value: "491668341" + }, + { + num: NumberInt("158"), + value: "482676606" + }, + { + num: NumberInt("159"), + value: "394985957" + }, + { + num: NumberInt("160"), + value: "394985955" + }, + { + num: NumberInt("161"), + value: "394985953" + }, + { + num: NumberInt("162"), + value: "394985951" + }, + { + num: NumberInt("163"), + value: "393715162" + }, + { + num: NumberInt("164"), + value: "350610441" + }, + { + num: NumberInt("165"), + value: "350610439" + }, + { + num: NumberInt("166"), + value: "350610437" + }, + { + num: NumberInt("167"), + value: "350610435" + }, + { + num: NumberInt("168"), + value: "350610433" + }, + { + num: NumberInt("169"), + value: "350610431" + }, + { + num: NumberInt("170"), + value: "350297749" + }, + { + num: NumberInt("171"), + value: "350297748" + }, + { + num: NumberInt("172"), + value: "312597304" + }, + { + num: NumberInt("173"), + value: "307776568" + }, + { + num: NumberInt("174"), + value: "291463696" + }, + { + num: NumberInt("175"), + value: "223365817" + }, + { + num: NumberInt("176"), + value: "162330057" + }, + { + num: NumberInt("177"), + value: "162330056" + }, + { + num: NumberInt("178"), + value: "149243459" + }, + { + num: NumberInt("179"), + value: "149243456" + }, + { + num: NumberInt("180"), + value: "34810539" + }, + { + num: NumberInt("181"), + value: "28373659" + }, + { + num: NumberInt("182"), + value: "6435711" + }, + { + num: NumberInt("183"), + value: "2780947" + }, + { + num: NumberInt("184"), + value: "2780946" + }, + { + num: NumberInt("185"), + value: "313471755" + }, + { + num: NumberInt("186"), + value: "2431414598" + }, + { + num: NumberInt("187"), + value: "33356853" + }, + { + num: NumberInt("188"), + value: "33356850" + }, + { + num: NumberInt("189"), + value: "33356847" + }, + { + num: NumberInt("190"), + value: "33356844" + }, + { + num: NumberInt("191"), + value: "71042392" + }, + { + num: NumberInt("192"), + value: "1799708916" + }, + { + num: NumberInt("193"), + value: "1799708911" + }, + { + num: NumberInt("194"), + value: "1799708906" + }, + { + num: NumberInt("195"), + value: "1799708901" + }, + { + num: NumberInt("196"), + value: "1799708896" + }, + { + num: NumberInt("197"), + value: "436408915" + }, + { + num: NumberInt("198"), + value: "400977525" + }, + { + num: NumberInt("199"), + value: "400977524" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("4"), + index: NumberInt("13"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("12"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"searchdetails_term\")]", + wait: NumberInt("0"), + value: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])" + } + }, + { + id: NumberInt("5"), + index: NumberInt("14"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("13"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"ui-ncbibutton-5\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("15"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("17"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("16"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("17"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para11_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + }, + { + num: NumberInt("1"), + value: "23200203" + }, + { + num: NumberInt("2"), + value: "23200202" + }, + { + num: NumberInt("3"), + value: "23200201" + }, + { + num: NumberInt("4"), + value: "222447004" + }, + { + num: NumberInt("5"), + value: "222447001" + }, + { + num: NumberInt("6"), + value: "253722435" + }, + { + num: NumberInt("7"), + value: "253722434" + }, + { + num: NumberInt("8"), + value: "2194022" + }, + { + num: NumberInt("9"), + value: "2194020" + }, + { + num: NumberInt("10"), + value: "403242413" + }, + { + num: NumberInt("11"), + value: "403242412" + }, + { + num: NumberInt("12"), + value: "357380891" + }, + { + num: NumberInt("13"), + value: "357380890" + }, + { + num: NumberInt("14"), + value: "357380889" + }, + { + num: NumberInt("15"), + value: "357380888" + }, + { + num: NumberInt("16"), + value: "357380886" + }, + { + num: NumberInt("17"), + value: "357380885" + }, + { + num: NumberInt("18"), + value: "345100555" + }, + { + num: NumberInt("19"), + value: "345100554" + }, + { + num: NumberInt("20"), + value: "253722439" + }, + { + num: NumberInt("21"), + value: "253722438" + }, + { + num: NumberInt("22"), + value: "253722437" + }, + { + num: NumberInt("23"), + value: "253722436" + }, + { + num: NumberInt("24"), + value: "253722433" + }, + { + num: NumberInt("25"), + value: "253722432" + }, + { + num: NumberInt("26"), + value: "253722431" + }, + { + num: NumberInt("27"), + value: "253722430" + }, + { + num: NumberInt("28"), + value: "253722429" + }, + { + num: NumberInt("29"), + value: "253722428" + }, + { + num: NumberInt("30"), + value: "2981824" + }, + { + num: NumberInt("31"), + value: "443014" + }, + { + num: NumberInt("32"), + value: "443011" + }, + { + num: NumberInt("33"), + value: "1036305139" + }, + { + num: NumberInt("34"), + value: "1036305138" + }, + { + num: NumberInt("35"), + value: "1036305137" + }, + { + num: NumberInt("36"), + value: "1036305136" + }, + { + num: NumberInt("37"), + value: "1036305135" + }, + { + num: NumberInt("38"), + value: "1036305134" + }, + { + num: NumberInt("39"), + value: "228312556" + }, + { + num: NumberInt("40"), + value: "20150903" + }, + { + num: NumberInt("41"), + value: "20150902" + }, + { + num: NumberInt("42"), + value: "20150901" + }, + { + num: NumberInt("43"), + value: "20150900" + }, + { + num: NumberInt("44"), + value: "409187959" + }, + { + num: NumberInt("45"), + value: "354459760" + }, + { + num: NumberInt("46"), + value: "354459759" + }, + { + num: NumberInt("47"), + value: "347948701" + }, + { + num: NumberInt("48"), + value: "228312287" + }, + { + num: NumberInt("49"), + value: "228312284" + }, + { + num: NumberInt("50"), + value: "119389935" + }, + { + num: NumberInt("51"), + value: "75765233" + }, + { + num: NumberInt("52"), + value: "75765230" + }, + { + num: NumberInt("53"), + value: "75765227" + }, + { + num: NumberInt("54"), + value: "75765224" + }, + { + num: NumberInt("55"), + value: "75765221" + }, + { + num: NumberInt("56"), + value: "75765218" + }, + { + num: NumberInt("57"), + value: "75765215" + }, + { + num: NumberInt("58"), + value: "75765178" + }, + { + num: NumberInt("59"), + value: "461641" + }, + { + num: NumberInt("60"), + value: "1700031052" + }, + { + num: NumberInt("61"), + value: "1700031050" + }, + { + num: NumberInt("62"), + value: "134104482" + }, + { + num: NumberInt("63"), + value: "134104480" + }, + { + num: NumberInt("64"), + value: "134104478" + }, + { + num: NumberInt("65"), + value: "134104476" + }, + { + num: NumberInt("66"), + value: "134104474" + }, + { + num: NumberInt("67"), + value: "134104472" + }, + { + num: NumberInt("68"), + value: "134104470" + }, + { + num: NumberInt("69"), + value: "34810318" + }, + { + num: NumberInt("70"), + value: "34810312" + }, + { + num: NumberInt("71"), + value: "380259128" + }, + { + num: NumberInt("72"), + value: "323714393" + }, + { + num: NumberInt("73"), + value: "323714392" + }, + { + num: NumberInt("74"), + value: "323714391" + }, + { + num: NumberInt("75"), + value: "323714390" + }, + { + num: NumberInt("76"), + value: "323714387" + }, + { + num: NumberInt("77"), + value: "323714386" + }, + { + num: NumberInt("78"), + value: "323714385" + }, + { + num: NumberInt("79"), + value: "67464074" + }, + { + num: NumberInt("80"), + value: "67464069" + }, + { + num: NumberInt("81"), + value: "999917" + }, + { + num: NumberInt("82"), + value: "999914" + }, + { + num: NumberInt("83"), + value: "159164758" + }, + { + num: NumberInt("84"), + value: "2152672176" + }, + { + num: NumberInt("85"), + value: "1393955870" + }, + { + num: NumberInt("86"), + value: "1393955869" + }, + { + num: NumberInt("87"), + value: "1393955868" + }, + { + num: NumberInt("88"), + value: "1393955867" + }, + { + num: NumberInt("89"), + value: "1393955866" + }, + { + num: NumberInt("90"), + value: "1393955865" + }, + { + num: NumberInt("91"), + value: "1279526455" + }, + { + num: NumberInt("92"), + value: "1279526454" + }, + { + num: NumberInt("93"), + value: "1279526453" + }, + { + num: NumberInt("94"), + value: "1279526452" + }, + { + num: NumberInt("95"), + value: "641389948" + }, + { + num: NumberInt("96"), + value: "641389947" + }, + { + num: NumberInt("97"), + value: "641389946" + }, + { + num: NumberInt("98"), + value: "520728720" + }, + { + num: NumberInt("99"), + value: "520728719" + }, + { + num: NumberInt("100"), + value: "520728718" + }, + { + num: NumberInt("101"), + value: "520728717" + }, + { + num: NumberInt("102"), + value: "520728716" + }, + { + num: NumberInt("103"), + value: "520728715" + }, + { + num: NumberInt("104"), + value: "520728714" + }, + { + num: NumberInt("105"), + value: "520728713" + }, + { + num: NumberInt("106"), + value: "520728712" + }, + { + num: NumberInt("107"), + value: "520728711" + }, + { + num: NumberInt("108"), + value: "520728710" + }, + { + num: NumberInt("109"), + value: "520728709" + }, + { + num: NumberInt("110"), + value: "480312031" + }, + { + num: NumberInt("111"), + value: "480312030" + }, + { + num: NumberInt("112"), + value: "480312027" + }, + { + num: NumberInt("113"), + value: "480312026" + }, + { + num: NumberInt("114"), + value: "480312025" + }, + { + num: NumberInt("115"), + value: "480312024" + }, + { + num: NumberInt("116"), + value: "215261317" + }, + { + num: NumberInt("117"), + value: "215261316" + }, + { + num: NumberInt("118"), + value: "83754702" + }, + { + num: NumberInt("119"), + value: "83754701" + }, + { + num: NumberInt("120"), + value: "71042779" + }, + { + num: NumberInt("121"), + value: "71042778" + }, + { + num: NumberInt("122"), + value: "24987445" + }, + { + num: NumberInt("123"), + value: "2554845" + }, + { + num: NumberInt("124"), + value: "1064968" + }, + { + num: NumberInt("125"), + value: "230018" + }, + { + num: NumberInt("126"), + value: "230015" + }, + { + num: NumberInt("127"), + value: "2230345817" + }, + { + num: NumberInt("128"), + value: "365813032" + }, + { + num: NumberInt("129"), + value: "365813029" + }, + { + num: NumberInt("130"), + value: "311772216" + }, + { + num: NumberInt("131"), + value: "20150183" + }, + { + num: NumberInt("132"), + value: "955264934" + }, + { + num: NumberInt("133"), + value: "955264933" + }, + { + num: NumberInt("134"), + value: "588292920" + }, + { + num: NumberInt("135"), + value: "588292919" + }, + { + num: NumberInt("136"), + value: "588292918" + }, + { + num: NumberInt("137"), + value: "588292917" + }, + { + num: NumberInt("138"), + value: "575403330" + }, + { + num: NumberInt("139"), + value: "575403328" + }, + { + num: NumberInt("140"), + value: "575403326" + }, + { + num: NumberInt("141"), + value: "575403325" + }, + { + num: NumberInt("142"), + value: "575403322" + }, + { + num: NumberInt("143"), + value: "575403321" + }, + { + num: NumberInt("144"), + value: "575403310" + }, + { + num: NumberInt("145"), + value: "575403309" + }, + { + num: NumberInt("146"), + value: "575403306" + }, + { + num: NumberInt("147"), + value: "575403305" + }, + { + num: NumberInt("148"), + value: "575403302" + }, + { + num: NumberInt("149"), + value: "575403301" + }, + { + num: NumberInt("150"), + value: "575403298" + }, + { + num: NumberInt("151"), + value: "575403297" + }, + { + num: NumberInt("152"), + value: "575403294" + }, + { + num: NumberInt("153"), + value: "575403293" + }, + { + num: NumberInt("154"), + value: "575403290" + }, + { + num: NumberInt("155"), + value: "575403289" + }, + { + num: NumberInt("156"), + value: "24987408" + }, + { + num: NumberInt("157"), + value: "7245960" + }, + { + num: NumberInt("158"), + value: "7245957" + }, + { + num: NumberInt("159"), + value: "6730519" + }, + { + num: NumberInt("160"), + value: "1064966" + }, + { + num: NumberInt("161"), + value: "226192643" + }, + { + num: NumberInt("162"), + value: "226192641" + }, + { + num: NumberInt("163"), + value: "226192635" + }, + { + num: NumberInt("164"), + value: "313471757" + }, + { + num: NumberInt("165"), + value: "380764138" + }, + { + num: NumberInt("166"), + value: "380764135" + }, + { + num: NumberInt("167"), + value: "380764132" + }, + { + num: NumberInt("168"), + value: "380764129" + }, + { + num: NumberInt("169"), + value: "380764126" + }, + { + num: NumberInt("170"), + value: "380764123" + }, + { + num: NumberInt("171"), + value: "380764120" + }, + { + num: NumberInt("172"), + value: "380764111" + }, + { + num: NumberInt("173"), + value: "380764108" + }, + { + num: NumberInt("174"), + value: "213424211" + }, + { + num: NumberInt("175"), + value: "213424210" + }, + { + num: NumberInt("176"), + value: "206582000" + }, + { + num: NumberInt("177"), + value: "206581999" + }, + { + num: NumberInt("178"), + value: "6730547" + }, + { + num: NumberInt("179"), + value: "6730542" + }, + { + num: NumberInt("180"), + value: "827343371" + }, + { + num: NumberInt("181"), + value: "378792145" + }, + { + num: NumberInt("182"), + value: "378792142" + }, + { + num: NumberInt("183"), + value: "319443778" + }, + { + num: NumberInt("184"), + value: "319443777" + }, + { + num: NumberInt("185"), + value: "56553909" + }, + { + num: NumberInt("186"), + value: "1752309654" + }, + { + num: NumberInt("187"), + value: "1690533021" + }, + { + num: NumberInt("188"), + value: "971826035" + }, + { + num: NumberInt("189"), + value: "971826034" + }, + { + num: NumberInt("190"), + value: "971826031" + }, + { + num: NumberInt("191"), + value: "971826030" + }, + { + num: NumberInt("192"), + value: "403242416" + }, + { + num: NumberInt("193"), + value: "361130616" + }, + { + num: NumberInt("194"), + value: "361130614" + }, + { + num: NumberInt("195"), + value: "354459822" + }, + { + num: NumberInt("196"), + value: "354459818" + }, + { + num: NumberInt("197"), + value: "281500941" + }, + { + num: NumberInt("198"), + value: "118137431" + }, + { + num: NumberInt("199"), + value: "90109286" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("6"), + index: NumberInt("17"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("18"), + NumberInt("19") + ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("19"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("18"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("19"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para12_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + }, + { + num: NumberInt("1"), + value: "23200203" + }, + { + num: NumberInt("2"), + value: "23200202" + }, + { + num: NumberInt("3"), + value: "23200201" + }, + { + num: NumberInt("4"), + value: "222447004" + }, + { + num: NumberInt("5"), + value: "222447001" + }, + { + num: NumberInt("6"), + value: "253722435" + }, + { + num: NumberInt("7"), + value: "253722434" + }, + { + num: NumberInt("8"), + value: "2194022" + }, + { + num: NumberInt("9"), + value: "2194020" + }, + { + num: NumberInt("10"), + value: "403242413" + }, + { + num: NumberInt("11"), + value: "403242412" + }, + { + num: NumberInt("12"), + value: "357380891" + }, + { + num: NumberInt("13"), + value: "357380890" + }, + { + num: NumberInt("14"), + value: "357380889" + }, + { + num: NumberInt("15"), + value: "357380888" + }, + { + num: NumberInt("16"), + value: "357380886" + }, + { + num: NumberInt("17"), + value: "357380885" + }, + { + num: NumberInt("18"), + value: "345100555" + }, + { + num: NumberInt("19"), + value: "345100554" + }, + { + num: NumberInt("20"), + value: "253722439" + }, + { + num: NumberInt("21"), + value: "253722438" + }, + { + num: NumberInt("22"), + value: "253722437" + }, + { + num: NumberInt("23"), + value: "253722436" + }, + { + num: NumberInt("24"), + value: "253722433" + }, + { + num: NumberInt("25"), + value: "253722432" + }, + { + num: NumberInt("26"), + value: "253722431" + }, + { + num: NumberInt("27"), + value: "253722430" + }, + { + num: NumberInt("28"), + value: "253722429" + }, + { + num: NumberInt("29"), + value: "253722428" + }, + { + num: NumberInt("30"), + value: "2981824" + }, + { + num: NumberInt("31"), + value: "443014" + }, + { + num: NumberInt("32"), + value: "443011" + }, + { + num: NumberInt("33"), + value: "1036305139" + }, + { + num: NumberInt("34"), + value: "1036305138" + }, + { + num: NumberInt("35"), + value: "1036305137" + }, + { + num: NumberInt("36"), + value: "1036305136" + }, + { + num: NumberInt("37"), + value: "1036305135" + }, + { + num: NumberInt("38"), + value: "1036305134" + }, + { + num: NumberInt("39"), + value: "228312556" + }, + { + num: NumberInt("40"), + value: "20150903" + }, + { + num: NumberInt("41"), + value: "20150902" + }, + { + num: NumberInt("42"), + value: "20150901" + }, + { + num: NumberInt("43"), + value: "20150900" + }, + { + num: NumberInt("44"), + value: "409187959" + }, + { + num: NumberInt("45"), + value: "354459760" + }, + { + num: NumberInt("46"), + value: "354459759" + }, + { + num: NumberInt("47"), + value: "347948701" + }, + { + num: NumberInt("48"), + value: "228312287" + }, + { + num: NumberInt("49"), + value: "228312284" + }, + { + num: NumberInt("50"), + value: "119389935" + }, + { + num: NumberInt("51"), + value: "75765233" + }, + { + num: NumberInt("52"), + value: "75765230" + }, + { + num: NumberInt("53"), + value: "75765227" + }, + { + num: NumberInt("54"), + value: "75765224" + }, + { + num: NumberInt("55"), + value: "75765221" + }, + { + num: NumberInt("56"), + value: "75765218" + }, + { + num: NumberInt("57"), + value: "75765215" + }, + { + num: NumberInt("58"), + value: "75765178" + }, + { + num: NumberInt("59"), + value: "461641" + }, + { + num: NumberInt("60"), + value: "1700031052" + }, + { + num: NumberInt("61"), + value: "1700031050" + }, + { + num: NumberInt("62"), + value: "134104482" + }, + { + num: NumberInt("63"), + value: "134104480" + }, + { + num: NumberInt("64"), + value: "134104478" + }, + { + num: NumberInt("65"), + value: "134104476" + }, + { + num: NumberInt("66"), + value: "134104474" + }, + { + num: NumberInt("67"), + value: "134104472" + }, + { + num: NumberInt("68"), + value: "134104470" + }, + { + num: NumberInt("69"), + value: "34810318" + }, + { + num: NumberInt("70"), + value: "34810312" + }, + { + num: NumberInt("71"), + value: "380259128" + }, + { + num: NumberInt("72"), + value: "323714393" + }, + { + num: NumberInt("73"), + value: "323714392" + }, + { + num: NumberInt("74"), + value: "323714391" + }, + { + num: NumberInt("75"), + value: "323714390" + }, + { + num: NumberInt("76"), + value: "323714387" + }, + { + num: NumberInt("77"), + value: "323714386" + }, + { + num: NumberInt("78"), + value: "323714385" + }, + { + num: NumberInt("79"), + value: "67464074" + }, + { + num: NumberInt("80"), + value: "67464069" + }, + { + num: NumberInt("81"), + value: "999917" + }, + { + num: NumberInt("82"), + value: "999914" + }, + { + num: NumberInt("83"), + value: "159164758" + }, + { + num: NumberInt("84"), + value: "2152672176" + }, + { + num: NumberInt("85"), + value: "1393955870" + }, + { + num: NumberInt("86"), + value: "1393955869" + }, + { + num: NumberInt("87"), + value: "1393955868" + }, + { + num: NumberInt("88"), + value: "1393955867" + }, + { + num: NumberInt("89"), + value: "1393955866" + }, + { + num: NumberInt("90"), + value: "1393955865" + }, + { + num: NumberInt("91"), + value: "1279526455" + }, + { + num: NumberInt("92"), + value: "1279526454" + }, + { + num: NumberInt("93"), + value: "1279526453" + }, + { + num: NumberInt("94"), + value: "1279526452" + }, + { + num: NumberInt("95"), + value: "641389948" + }, + { + num: NumberInt("96"), + value: "641389947" + }, + { + num: NumberInt("97"), + value: "641389946" + }, + { + num: NumberInt("98"), + value: "520728720" + }, + { + num: NumberInt("99"), + value: "520728719" + }, + { + num: NumberInt("100"), + value: "520728718" + }, + { + num: NumberInt("101"), + value: "520728717" + }, + { + num: NumberInt("102"), + value: "520728716" + }, + { + num: NumberInt("103"), + value: "520728715" + }, + { + num: NumberInt("104"), + value: "520728714" + }, + { + num: NumberInt("105"), + value: "520728713" + }, + { + num: NumberInt("106"), + value: "520728712" + }, + { + num: NumberInt("107"), + value: "520728711" + }, + { + num: NumberInt("108"), + value: "520728710" + }, + { + num: NumberInt("109"), + value: "520728709" + }, + { + num: NumberInt("110"), + value: "480312031" + }, + { + num: NumberInt("111"), + value: "480312030" + }, + { + num: NumberInt("112"), + value: "480312027" + }, + { + num: NumberInt("113"), + value: "480312026" + }, + { + num: NumberInt("114"), + value: "480312025" + }, + { + num: NumberInt("115"), + value: "480312024" + }, + { + num: NumberInt("116"), + value: "215261317" + }, + { + num: NumberInt("117"), + value: "215261316" + }, + { + num: NumberInt("118"), + value: "83754702" + }, + { + num: NumberInt("119"), + value: "83754701" + }, + { + num: NumberInt("120"), + value: "71042779" + }, + { + num: NumberInt("121"), + value: "71042778" + }, + { + num: NumberInt("122"), + value: "24987445" + }, + { + num: NumberInt("123"), + value: "2554845" + }, + { + num: NumberInt("124"), + value: "1064968" + }, + { + num: NumberInt("125"), + value: "230018" + }, + { + num: NumberInt("126"), + value: "230015" + }, + { + num: NumberInt("127"), + value: "2230345817" + }, + { + num: NumberInt("128"), + value: "365813032" + }, + { + num: NumberInt("129"), + value: "365813029" + }, + { + num: NumberInt("130"), + value: "311772216" + }, + { + num: NumberInt("131"), + value: "20150183" + }, + { + num: NumberInt("132"), + value: "955264934" + }, + { + num: NumberInt("133"), + value: "955264933" + }, + { + num: NumberInt("134"), + value: "588292920" + }, + { + num: NumberInt("135"), + value: "588292919" + }, + { + num: NumberInt("136"), + value: "588292918" + }, + { + num: NumberInt("137"), + value: "588292917" + }, + { + num: NumberInt("138"), + value: "575403330" + }, + { + num: NumberInt("139"), + value: "575403328" + }, + { + num: NumberInt("140"), + value: "575403326" + }, + { + num: NumberInt("141"), + value: "575403325" + }, + { + num: NumberInt("142"), + value: "575403322" + }, + { + num: NumberInt("143"), + value: "575403321" + }, + { + num: NumberInt("144"), + value: "575403310" + }, + { + num: NumberInt("145"), + value: "575403309" + }, + { + num: NumberInt("146"), + value: "575403306" + }, + { + num: NumberInt("147"), + value: "575403305" + }, + { + num: NumberInt("148"), + value: "575403302" + }, + { + num: NumberInt("149"), + value: "575403301" + }, + { + num: NumberInt("150"), + value: "575403298" + }, + { + num: NumberInt("151"), + value: "575403297" + }, + { + num: NumberInt("152"), + value: "575403294" + }, + { + num: NumberInt("153"), + value: "575403293" + }, + { + num: NumberInt("154"), + value: "575403290" + }, + { + num: NumberInt("155"), + value: "575403289" + }, + { + num: NumberInt("156"), + value: "24987408" + }, + { + num: NumberInt("157"), + value: "7245960" + }, + { + num: NumberInt("158"), + value: "7245957" + }, + { + num: NumberInt("159"), + value: "6730519" + }, + { + num: NumberInt("160"), + value: "1064966" + }, + { + num: NumberInt("161"), + value: "226192643" + }, + { + num: NumberInt("162"), + value: "226192641" + }, + { + num: NumberInt("163"), + value: "226192635" + }, + { + num: NumberInt("164"), + value: "313471757" + }, + { + num: NumberInt("165"), + value: "380764138" + }, + { + num: NumberInt("166"), + value: "380764135" + }, + { + num: NumberInt("167"), + value: "380764132" + }, + { + num: NumberInt("168"), + value: "380764129" + }, + { + num: NumberInt("169"), + value: "380764126" + }, + { + num: NumberInt("170"), + value: "380764123" + }, + { + num: NumberInt("171"), + value: "380764120" + }, + { + num: NumberInt("172"), + value: "380764111" + }, + { + num: NumberInt("173"), + value: "380764108" + }, + { + num: NumberInt("174"), + value: "213424211" + }, + { + num: NumberInt("175"), + value: "213424210" + }, + { + num: NumberInt("176"), + value: "206582000" + }, + { + num: NumberInt("177"), + value: "206581999" + }, + { + num: NumberInt("178"), + value: "6730547" + }, + { + num: NumberInt("179"), + value: "6730542" + }, + { + num: NumberInt("180"), + value: "827343371" + }, + { + num: NumberInt("181"), + value: "378792145" + }, + { + num: NumberInt("182"), + value: "378792142" + }, + { + num: NumberInt("183"), + value: "319443778" + }, + { + num: NumberInt("184"), + value: "319443777" + }, + { + num: NumberInt("185"), + value: "56553909" + }, + { + num: NumberInt("186"), + value: "1752309654" + }, + { + num: NumberInt("187"), + value: "1690533021" + }, + { + num: NumberInt("188"), + value: "971826035" + }, + { + num: NumberInt("189"), + value: "971826034" + }, + { + num: NumberInt("190"), + value: "971826031" + }, + { + num: NumberInt("191"), + value: "971826030" + }, + { + num: NumberInt("192"), + value: "403242416" + }, + { + num: NumberInt("193"), + value: "361130616" + }, + { + num: NumberInt("194"), + value: "361130614" + }, + { + num: NumberInt("195"), + value: "354459822" + }, + { + num: NumberInt("196"), + value: "354459818" + }, + { + num: NumberInt("197"), + value: "281500941" + }, + { + num: NumberInt("198"), + value: "118137431" + }, + { + num: NumberInt("199"), + value: "90109286" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("8"), + index: NumberInt("19"), + parentId: NumberInt("6"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop click next page", + sequence: [ + NumberInt("21"), + NumberInt("20") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("19"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("10"), + index: NumberInt("20"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("19"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("9"), + index: NumberInt("21"), + parentId: NumberInt("8"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("22") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("20"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("11"), + index: NumberInt("22"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("20"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para13_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "90109283" + }, + { + num: NumberInt("1"), + value: "50513650" + }, + { + num: NumberInt("2"), + value: "50513648" + }, + { + num: NumberInt("3"), + value: "33357134" + }, + { + num: NumberInt("4"), + value: "7245954" + }, + { + num: NumberInt("5"), + value: "7245951" + }, + { + num: NumberInt("6"), + value: "3891455" + }, + { + num: NumberInt("7"), + value: "1229749463" + }, + { + num: NumberInt("8"), + value: "1229749461" + }, + { + num: NumberInt("9"), + value: "1285033057" + }, + { + num: NumberInt("10"), + value: "973743950" + }, + { + num: NumberInt("11"), + value: "973743948" + }, + { + num: NumberInt("12"), + value: "1942092" + }, + { + num: NumberInt("13"), + value: "253722462" + }, + { + num: NumberInt("14"), + value: "253722335" + }, + { + num: NumberInt("15"), + value: "82407914" + }, + { + num: NumberInt("16"), + value: "82407911" + }, + { + num: NumberInt("17"), + value: "82407908" + }, + { + num: NumberInt("18"), + value: "82407905" + }, + { + num: NumberInt("19"), + value: "1951684507" + }, + { + num: NumberInt("20"), + value: "1951684506" + }, + { + num: NumberInt("21"), + value: "1229749431" + }, + { + num: NumberInt("22"), + value: "1229749430" + }, + { + num: NumberInt("23"), + value: "393715165" + }, + { + num: NumberInt("24"), + value: "326328022" + }, + { + num: NumberInt("25"), + value: "326328020" + }, + { + num: NumberInt("26"), + value: "326328018" + }, + { + num: NumberInt("27"), + value: "260100190" + }, + { + num: NumberInt("28"), + value: "260100188" + }, + { + num: NumberInt("29"), + value: "254220969" + }, + { + num: NumberInt("30"), + value: "228311833" + }, + { + num: NumberInt("31"), + value: "228311831" + }, + { + num: NumberInt("32"), + value: "210060917" + }, + { + num: NumberInt("33"), + value: "187609187" + }, + { + num: NumberInt("34"), + value: "159795705" + }, + { + num: NumberInt("35"), + value: "159795704" + }, + { + num: NumberInt("36"), + value: "75766452" + }, + { + num: NumberInt("37"), + value: "75766450" + }, + { + num: NumberInt("38"), + value: "55670240" + }, + { + num: NumberInt("39"), + value: "34810640" + }, + { + num: NumberInt("40"), + value: "34810639" + }, + { + num: NumberInt("41"), + value: "29726582" + }, + { + num: NumberInt("42"), + value: "29726581" + }, + { + num: NumberInt("43"), + value: "1858697035" + }, + { + num: NumberInt("44"), + value: "1858697033" + }, + { + num: NumberInt("45"), + value: "1858697032" + }, + { + num: NumberInt("46"), + value: "1777435770" + }, + { + num: NumberInt("47"), + value: "1777435769" + }, + { + num: NumberInt("48"), + value: "1052245220" + }, + { + num: NumberInt("49"), + value: "1052245219" + }, + { + num: NumberInt("50"), + value: "1048348328" + }, + { + num: NumberInt("51"), + value: "1048348326" + }, + { + num: NumberInt("52"), + value: "400977517" + }, + { + num: NumberInt("53"), + value: "388604050" + }, + { + num: NumberInt("54"), + value: "388604047" + }, + { + num: NumberInt("55"), + value: "255311792" + }, + { + num: NumberInt("56"), + value: "203282429" + }, + { + num: NumberInt("57"), + value: "186973126" + }, + { + num: NumberInt("58"), + value: "186973125" + }, + { + num: NumberInt("59"), + value: "185177971" + }, + { + num: NumberInt("60"), + value: "185177970" + }, + { + num: NumberInt("61"), + value: "185177784" + }, + { + num: NumberInt("62"), + value: "185177783" + }, + { + num: NumberInt("63"), + value: "185177782" + }, + { + num: NumberInt("64"), + value: "185177781" + }, + { + num: NumberInt("65"), + value: "185177780" + }, + { + num: NumberInt("66"), + value: "185177777" + }, + { + num: NumberInt("67"), + value: "185177776" + }, + { + num: NumberInt("68"), + value: "185177775" + }, + { + num: NumberInt("69"), + value: "78100776" + }, + { + num: NumberInt("70"), + value: "27573558" + }, + { + num: NumberInt("71"), + value: "27573555" + }, + { + num: NumberInt("72"), + value: "24987387" + }, + { + num: NumberInt("73"), + value: "16975109" + }, + { + num: NumberInt("74"), + value: "16975106" + }, + { + num: NumberInt("75"), + value: "16975097" + }, + { + num: NumberInt("76"), + value: "16975094" + }, + { + num: NumberInt("77"), + value: "15988374" + }, + { + num: NumberInt("78"), + value: "1311413" + }, + { + num: NumberInt("79"), + value: "1311412" + }, + { + num: NumberInt("80"), + value: "2438257093" + }, + { + num: NumberInt("81"), + value: "2438257092" + }, + { + num: NumberInt("82"), + value: "2438255994" + }, + { + num: NumberInt("83"), + value: "820957305" + }, + { + num: NumberInt("84"), + value: "820957303" + }, + { + num: NumberInt("85"), + value: "820957302" + }, + { + num: NumberInt("86"), + value: "820957301" + }, + { + num: NumberInt("87"), + value: "226192639" + }, + { + num: NumberInt("88"), + value: "3891509" + }, + { + num: NumberInt("89"), + value: "78101009" + }, + { + num: NumberInt("90"), + value: "290789975" + }, + { + num: NumberInt("91"), + value: "228312136" + }, + { + num: NumberInt("92"), + value: "228312135" + }, + { + num: NumberInt("93"), + value: "14488574" + }, + { + num: NumberInt("94"), + value: "14488570" + }, + { + num: NumberInt("95"), + value: "14488566" + }, + { + num: NumberInt("96"), + value: "14488562" + }, + { + num: NumberInt("97"), + value: "394985959" + }, + { + num: NumberInt("98"), + value: "1995654977" + }, + { + num: NumberInt("99"), + value: "1995654976" + }, + { + num: NumberInt("100"), + value: "1995654975" + }, + { + num: NumberInt("101"), + value: "1995654974" + }, + { + num: NumberInt("102"), + value: "213424133" + }, + { + num: NumberInt("103"), + value: "213424130" + }, + { + num: NumberInt("104"), + value: "170292253" + }, + { + num: NumberInt("105"), + value: "161172208" + }, + { + num: NumberInt("106"), + value: "161172207" + }, + { + num: NumberInt("107"), + value: "161172206" + }, + { + num: NumberInt("108"), + value: "146387025" + }, + { + num: NumberInt("109"), + value: "146386775" + }, + { + num: NumberInt("110"), + value: "146386774" + }, + { + num: NumberInt("111"), + value: "82407814" + }, + { + num: NumberInt("112"), + value: "71042065" + }, + { + num: NumberInt("113"), + value: "55670289" + }, + { + num: NumberInt("114"), + value: "55670285" + }, + { + num: NumberInt("115"), + value: "55670282" + }, + { + num: NumberInt("116"), + value: "55670279" + }, + { + num: NumberInt("117"), + value: "55670258" + }, + { + num: NumberInt("118"), + value: "55670255" + }, + { + num: NumberInt("119"), + value: "55670252" + }, + { + num: NumberInt("120"), + value: "55670249" + }, + { + num: NumberInt("121"), + value: "55670246" + }, + { + num: NumberInt("122"), + value: "55670243" + }, + { + num: NumberInt("123"), + value: "55670237" + }, + { + num: NumberInt("124"), + value: "55670234" + }, + { + num: NumberInt("125"), + value: "55670231" + }, + { + num: NumberInt("126"), + value: "34810522" + }, + { + num: NumberInt("127"), + value: "34810521" + }, + { + num: NumberInt("128"), + value: "27573564" + }, + { + num: NumberInt("129"), + value: "27573561" + }, + { + num: NumberInt("130"), + value: "27573552" + }, + { + num: NumberInt("131"), + value: "27573549" + }, + { + num: NumberInt("132"), + value: "7766972" + }, + { + num: NumberInt("133"), + value: "7766971" + }, + { + num: NumberInt("134"), + value: "2554792" + }, + { + num: NumberInt("135"), + value: "1827515833" + }, + { + num: NumberInt("136"), + value: "1827515832" + }, + { + num: NumberInt("137"), + value: "1624687897" + }, + { + num: NumberInt("138"), + value: "1272616475" + }, + { + num: NumberInt("139"), + value: "1272616474" + }, + { + num: NumberInt("140"), + value: "1272616473" + }, + { + num: NumberInt("141"), + value: "1189432129" + }, + { + num: NumberInt("142"), + value: "1025734705" + }, + { + num: NumberInt("143"), + value: "767259504" + }, + { + num: NumberInt("144"), + value: "767259503" + }, + { + num: NumberInt("145"), + value: "767259502" + }, + { + num: NumberInt("146"), + value: "672886496" + }, + { + num: NumberInt("147"), + value: "510101671" + }, + { + num: NumberInt("148"), + value: "510101670" + }, + { + num: NumberInt("149"), + value: "510101659" + }, + { + num: NumberInt("150"), + value: "510101658" + }, + { + num: NumberInt("151"), + value: "510101647" + }, + { + num: NumberInt("152"), + value: "510101646" + }, + { + num: NumberInt("153"), + value: "510101636" + }, + { + num: NumberInt("154"), + value: "510101635" + }, + { + num: NumberInt("155"), + value: "510101623" + }, + { + num: NumberInt("156"), + value: "510101622" + }, + { + num: NumberInt("157"), + value: "491668341" + }, + { + num: NumberInt("158"), + value: "482676606" + }, + { + num: NumberInt("159"), + value: "394985957" + }, + { + num: NumberInt("160"), + value: "394985955" + }, + { + num: NumberInt("161"), + value: "394985953" + }, + { + num: NumberInt("162"), + value: "394985951" + }, + { + num: NumberInt("163"), + value: "393715162" + }, + { + num: NumberInt("164"), + value: "350610441" + }, + { + num: NumberInt("165"), + value: "350610439" + }, + { + num: NumberInt("166"), + value: "350610437" + }, + { + num: NumberInt("167"), + value: "350610435" + }, + { + num: NumberInt("168"), + value: "350610433" + }, + { + num: NumberInt("169"), + value: "350610431" + }, + { + num: NumberInt("170"), + value: "350297749" + }, + { + num: NumberInt("171"), + value: "350297748" + }, + { + num: NumberInt("172"), + value: "312597304" + }, + { + num: NumberInt("173"), + value: "307776568" + }, + { + num: NumberInt("174"), + value: "291463696" + }, + { + num: NumberInt("175"), + value: "223365817" + }, + { + num: NumberInt("176"), + value: "162330057" + }, + { + num: NumberInt("177"), + value: "162330056" + }, + { + num: NumberInt("178"), + value: "149243459" + }, + { + num: NumberInt("179"), + value: "149243456" + }, + { + num: NumberInt("180"), + value: "34810539" + }, + { + num: NumberInt("181"), + value: "28373659" + }, + { + num: NumberInt("182"), + value: "6435711" + }, + { + num: NumberInt("183"), + value: "2780947" + }, + { + num: NumberInt("184"), + value: "2780946" + }, + { + num: NumberInt("185"), + value: "313471755" + }, + { + num: NumberInt("186"), + value: "2431414598" + }, + { + num: NumberInt("187"), + value: "33356853" + }, + { + num: NumberInt("188"), + value: "33356850" + }, + { + num: NumberInt("189"), + value: "33356847" + }, + { + num: NumberInt("190"), + value: "33356844" + }, + { + num: NumberInt("191"), + value: "71042392" + }, + { + num: NumberInt("192"), + value: "1799708916" + }, + { + num: NumberInt("193"), + value: "1799708911" + }, + { + num: NumberInt("194"), + value: "1799708906" + }, + { + num: NumberInt("195"), + value: "1799708901" + }, + { + num: NumberInt("196"), + value: "1799708896" + }, + { + num: NumberInt("197"), + value: "436408915" + }, + { + num: NumberInt("198"), + value: "400977525" + }, + { + num: NumberInt("199"), + value: "400977524" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ncbi.nlm.nih.gov/protein", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ncbi.nlm.nih.gov/protein" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("13"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])", + value: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop click next page_2", + nodeId: NumberInt("19"), + nodeName: "Loop click next page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ncbi.nlm.nih.gov/protein", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para12_text", + desc: "", + type: "string", + exampleValue: "23200204" + }, + { + id: NumberInt("1"), + name: "para13_text", + desc: "", + type: "string", + exampleValue: "90109283" + } + ], + url: "https://www.ncbi.nlm.nih.gov/protein" +} ); +db.getCollection("services").insert( { + _id: ObjectId("64083716e9c32379f083e877"), + containJudge: false, + desc: "https://www.ncbi.nlm.nih.gov/protein", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("3"), + NumberInt("12"), + NumberInt("5"), + NumberInt("16"), + NumberInt("17"), + NumberInt("24") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ncbi.nlm.nih.gov/protein", + links: "https://www.ncbi.nlm.nih.gov/protein", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("20"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"term\"]", + wait: NumberInt("0"), + value: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])" + } + }, + { + id: NumberInt("2"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("20"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"term\"]", + wait: NumberInt("0"), + value: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("20"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("20"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para14_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + }, + { + num: NumberInt("1"), + value: "23200203" + }, + { + num: NumberInt("2"), + value: "23200202" + }, + { + num: NumberInt("3"), + value: "23200201" + }, + { + num: NumberInt("4"), + value: "222447004" + }, + { + num: NumberInt("5"), + value: "222447001" + }, + { + num: NumberInt("6"), + value: "253722435" + }, + { + num: NumberInt("7"), + value: "253722434" + }, + { + num: NumberInt("8"), + value: "2194022" + }, + { + num: NumberInt("9"), + value: "2194020" + }, + { + num: NumberInt("10"), + value: "403242413" + }, + { + num: NumberInt("11"), + value: "403242412" + }, + { + num: NumberInt("12"), + value: "357380891" + }, + { + num: NumberInt("13"), + value: "357380890" + }, + { + num: NumberInt("14"), + value: "357380889" + }, + { + num: NumberInt("15"), + value: "357380888" + }, + { + num: NumberInt("16"), + value: "357380886" + }, + { + num: NumberInt("17"), + value: "357380885" + }, + { + num: NumberInt("18"), + value: "345100555" + }, + { + num: NumberInt("19"), + value: "345100554" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop click next page", + sequence: [ + NumberInt("10"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("6"), + parameters: { + history: NumberInt("22"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("10") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("22"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("22"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: false, + name: "para14_linktext", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[3]/div[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "Next >" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: false, + name: "para15_linkAddress", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[3]/div[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.ncbi.nlm.nih.gov/protein#" + } + ], + default: "" + }, + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: false, + name: "para16_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div[1]/div[1]/input[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "23200204" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("7"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("23"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("23"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para14_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "253722439" + }, + { + num: NumberInt("1"), + value: "253722438" + }, + { + num: NumberInt("2"), + value: "253722437" + }, + { + num: NumberInt("3"), + value: "253722436" + }, + { + num: NumberInt("4"), + value: "253722433" + }, + { + num: NumberInt("5"), + value: "253722432" + }, + { + num: NumberInt("6"), + value: "253722431" + }, + { + num: NumberInt("7"), + value: "253722430" + }, + { + num: NumberInt("8"), + value: "253722429" + }, + { + num: NumberInt("9"), + value: "253722428" + }, + { + num: NumberInt("10"), + value: "2981824" + }, + { + num: NumberInt("11"), + value: "443014" + }, + { + num: NumberInt("12"), + value: "443011" + }, + { + num: NumberInt("13"), + value: "1036305139" + }, + { + num: NumberInt("14"), + value: "1036305138" + }, + { + num: NumberInt("15"), + value: "1036305137" + }, + { + num: NumberInt("16"), + value: "1036305136" + }, + { + num: NumberInt("17"), + value: "1036305135" + }, + { + num: NumberInt("18"), + value: "1036305134" + }, + { + num: NumberInt("19"), + value: "228312556" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("3"), + index: NumberInt("12"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"search\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("14"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("8"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("15"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("16"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("6"), + index: NumberInt("17"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("18") + ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("9"), + index: NumberInt("18"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "253722439" + }, + { + num: NumberInt("1"), + value: "253722438" + }, + { + num: NumberInt("2"), + value: "253722437" + }, + { + num: NumberInt("3"), + value: "253722436" + }, + { + num: NumberInt("4"), + value: "253722433" + }, + { + num: NumberInt("5"), + value: "253722432" + }, + { + num: NumberInt("6"), + value: "253722431" + }, + { + num: NumberInt("7"), + value: "253722430" + }, + { + num: NumberInt("8"), + value: "253722429" + }, + { + num: NumberInt("9"), + value: "253722428" + }, + { + num: NumberInt("10"), + value: "2981824" + }, + { + num: NumberInt("11"), + value: "443014" + }, + { + num: NumberInt("12"), + value: "443011" + }, + { + num: NumberInt("13"), + value: "1036305139" + }, + { + num: NumberInt("14"), + value: "1036305138" + }, + { + num: NumberInt("15"), + value: "1036305137" + }, + { + num: NumberInt("16"), + value: "1036305136" + }, + { + num: NumberInt("17"), + value: "1036305135" + }, + { + num: NumberInt("18"), + value: "1036305134" + }, + { + num: NumberInt("19"), + value: "228312556" + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("19"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop click next page", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("10"), + index: NumberInt("20"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("21"), + parentId: NumberInt("7"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("11"), + index: NumberInt("22"), + parentId: NumberInt("7"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("23") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/form[1]/div[1]/div[4]/div[1]/div[5]/div/div[1]/input[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("12"), + index: NumberInt("23"), + parentId: NumberInt("11"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("3"), + contentType: NumberInt("0"), + relative: true, + name: "para2_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "20150903" + }, + { + num: NumberInt("1"), + value: "20150902" + }, + { + num: NumberInt("2"), + value: "20150901" + }, + { + num: NumberInt("3"), + value: "20150900" + }, + { + num: NumberInt("4"), + value: "409187959" + }, + { + num: NumberInt("5"), + value: "354459760" + }, + { + num: NumberInt("6"), + value: "354459759" + }, + { + num: NumberInt("7"), + value: "347948701" + }, + { + num: NumberInt("8"), + value: "228312287" + }, + { + num: NumberInt("9"), + value: "228312284" + }, + { + num: NumberInt("10"), + value: "119389935" + }, + { + num: NumberInt("11"), + value: "75765233" + }, + { + num: NumberInt("12"), + value: "75765230" + }, + { + num: NumberInt("13"), + value: "75765227" + }, + { + num: NumberInt("14"), + value: "75765224" + }, + { + num: NumberInt("15"), + value: "75765221" + }, + { + num: NumberInt("16"), + value: "75765218" + }, + { + num: NumberInt("17"), + value: "75765215" + }, + { + num: NumberInt("18"), + value: "75765178" + }, + { + num: NumberInt("19"), + value: "461641" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("7"), + index: NumberInt("24"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("20"), + NumberInt("22") + ], + isInLoop: false, + position: NumberInt("6"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "//*[@id=\"EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ncbi.nlm.nih.gov/protein", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ncbi.nlm.nih.gov/protein" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("3"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])", + value: "peptide[All Fields] AND (\"5\"[SLEN] : \"10\"[SLEN])" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("24"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ncbi.nlm.nih.gov/protein", + name: "seqseek", + outputParameters: [ + { + id: NumberInt("0"), + name: "para14_text", + desc: "", + type: "string", + exampleValue: "23200204" + }, + { + id: NumberInt("1"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "253722439" + }, + { + id: NumberInt("2"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "20150903" + } + ], + url: "https://www.ncbi.nlm.nih.gov/protein" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640ad073e9c32379f083e87a"), + containJudge: false, + desc: "https://en.wikipedia.org/wiki/World_Wide_Web", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://en.wikipedia.org/wiki/World_Wide_Web", + links: "https://en.wikipedia.org/wiki/World_Wide_Web", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[3]/main[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tToggle the table of contents\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\n\t\n\t\t\n\n\t\tToggle the table of contents\n\t\n\t\n\n\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\t\t\t\t\t\n\t\t\t\t\tWorld Wide Web\n\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\n\t\n\t\t\n\n\t\t140 languages\n\t\n\t\n\n\t\t\n\t\t\t\n\t\t\tAfrikaansAlemannischÆngliscالعربيةAragonésঅসমীয়াAsturianuAzərbaycancaتۆرکجهবাংলাBân-lâm-gúБашҡортсаБеларускаяБеларуская (тарашкевіца)भोजपुरीБългарскиBosanskiBrezhonegCatalàČeštinaCorsuCymraegDanskالدارجةDeitschDeutschEestiΕλληνικάEmiliàn e rumagnòlEspañolEsperantoEuskaraفارسیFøroysktFrançaisGaeilgeGalego贛語گیلکیગુજરાતી客家語/Hak-kâ-ngî한국어HausaՀայերենहिन्दीHrvatskiIlokanoBahasa IndonesiaInterlinguaIsiZuluÍslenskaItalianoעבריתJawaಕನ್ನಡქართულიҚазақшаKernowekKiswahiliKriyòl gwiyannenKurdîКыргызчаLadinoLatinaLatviešuLëtzebuergeschLietuviųLingua Franca NovaLombardMagyarमैथिलीМакедонскиMalagasyമലയാളംमराठीمصرىمازِرونیBahasa MelayuМонголမြန်မာဘာသာNederlandsनेपाल भाषा日本語NordfriiskNorsk bokmålNorsk nynorskOccitanОлык марийOʻzbekcha / ўзбекчаਪੰਜਾਬੀپنجابیPapiamentuپښتوPatoisភាសាខ្មែរPicardPolskiPortuguêsQaraqalpaqshaRomânăRumantschRuna SimiРусиньскыйРусскийСаха тылаSarduScotsShqipSicilianuසිංහලSimple EnglishسنڌيSlovenčinaSlovenščinaSoomaaligaکوردیСрпски / srpskiSrpskohrvatski / српскохрватскиSuomiSvenskaTagalogதமிழ்TaqbaylitТатарча / tatarçaไทยТоҷикӣTürkçeУкраїнськаاردوVènetoTiếng ViệtVõroWalonWinarayWolof吴语ייִדיש粵語Zazaki中文131 more\n\t\t\t\n\t\t\n\n\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\n\t\t\n\t\tArticleTalk\n\t\t\n\t\n\n\n\t\t\t\t\t\t\t\t\n\n\n\t\n\t\n\t\t\n\t\tEnglish\n\t\n\t\n\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\n\t\t\n\t\tReadView sourceView history\n\t\t\n\t\n\n\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\n\t\n\t\n\t\t\n\t\tMore\n\t\n\t\n\n\t\n\t\t\n\t\tReadView sourceView history\n\t\t\n\t\n\n\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\n\t\t\n\n\t\t\t\t\t\tFrom Wikipedia, the free encyclopedia\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tSystem of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages—and to move from one web page to another through hyperlinks—came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org – The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better source needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious – discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万维网), which satisfies www and literally means \"myriad-dimensional net\",[45][better source needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories – a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5 billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information—such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations—groups of interested and often competing parties chartered with the task of standardization—not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3986 allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any character in the Universal Character Set—and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52–58. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN 978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p. 2. ISBN 9780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN 978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN 978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript – The definitive guide (6 ed.). p. 1. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification – W3C Recommendation – Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME – and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary – Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press – Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 978-0596001728. OCLC 49502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX 10.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265–269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11–14 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, Ł., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241–52.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? – an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 – New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1–2. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp. 68–69, 127. ISBN 978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp. 4–5. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p. 7. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards – Mastering HTML5, CSS3, and XML. Apress. ISBN 978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBrügger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol – HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erdős Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" · \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Puskás\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\n.mw-parser-output .tooltip-dotted{border-bottom:1px dotted;cursor:help}showAuthority control National libraries\nSpain\nFrance\nBnF data\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNARA\n\n\n\n\n\n<img src=\"//en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1\" alt=\"\" title=\"\" width=\"1\" height=\"1\" style=\"border: none; position: absolute;\" />\nRetrieved from \"https://en.wikipedia.org/w/index.php?title=World_Wide_Web&oldid=1137206274\"\n\t\t\t\t\tCategories: World Wide WebComputer-related introductions in 1989English inventionsBritish inventionsHuman–computer interactionInformation AgeCERNTim Berners-LeeWeb technology20th-century inventionsHidden categories: Wikipedia articles needing page number citations from September 2016CS1 errors: missing periodicalCS1 maint: multiple names: authors listArticles with short descriptionShort description is different from WikidataWikipedia semi-protected pagesWikipedia indefinitely move-protected pagesEngvarB from February 2020Use dmy dates from October 2022Articles containing potentially dated statements from 1997All articles containing potentially dated statementsAll articles lacking reliable referencesArticles lacking reliable references from August 2022All accuracy disputesArticles with disputed statements from July 2019Articles lacking reliable references from November 2016Articles containing Chinese-language textArticles lacking reliable references from April 2018All articles with unsourced statementsArticles with unsourced statements from March 2021Commons category link is on WikidataArticles with Curlie linksWebarchive template wayback linksArticles with BNE identifiersArticles with BNF identifiersArticles with GND identifiersArticles with J9U identifiersArticles with LCCN identifiersArticles with LNB identifiersArticles with NKC identifiersArticles with FAST identifiersArticles with NARA identifiers\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://en.wikipedia.org/wiki/World_Wide_Web", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://en.wikipedia.org/wiki/World_Wide_Web" + } + ], + links: "https://en.wikipedia.org/wiki/World_Wide_Web", + name: "Wiki_WWW", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tToggle the table of contents\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\n\t\n\t\t\n\n\t\tToggle the table of contents\n\t\n\t\n\n\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\t\t\t\t\t\n\t\t\t\t\tWorld Wide Web\n\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\n\t\n\t\t\n\n\t\t140 languages\n\t\n\t\n\n\t\t\n\t\t\t\n\t\t\tAfrikaansAlemannischÆngliscالعربيةAragonésঅসমীয়াAsturianuAzərbaycancaتۆرکجهবাংলাBân-lâm-gúБашҡортсаБеларускаяБеларуская (тарашкевіца)भोजपुरीБългарскиBosanskiBrezhonegCatalàČeštinaCorsuCymraegDanskالدارجةDeitschDeutschEestiΕλληνικάEmiliàn e rumagnòlEspañolEsperantoEuskaraفارسیFøroysktFrançaisGaeilgeGalego贛語گیلکیગુજરાતી客家語/Hak-kâ-ngî한국어HausaՀայերենहिन्दीHrvatskiIlokanoBahasa IndonesiaInterlinguaIsiZuluÍslenskaItalianoעבריתJawaಕನ್ನಡქართულიҚазақшаKernowekKiswahiliKriyòl gwiyannenKurdîКыргызчаLadinoLatinaLatviešuLëtzebuergeschLietuviųLingua Franca NovaLombardMagyarमैथिलीМакедонскиMalagasyമലയാളംमराठीمصرىمازِرونیBahasa MelayuМонголမြန်မာဘာသာNederlandsनेपाल भाषा日本語NordfriiskNorsk bokmålNorsk nynorskOccitanОлык марийOʻzbekcha / ўзбекчаਪੰਜਾਬੀپنجابیPapiamentuپښتوPatoisភាសាខ្មែរPicardPolskiPortuguêsQaraqalpaqshaRomânăRumantschRuna SimiРусиньскыйРусскийСаха тылаSarduScotsShqipSicilianuසිංහලSimple EnglishسنڌيSlovenčinaSlovenščinaSoomaaligaکوردیСрпски / srpskiSrpskohrvatski / српскохрватскиSuomiSvenskaTagalogதமிழ்TaqbaylitТатарча / tatarçaไทยТоҷикӣTürkçeУкраїнськаاردوVènetoTiếng ViệtVõroWalonWinarayWolof吴语ייִדיש粵語Zazaki中文131 more\n\t\t\t\n\t\t\n\n\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\n\t\t\n\t\tArticleTalk\n\t\t\n\t\n\n\n\t\t\t\t\t\t\t\t\n\n\n\t\n\t\n\t\t\n\t\tEnglish\n\t\n\t\n\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\n\t\t\n\t\tReadView sourceView history\n\t\t\n\t\n\n\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\n\t\n\t\n\t\t\n\t\tMore\n\t\n\t\n\n\t\n\t\t\n\t\tReadView sourceView history\n\t\t\n\t\n\n\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\n\t\t\n\n\t\t\t\t\t\tFrom Wikipedia, the free encyclopedia\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tSystem of interlinked hypertext documents accessed over the Internet\n.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}This article is about the global system of pages accessed via URLs. For the worldwide computer network, see Internet. For the web browser, see WorldWideWeb.\n\"WWW\" and \"The Web\" redirect here. For other uses, see WWW (disambiguation) and The Web (disambiguation).\n\n\n\n\n The historic World Wide Web logo, designed by Robert Cailliau\n A web page displayed in a web browser\n A global map of the Web Index for countries in 2014\nThe World Wide Web (WWW), commonly known as the Web, is an information system enabling documents and other web resources to be accessed over the Internet.[1] \nDocuments and downloadable media are made available to the network through web servers and can be accessed by programs such as web browsers. Servers and resources on the World Wide Web are identified and located through character strings called uniform resource locators (URLs). The original and still very common document type is a web page formatted in Hypertext Markup Language (HTML). This markup language supports plain text, images, embedded video and audio contents, and scripts (short programs) that implement complex user interaction. The HTML language also supports hyperlinks (embedded URLs) which provide immediate access to other web resources. Web navigation, or web surfing, is the common practice of following such hyperlinks across multiple websites. Web applications are web pages that function as application software. The information in the Web is transferred across the Internet using the Hypertext Transfer Protocol (HTTP).\nMultiple web resources with a common theme and usually a common domain name make up a website. A single web server may provide multiple websites, while some websites, especially the most popular ones, may be provided by multiple servers. Website content is provided by a myriad of companies, organizations, government agencies, and individual users; and comprises an enormous amount of educational, entertainment, commercial, and government information.\nThe World Wide Web has become the world's dominant software platform.[2][3][4][5] It is the primary tool billions of people worldwide use to interact with the Internet.[6]\nThe Web was invented by Tim Berners-Lee at CERN in 1989 and opened to the public in 1991. It was conceived as a \"universal linked information system\".[7]\n\n\nHistory\nMain article: History of the World Wide Web\n This NeXT Computer was used by Sir Tim Berners-Lee at CERN and became the world's first Web server.\nThe Web was invented by English computer scientist Tim Berners-Lee while working at CERN. He conceived it as an information management system using several concepts and technologies, the most fundamental of which was the connections that existed between information.[8][9][10] The first proposal was written in 1989,[7] and a working system implemented by the end of 1990 including the WorldWideWeb browser and an HTTP server.[11] The technology was released outside CERN to other research institutions starting in January 1991, and then to the general public on 23 August 1991. The Web was a success at CERN, and began to spread to other scientific and academic institutions. Within the next two years, there were 50 websites created.[12][13]\nCERN made the Web protocol and code available royalty free in 1993, enabling its widespread use.[14][15] After the NCSA released the Mosaic web browser later that year, the Web's popularity grew rapidly as thousands of websites sprang up in less than a year.[16][17] Mosaic was a graphical browser that could display inline images and submit forms that were processed by the HTTPd server.[18][19] Marc Andreessen and Jim Clark founded Netscape the following year and released the Navigator browser, which introduced Java and JavaScript to the Web. It quickly became the dominant browser. Netscape became a public company in 1995 which triggered a frenzy for the Web and started the dot-com bubble.[20] Microsoft responded by developing its own browser, Internet Explorer, starting the browser wars. By bundling it with Windows, it became the dominant browser for 14 years.[21]\nTim Berners-Lee founded the World Wide Web Consortium (W3C) which created XML in 1996 and recommended replacing HTML with stricter XHTML.[22] In the meantime, developers began exploiting an IE feature called XMLHttpRequest to make Ajax applications and launched the Web 2.0 revolution. Mozilla, Opera, and Apple rejected XHTML and created the WHATWG which developed HTML5.[23] In 2009, the W3C conceded and abandoned XHTML[24] and in 2019, ceded control of the HTML specification to the WHATWG.[25]\nThe World Wide Web has been central to the development of the Information Age and is the primary tool billions of people use to interact on the Internet.[26][27][28][29][30]\n\nFunction\nMain articles: HTTP and HTML\n The World Wide Web functions as an application layer protocol that is run \"on top of\" (figuratively) the Internet, helping to make it more functional. The advent of the Mosaic web browser helped to make the web much more usable, to include the display of images and moving images (GIFs).\nThe terms Internet and World Wide Web are often used without much distinction. However, the two terms do not mean the same thing. The Internet is a global system of computer networks interconnected through telecommunications and optical networking. In contrast, the World Wide Web is a global collection of documents and other resources, linked by hyperlinks and URIs. Web resources are accessed using HTTP or HTTPS, which are application-level Internet protocols that use the Internet's transport protocols.[31]\nViewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web browser or by following a hyperlink to that page or resource. The web browser then initiates a series of background communication messages to fetch and display the requested page. In the 1990s, using a browser to view web pages—and to move from one web page to another through hyperlinks—came to be known as 'browsing,' 'web surfing' (after channel surfing), or 'navigating the Web'. Early studies of this new behavior investigated user patterns in using web browsers. One study, for example, found five user patterns: exploratory surfing, window surfing, evolved surfing, bounded navigation and targeted navigation.[32]\nThe following example demonstrates the functioning of a web browser when accessing a page at the URL http://example.org/home.html. The browser resolves the server name of the URL (example.org) into an Internet Protocol address using the globally distributed Domain Name System (DNS). This lookup returns an IP address such as 203.0.113.4 or 2001:db8:2e::7334. The browser then requests the resource by sending an HTTP request across the Internet to the computer at that address. It requests service from a specific TCP port number that is well known for the HTTP service so that the receiving host can distinguish an HTTP request from other network protocols it may be servicing. HTTP normally uses port number 80 and for HTTPS it normally uses port number 443. The content of the HTTP request can be as simple as two lines of text:\n\nGET /home.html HTTP/1.1\nHost: example.org\n\nThe computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the webserver can fulfill the request it sends an HTTP response back to the browser indicating success:\n\nHTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\nfollowed by the content of the requested page. Hypertext Markup Language (HTML) for a basic web page might look like this:\n\n<html>\n <head>\n <title>Example.org – The World Wide Web\n \n \n

The World Wide Web, abbreviated as WWW and commonly known ...

\n \n\n\nThe web browser parses the HTML and interprets the markup (, <p> for paragraph, and such) that surrounds the words to format the text on the screen. Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts that affect page behaviour, and Cascading Style Sheets that affect page layout. The browser makes additional HTTP requests to the web server for these other Internet media types. As it receives their content from the web server, the browser progressively renders the page onto the screen as specified by its HTML and these additional resources.\n\nHTML\nMain article: HTML\nHypertext Markup Language (HTML) is the standard markup language for creating web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it forms a triad of cornerstone technologies for the World Wide Web.[33]\nWeb browsers receive HTML documents from a web server or from local storage and render the documents into multimedia web pages. HTML describes the structure of a web page semantically and originally included cues for the appearance of the document.\nHTML elements are the building blocks of HTML pages. With HTML constructs, images and other objects such as interactive forms may be embedded into the rendered page. HTML provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements are delineated by tags, written using angle brackets. Tags such as <img /> and <input /> directly introduce content into the page. Other tags such as <p> surround and provide information about document text and may include other tags as sub-elements. Browsers do not display the HTML tags, but use them to interpret the content of the page.\nHTML can embed programs written in a scripting language such as JavaScript, which affects the behavior and content of web pages. Inclusion of CSS defines the look and layout of content. The World Wide Web Consortium (W3C), maintainer of both the HTML and the CSS standards, has encouraged the use of CSS over explicit presentational HTML since 1997.[update][34]\n\nLinking\nMost web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents, definitions and other web resources. In the underlying HTML, a hyperlink looks like this:\n<a href=\"http://example.org/home.html\">Example.org Homepage</a>.\n\n Graphic representation of a minute fraction of the WWW, demonstrating hyperlinks\nSuch a collection of useful, related resources, interconnected via hypertext links is dubbed a web of information. Publication on the Internet created what Tim Berners-Lee first called the WorldWideWeb (in its original CamelCase, which was subsequently discarded) in November 1990.[35]\nThe hyperlink structure of the web is described by the webgraph: the nodes of the web graph correspond to the web pages (or URLs) the directed edges between them to the hyperlinks. Over time, many web resources pointed to by hyperlinks disappear, relocate, or are replaced with different content. This makes hyperlinks obsolete, a phenomenon referred to in some circles as link rot, and the hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to archive websites. The Internet Archive, active since 1996, is the best known of such efforts.\n\nWWW prefix\nMany hostnames used for the World Wide Web begin with www because of the long-standing practice of naming Internet hosts according to the services they provide. The hostname of a web server is often www, in the same way that it may be ftp for an FTP server, and news or nntp for a Usenet news server. These hostnames appear as Domain Name System (DNS) or subdomain names, as in www.example.com. The use of www is not required by any technical or policy standard and many web sites do not use it; the first web server was nxoc01.cern.ch.[36] According to Paolo Palazzi, who worked at CERN along with Tim Berners-Lee, the popular use of www as subdomain was accidental; the World Wide Web project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home page; however the DNS records were never switched, and the practice of prepending www to an institution's website domain name was subsequently copied.[37][better source needed] Many established websites still use the prefix, or they employ other subdomain names such as www2, secure or en for special purposes. Many such web servers are set up so that both the main domain name (e.g., example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or the other, or they may map to different web sites. The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result cannot be achieved by using the bare domain root.[38][dubious – discuss]\nWhen a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers automatically try adding the prefix \"www\" to the beginning of it and possibly \".com\", \".org\" and \".net\" at the end, depending on what might be missing. For example, entering \"microsoft\" may be transformed to http://www.microsoft.com/ and \"openoffice\" to http://www.openoffice.org. This feature started appearing in early versions of Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in browsers such as Lynx.[39][unreliable source?] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only for mobile devices.[40]\nIn English, www is usually read as double-u double-u double-u.[41] Some users pronounce it dub-dub-dub, particularly in New Zealand.[42] Stephen Fry, in his \"Podgrams\" series of podcasts, pronounces it wuh wuh wuh.[43] The English writer Douglas Adams once quipped in The Independent on Sunday (1999): \"The World Wide Web is the only thing I know of whose shortened form takes three times longer to say than what it's short for\".[44] In Mandarin Chinese, World Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万维网), which satisfies www and literally means \"myriad-dimensional net\",[45][better source needed] a translation that reflects the design concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is officially spelled as three separate words, each capitalised, with no intervening hyphens.[46] Nonetheless, it is often called simply the Web, and also often the web; see Capitalization of Internet for details. Use of the www prefix has been declining, especially when Web 2.0 web applications sought to brand their domain names and make them easily pronounceable.[47]\nAs the mobile Web grew in popularity, services like Gmail.com, Outlook.com, Myspace.com, Facebook.com and Twitter.com are most often mentioned without adding \"www.\" (or, indeed, \".com\") to the domain.\n\nScheme specifiers\nThe scheme specifiers http:// and https:// at the start of a web URI refer to Hypertext Transfer Protocol or HTTP Secure, respectively. They specify the communication protocol to use for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web, and the added encryption layer in HTTPS is essential when browsers send or retrieve confidential data, such as passwords or banking information. Web browsers usually automatically prepend http:// to user-entered URIs, if omitted.\n\nPages\nMain article: Web page\n A screenshot of a web page on Wikimedia Commons\nA web page (also written as webpage) is a document that is suitable for the World Wide Web and web browsers. A web browser displays a web page on a monitor or mobile device.\nThe term web page usually refers to what is visible, but may also refer to the contents of the computer file itself, which is usually a text file containing hypertext written in HTML or a comparable markup language. Typical web pages provide hypertext for browsing to other web pages via hyperlinks, often referred to as links. Web browsers will frequently have to access multiple web resource elements, such as reading style sheets, scripts, and images, while presenting each web page.\nOn a network, a web browser can retrieve a web page from a remote web server. The web server may restrict access to a private network such as a corporate intranet. The web browser uses the Hypertext Transfer Protocol (HTTP) to make such requests to the web server.\nA static web page is delivered exactly as stored, as web content in the web server's file system. In contrast, a dynamic web page is generated by a web application, usually driven by server-side software. Dynamic web pages are used when each user may require completely different information, for example, bank websites, web email etc.\n\nStatic page\nMain article: Static web page\nA static web page (sometimes called a flat page/stationary page) is a web page that is delivered to the user exactly as stored, in contrast to dynamic web pages which are generated by a web application.\nConsequently, a static web page displays the same information for all users, from all contexts, subject to modern capabilities of a web server to negotiate content-type or language of the document where such versions are available and the server is configured to do so.\n\nDynamic pages\nMain articles: Dynamic web page and Ajax (programming)\n Dynamic web page: example of server-side scripting (PHP and MySQL)\nA server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, including the setting up of more client-side processing.\nA client-side dynamic web page processes the web page using JavaScript running in the browser. JavaScript programs can interact with the document via Document Object Model, or DOM, to query page state and alter it. The same client-side techniques can then dynamically update or change the DOM in the same way.\nA dynamic web page is then reloaded by the user or by a computer program to change some variable content. The updating information could come from the server, or from changes made to that page's DOM. This may or may not truncate the browsing history or create a saved version to go back to, but a dynamic web page update using Ajax technologies will neither create a page to go back to nor truncate the web browsing history forward of the displayed page. Using Ajax technologies the end user gets one dynamic page managed as a single page in the web browser while the actual web content rendered on that page can vary. The Ajax engine sits only on the browser requesting parts of its DOM, the DOM, for its client, from an application server.\nDynamic HTML, or DHTML, is the umbrella term for technologies and methods used to create web pages that are not static web pages, though it has fallen out of common use since the popularization of AJAX, a term which is now itself rarely used.[citation needed] Client-side-scripting, server-side scripting, or a combination of these make for the dynamic web experience in a browser.\nJavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use within web pages.[48] The standardised version is ECMAScript.[48] To make web pages more interactive, some web applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is delivered with the page that can make additional HTTP requests to the server, either in response to user actions such as mouse movements or clicks, or based on elapsed time. The server's responses are used to modify the current page rather than creating a new page with each response, so the server needs only to provide limited, incremental information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data is retrieved. Web pages may also regularly poll the server to check whether new information is available.[49]\n\nWebsite\n The usap.gov website\nMain article: Website\nA website[50] is a collection of related web resources including web pages, multimedia content, typically identified with a common domain name, and published on at least one web server. Notable examples are wikipedia.org, google.com, and amazon.com.\nA website may be accessible via a public Internet Protocol (IP) network, such as the Internet, or a private local area network (LAN), by referencing a uniform resource locator (URL) that identifies the site.\nWebsites can have many functions and can be used in various fashions; a website can be a personal website, a corporate website for a company, a government website, an organization website, etc. Websites are typically dedicated to a particular topic or purpose, ranging from entertainment and social networking to providing news and education. All publicly accessible websites collectively constitute the World Wide Web, while private websites, such as a company's website for its employees, are typically a part of an intranet.\nWeb pages, which are the building blocks of websites, are documents, typically composed in plain text interspersed with formatting instructions of Hypertext Markup Language (HTML, XHTML). They may incorporate elements from other websites with suitable markup anchors. Web pages are accessed and transported with the Hypertext Transfer Protocol (HTTP), which may optionally employ encryption (HTTP Secure, HTTPS) to provide security and privacy for the user. The user's application, often a web browser, renders the page content according to its HTML markup instructions onto a display terminal.\nHyperlinking between web pages conveys to the reader the site structure and guides the navigation of the site, which often starts with a home page containing a directory of the site web content. Some websites require user registration or subscription to access content. Examples of subscription websites include many business sites, news websites, academic journal websites, gaming websites, file-sharing websites, message boards, web-based email, social networking websites, websites providing real-time price quotations for different types of markets, as well as sites providing various other services. End users can access websites on a range of devices, including desktop and laptop computers, tablet computers, smartphones and smart TVs.\n\nBrowser\nMain article: Web browser\nA web browser (commonly referred to as a browser) is a software user agent for accessing information on the World Wide Web. To connect to a website's server and display its pages, a user needs to have a web browser program. This is the program that the user runs to download, format, and display a web page on the user's computer.\nIn addition to allowing users to find, display, and move between web pages, a web browser will usually have features like keeping bookmarks, recording history, managing cookies (see below), and home pages and may have facilities for recording passwords for logging into web sites.\nThe most popular browsers are Chrome, Firefox, Safari, Internet Explorer, and Edge.\n\nServer\nMain article: Web server\n The inside and front of a Dell PowerEdge web server, a computer designed for rack mounting\nA Web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols.\nThe primary function of a web server is to store, process and deliver web pages to clients.[51] The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.\n\n Multiple web servers may be used for a high traffic website; here, Dell servers are installed together to be used for the Wikimedia Foundation.\nA user agent, commonly a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so. The resource is typically a real file on the server's secondary storage, but this is not necessarily the case and depends on how the webserver is implemented.\nWhile the primary function is to serve content, full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files.\nMany generic web servers also support server-side scripting using Active Server Pages (ASP), PHP (Hypertext Preprocessor), or other scripting languages. This means that the behavior of the webserver can be scripted in separate files, while the actual server software remains unchanged. Usually, this function is used to generate HTML documents dynamically (\"on-the-fly\") as opposed to returning static documents. The former is primarily used for retrieving or modifying information from databases. The latter is typically much faster and more easily cached but cannot deliver dynamic content.\nWeb servers can also frequently be found embedded in devices such as printers, routers, webcams and serving only a local network. The web server may then be used as a part of a system for monitoring or administering the device in question. This usually means that no additional software has to be installed on the client computer since only a web browser is required (which now is included with most operating systems).\n\nCookie\nMain article: HTTP cookie\nAn HTTP cookie (also called web cookie, Internet cookie, browser cookie, or simply cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information (such as items added in the shopping cart in an online store) or to record the user's browsing activity (including clicking particular buttons, logging in, or recording which pages were visited in the past). They can also be used to remember arbitrary pieces of information that the user previously entered into form fields such as names, addresses, passwords, and credit card numbers.\nCookies perform essential functions in the modern web. Perhaps most importantly, authentication cookies are the most common method used by web servers to know whether the user is logged in or not, and which account they are logged in with. Without such a mechanism, the site would not know whether to send a page containing sensitive information or require the user to authenticate themselves by logging in. The security of an authentication cookie generally depends on the security of the issuing website and the user's web browser, and on whether the cookie data is encrypted. Security vulnerabilities may allow a cookie's data to be read by a hacker, used to gain access to user data, or used to gain access (with the user's credentials) to the website to which the cookie belongs (see cross-site scripting and cross-site request forgery for examples).[52]\nTracking cookies, and especially third-party tracking cookies, are commonly used as ways to compile long-term records of individuals' browsing histories – a potential privacy concern that prompted European[53] and U.S. lawmakers to take action in 2011.[54][55] European law requires that all websites targeting European Union member states gain \"informed consent\" from users before storing non-essential cookies on their device.\nGoogle Project Zero researcher Jann Horn describes ways cookies can be read by intermediaries, like Wi-Fi hotspot providers. He recommends using the browser in incognito mode in such circumstances.[56]\n\nSearch engine\nMain article: Search engine\n The results of a search for the term \"lunar eclipse\" in a web-based image search engine\nA web search engine or Internet search engine is a software system that is designed to carry out web search (Internet search), which means to search the World Wide Web in a systematic way for particular information specified in a web search query. The search results are generally presented in a line of results, often referred to as search engine results pages (SERPs). The information may be a mix of web pages, images, videos, infographics, articles, research papers, and other types of files. Some search engines also mine data available in databases or open directories. Unlike web directories, which are maintained only by human editors, search engines also maintain real-time information by running an algorithm on a web crawler.\nInternet content that is not capable of being searched by a web search engine is generally described as the deep web.\n\nDeep web\nMain article: Deep web\nThe deep web,[57] invisible web,[58] or hidden web[59] are parts of the World Wide Web whose contents are not indexed by standard web search engines. The opposite term to the deep web is the surface web, which is accessible to anyone using the Internet.[60] Computer scientist Michael K. Bergman is credited with coining the term deep web in 2001 as a search indexing term.[61]\nThe content of the deep web is hidden behind HTTP forms,[62][63] and includes many very common uses such as web mail, online banking, and services that users must pay for, and which is protected by a paywall, such as video on demand, some online magazines and newspapers, among others.\nThe content of the deep web can be located and accessed by a direct URL or IP address, and may require a password or other security access past the public website page.\n\nCaching\nA web cache is a server computer located either on the public Internet or within an enterprise that stores recently accessed web pages to improve response time for users when the same content is requested within a certain time after the original request. Most web browsers also implement a browser cache by writing recently obtained data to a local data storage device. HTTP requests by a browser may ask only for data that has changed since the last access. Web pages and resources may contain expiration information to control caching to secure sensitive data, such as in online banking, or to facilitate frequently updated sites, such as news media. Even sites with highly dynamic content may permit basic resources to be refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and JavaScript into a few site-wide files so that they can be cached efficiently. Enterprise firewalls often cache Web resources requested by one user for the benefit of many users. Some search engines store cached content of frequently accessed websites.\n\nSecurity\nFor criminals, the Web has become a venue to spread malware and engage in a range of cybercrimes, including (but not limited to) identity theft, fraud, espionage and intelligence gathering.[64] Web-based vulnerabilities now outnumber traditional computer security concerns,[65][66] and as measured by Google, about one in ten web pages may contain malicious code.[67] Most web-based attacks take place on legitimate websites, and most, as measured by Sophos, are hosted in the United States, China and Russia.[68] The most common of all malware threats is SQL injection attacks against websites.[69] Through HTML and URIs, the Web was vulnerable to attacks like cross-site scripting (XSS) that came with the introduction of JavaScript[70] and were exacerbated to some degree by Web 2.0 and Ajax web design that favours the use of scripts.[71] Today by one estimate, 70% of all websites are open to XSS attacks on their users.[72] Phishing is another common threat to the Web. In February 2013, RSA (the security division of EMC) estimated the global losses from phishing at $1.5 billion in 2012.[73] Two of the well-known phishing methods are Covert Redirect and Open Redirect.\nProposed solutions vary. Large security companies like McAfee already design governance and compliance suites to meet post-9/11 regulations,[74] and some, like Finjan have recommended active real-time inspection of programming code and all content regardless of its source.[64] Some have argued that for enterprises to see Web security as a business opportunity rather than a cost centre,[75] while others call for \"ubiquitous, always-on digital rights management\" enforced in the infrastructure to replace the hundreds of companies that secure data and networks.[76] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking down the Internet.[77]\n\nPrivacy\nMain article: Internet privacy\nEvery time a client requests a web page, the server can identify the request's IP address. Web servers usually log IP addresses in a log file. Also, unless set not to do so, most web browsers record requested web pages in a viewable history feature, and usually cache much of the content locally. Unless the server-browser communication uses HTTPS encryption, web requests and responses travel in plain text across the Internet and can be viewed, recorded, and cached by intermediate systems. Another way to hide personally identifiable information is by using a virtual private network. A VPN encrypts online traffic and masks the original IP address lowering the chance of user identification.\nWhen a web page asks for, and the user supplies, personally identifiable information—such as their real name, address, e-mail address, etc. web-based entities can associate current web traffic with that individual. If the website uses HTTP cookies, username, and password authentication, or other tracking techniques, it can relate other web visits, before and after, to the identifiable information provided. In this way, a web-based organization can develop and build a profile of the individual people who use its site or sites. It may be able to build a record for an individual that includes information about their leisure activities, their shopping interests, their profession, and other aspects of their demographic profile. These profiles are of potential interest to marketers, advertisers, and others. Depending on the website's terms and conditions and the local laws that apply information from these profiles may be sold, shared, or passed to other organizations without the user being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box or some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement, counter-terrorism, and espionage agencies can also identify, target, and track individuals based on their interests or proclivities on the Web.\nSocial networking sites usually try to get users to use their real names, interests, and locations, rather than pseudonyms, as their executives believe that this makes the social networking experience more engaging for users. On the other hand, uploaded photographs or unguarded statements can be identified to an individual, who may regret this exposure. Employers, schools, parents, and other relatives may be influenced by aspects of social networking profiles, such as text posts or digital photos, that the posting individual did not intend for these audiences. Online bullies may make use of personal information to harass or stalk users. Modern social networking websites allow fine-grained control of the privacy settings for each posting, but these can be complex and not easy to find or use, especially for beginners.[78] Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an online profile. With modern and potential facial recognition technology, it may then be possible to relate that face with other, previously anonymous, images, events, and scenarios that have been imaged elsewhere. Due to image caching, mirroring, and copying, it is difficult to remove an image from the World Wide Web.\n\nStandards\nMain article: Web standards\nWeb standards include many interdependent standards and specifications, some of which govern aspects of the Internet, not just the World Wide Web. Even when not web-focused, such standards directly or indirectly affect the development and administration of websites and web services. Considerations include the interoperability, accessibility and usability of web pages and web sites.\nWeb standards, in the broader sense, consist of the following:\n\nRecommendations published by the World Wide Web Consortium (W3C)[79]\n\"Living Standard\" made by the Web Hypertext Application Technology Working Group (WHATWG)\nRequest for Comments (RFC) documents published by the Internet Engineering Task Force (IETF)[80]\nStandards published by the International Organization for Standardization (ISO)[81]\nStandards published by Ecma International (formerly ECMA)[82]\nThe Unicode Standard and various Unicode Technical Reports (UTRs) published by the Unicode Consortium[83]\nName and number registries maintained by the Internet Assigned Numbers Authority (IANA)[84]\nWeb standards are not fixed sets of rules but are constantly evolving sets of finalized technical specifications of web technologies.[85] Web standards are developed by standards organizations—groups of interested and often competing parties chartered with the task of standardization—not technologies developed and declared to be a standard by a single individual or company. It is crucial to distinguish those specifications that are under development from the ones that already reached the final development status (in the case of W3C specifications, the highest maturity level).\n\nAccessibility\nMain article: Web accessibility\nThere are methods for accessing the Web in alternative mediums and formats to facilitate use by individuals with disabilities. These disabilities may be visual, auditory, physical, speech-related, cognitive, neurological, or some combination. Accessibility features also help people with temporary disabilities, like a broken arm, or ageing users as their abilities change.[86] The Web receives information as well as providing information and interacting with society. The World Wide Web Consortium claims that it is essential that the Web be accessible, so it can provide equal access and equal opportunity to people with disabilities.[87] Tim Berners-Lee once noted, \"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.\"[86] Many countries regulate web accessibility as a requirement for websites.[88] International co-operation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as software developers can use to make the Web accessible to persons who may or may not be using assistive technology.[86][89]\n\nInternationalisation\nThe W3C Internationalisation Activity assures that web technology works in all languages, scripts, and cultures.[90] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both ASCII and Western European as the Web's most frequently used character encoding.[91] Originally .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:\"\\\"\"\"\\\"\"\"'\"\"'\"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url(\"//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url(\"//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url(\"//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg\")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url(\"//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg\")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3986 allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any character in the Universal Character Set—and now a resource can be identified by IRI in any language.[92]\n\nSee also\n.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:solid #aaa 1px;padding:0.1em;background:#f9f9f9}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}\nEngineering portalInternet portalWorld portal\n.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}\nElectronic publishing\nInternet metaphors\nInternet security\nLists of websites\nStreaming media\nWeb development tools\nWeb literacy\n\nReferences\n.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Retrieved 16 July 2015.\n\n^ Bleigh, Michael (16 May 2014). \"The Once And Future Web Platform\". TechCrunch. Retrieved 9 March 2022.\n\n^ \"World Wide Web Timeline\". Pews Research Center. 11 March 2014. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways The Web Has Changed Us\". The Washington Post. Retrieved 1 August 2015.\n\n^ \"Website Analytics Tool\". Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". W3C Help and FAQ. W3C. 2009. Archived from the original on 9 July 2015. Retrieved 16 July 2015.\n\n^ Jump up to: a b Berners-Lee, Tim. \"Information Management: A Proposal\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ Berners-Lee, T.; Cailliau, R.; Groff, J.-F.; Pollermann, B. (1992). \"World-Wide Web: The Information Universe\". Electron. Netw. Res. Appl. Policy. 2: 52–58. doi:10.1108/eb047254.\n\n^ Quittner, Joshua (29 March 1999). \"Network Designer Tim Berners-Lee\". Time Magazine. Archived from the original on 15 August 2007. Retrieved 17 May 2010. He wove the World Wide Web and created a mass medium for the 21st century. The World Wide Web is Berners-Lee's alone. He designed it. He set it loose it on the world. And he more than anyone else has fought to keep it an open, non-proprietary and free.[page needed]\n\n^ McPherson, Stephanie Sammartino (2009). Tim Berners-Lee: Inventor of the World Wide Web. Twenty-First Century Books. ISBN 978-0-8225-7273-2.\n\n^ W3 (1991) Re: Qualifiers on Hypertext links\n\n^ Hopgood, Bob. \"History of the Web\". w3.org. The World Wide Web Consortium. Retrieved 12 February 2022.\n\n^ \"A short history of the Web\". CERN. Retrieved 15 April 2022.\n\n^ \"Software release of WWW into public domain\". CERN Document Server. CERN. Retrieved 17 February 2022.\n\n^ \"Ten Years Public Domain for the Original Web Software\". Tenyears-www.web.cern.ch. 30 April 2003. Archived from the original on 13 August 2009. Retrieved 27 July 2009.\n\n^ Calore, Michael (22 April 2010). \"April 22, 1993: Mosaic Browser Lights Up Web With Color, Creativity\". Wired. Retrieved 12 February 2022.\n\n^ Couldry, Nick (2012). Media, Society, World: Social Theory and Digital Media Practice. London: Polity Press. p. 2. ISBN 9780745639208.\n\n^ Hoffman, Jay (21 April 1993). \"The Origin of the IMG Tag\". The History of the Web. Retrieved 13 February 2022.\n\n^ Clarke, Roger. \"The Birth of Web Commerce\". Roger Clarke's Web-Site. XAMAX. Retrieved 15 February 2022.\n\n^ McCullough, Brian. \"20 YEARS ON: WHY NETSCAPE'S IPO WAS THE \"BIG BANG\" OF THE INTERNET ERA\". www.internethistorypodcast.com. INTERNET HISTORY PODCAST. Retrieved 12 February 2022.\n\n^ Calore, Michael (28 September 2009). \"Sept. 28, 1998: Internet Explorer Leaves Netscape in Its Wake\". Wired. Retrieved 14 February 2022.\n\n^ Daly, Janet (26 January 2000). \"World Wide Web Consortium Issues XHTML 1.0 as a Recommendation\". W3C. Retrieved 8 March 2022.\n\n^ Hickson, Ian. \"WHAT open mailing list announcement\". whatwg.org. WHATWG. Retrieved 16 February 2022.\n\n^ Shankland, Stephen (9 July 2009). \"An epitaph for the Web standard, XHTML 2\". CNet. Retrieved 17 February 2022.\n\n^ \"Memorandum of Understanding Between W3C and WHATWG\". w3.org. W3C. Retrieved 16 February 2022.\n\n^ In, Lee (30 June 2012). Electronic Commerce Management for Business Activities and Global Enterprises: Competitive Advantages: Competitive Advantages. IGI Global. ISBN 978-1-4666-1801-5.\n\n^ Misiroglu, Gina (26 March 2015). American Countercultures: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History: An Encyclopedia of Nonconformists, Alternative Lifestyles, and Radical Ideas in U.S. History. Routledge. ISBN 978-1-317-47729-7.\n\n^ \"World Wide Web Timeline\". Pew Research Center. 11 March 2014. Archived from the original on 29 July 2015. Retrieved 1 August 2015.\n\n^ Dewey, Caitlin (12 March 2014). \"36 Ways the Web Has Changed Us\". The Washington Post. Archived from the original on 9 September 2015. Retrieved 1 August 2015.\n\n^ \"Internet Live Stats\". Archived from the original on 2 July 2015. Retrieved 1 August 2015.\n\n^ \"What is the difference between the Web and the Internet?\". World Wide Web Consortium. Archived from the original on 22 April 2016. Retrieved 18 April 2016.\n\n^ Muylle, Steve; Moenaert, Rudy; Despont, Marc (1999). \"A grounded theory of World Wide Web search behaviour\". Journal of Marketing Communications. 5 (3): 143. doi:10.1080/135272699345644.\n\n^ Flanagan, David. JavaScript – The definitive guide (6 ed.). p. 1. JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages.\n\n^ \"HTML 4.0 Specification – W3C Recommendation – Conformance: requirements and recommendations\". World Wide Web Consortium. 18 December 1997. Retrieved 6 July 2015.\n\n^ Berners-Lee, Tim; Cailliau, Robert (12 November 1990). \"WorldWideWeb: Proposal for a HyperText Project\". Archived from the original on 2 May 2015. Retrieved 12 May 2015.\n\n^ Berners-Lee, Tim. \"Frequently asked questions by the Press\". W3C. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Palazzi, P (2011). \"The Early Days of the WWW at CERN\". Archived from the original on 23 July 2012.\n\n^ Fraser, Dominic (13 May 2018). \"Why a domain's root can't be a CNAME – and other tidbits about the DNS\". FreeCodeCamp.\n\n^ \"automatically adding www.___.com\". mozillaZine. 16 May 2003. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ Masnick, Mike (7 July 2008). \"Microsoft Patents Adding 'www.' And '.com' To Text\". Techdirt. Archived from the original on 27 June 2009. Retrieved 27 May 2009.\n\n^ \"Audible pronunciation of 'WWW'\". Oxford University Press. Archived from the original on 25 May 2014. Retrieved 25 May 2014.\n\n^ Harvey, Charlie. \"How we pronounce WWW in English: a detailed but unscientific survey\". charlieharvey.org.uk. Retrieved 19 May 2022.\n\n^ \"Stephen Fry's pronunciation of 'WWW'\". Podcasts.com. Archived from the original on 4 April 2017.\n\n^ Simonite, Tom (22 July 2008). \"Help us find a better way to pronounce www\". newscientist.com. New Scientist, Technology. Archived from the original on 13 March 2016. Retrieved 7 February 2016.\n\n^ \"MDBG Chinese-English dictionary – Translate\". Archived from the original on 12 November 2008. Retrieved 27 July 2009.\n\n^ \"Frequently asked questions by the Press – Tim BL\". W3.org. Archived from the original on 2 August 2009. Retrieved 27 July 2009.\n\n^ Castelluccio, Michael (2010). \"It's not your grandfather's Internet\". thefreelibrary.com. Institute of Management Accountants. Retrieved 7 February 2016.\n\n^ Jump up to: a b Hamilton, Naomi (31 July 2008). \"The A-Z of Programming Languages: JavaScript\". Computerworld. IDG. Archived from the original on 24 May 2009. Retrieved 12 May 2009.\n\n^ Buntin, Seth (23 September 2008). \"jQuery Polling plugin\". Archived from the original on 13 August 2009. Retrieved 22 August 2009.\n\n^ \"website\". TheFreeDictionary.com. Retrieved 2 July 2011.\n\n^ Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 978-0596001728. OCLC 49502686.\n\n^ Vamosi, Robert (14 April 2008). \"Gmail cookie stolen via Google Spreadsheets\". News.cnet.com. Archived from the original on 9 December 2013. Retrieved 19 October 2017.\n\n^ \"What about the \"EU Cookie Directive\"?\". WebCookies.org. 2013. Archived from the original on 11 October 2017. Retrieved 19 October 2017.\n\n^ \"New net rules set to make cookies crumble\". BBC. 8 March 2011.\n\n^ \"Sen. Rockefeller: Get Ready for a Real Do-Not-Track Bill for Online Advertising\". Adage.com. 6 May 2011.\n\n^ Want to use my wifi?, Jann Horn accessed 5 January 2018.\n\n^ Hamilton, Nigel. \"The Mechanics of a Deep Net Metasearch Engine\". CiteSeerX 10.1.1.90.5847. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ Devine, Jane; Egger-Sider, Francine (July 2004). \"Beyond google: the invisible web in the academic library\". The Journal of Academic Librarianship. 30 (4): 265–269. doi:10.1016/j.acalib.2004.04.010.\n\n^ Raghavan, Sriram; Garcia-Molina, Hector (11–14 September 2001). \"Crawling the Hidden Web\". 27th International Conference on Very Large Data Bases.\n\n^ \"Surface Web\". Computer Hope. Retrieved 20 June 2018.\n\n^ Wright, Alex (22 February 2009). \"Exploring a 'Deep Web' That Google Can't Grasp\". The New York Times. Retrieved 23 February 2009.\n\n^ Madhavan, J., Ko, D., Kot, Ł., Ganapathy, V., Rasmussen, A., & Halevy, A. (2008). Google's deep web crawl. Proceedings of the VLDB Endowment, 1(2), 1241–52.\n\n^ Shedden, Sam (8 June 2014). \"How Do You Want Me to Do It? Does It Have to Look like an Accident? – an Assassin Selling a Hit on the Net; Revealed Inside the Deep Web\". Sunday Mail. Archived from the original on 1 March 2020. Retrieved 5 May 2017.\n\n^ Jump up to: a b Ben-Itzhak, Yuval (18 April 2008). \"Infosecurity 2008 – New defence strategy in battle against e-crime\". ComputerWeekly. Reed Business Information. Archived from the original on 4 June 2008. Retrieved 20 April 2008.\n\n^ Christey, Steve & Martin, Robert A. (22 May 2007). \"Vulnerability Type Distributions in CVE (version 1.1)\". MITRE Corporation. Archived from the original on 17 March 2013. Retrieved 7 June 2008.\n\n^ \"Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary)\" (PDF). XIII. Symantec Corp. April 2008: 1–2. Archived (PDF) from the original on 25 June 2008. Retrieved 11 May 2008. {{cite journal}}: Cite journal requires |journal= (help)\n\n^ \"Google searches web's dark side\". BBC News. 11 May 2007. Archived from the original on 7 March 2008. Retrieved 26 April 2008.\n\n^ \"Security Threat Report (Q1 2008)\" (PDF). Sophos. Archived (PDF) from the original on 31 December 2013. Retrieved 24 April 2008.\n\n^ \"Security threat report\" (PDF). Sophos. July 2008. Archived (PDF) from the original on 31 December 2013. Retrieved 24 August 2008.\n\n^ Fogie, Seth, Jeremiah Grossman, Robert Hansen, and Anton Rager (2007). Cross Site Scripting Attacks: XSS Exploits and Defense (PDF). Syngress, Elsevier Science & Technology. pp. 68–69, 127. ISBN 978-1-59749-154-9. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008.{{cite book}}: CS1 maint: multiple names: authors list (link)\n\n^ O'Reilly, Tim (30 September 2005). \"What Is Web 2.0\". O'Reilly Media. pp. 4–5. Archived from the original on 15 April 2013. Retrieved 4 June 2008. and AJAX web applications can introduce security vulnerabilities like \"client-side security controls, increased attack surfaces, and new possibilities for Cross-Site Scripting (XSS)\", in Ritchie, Paul (March 2007). \"The security risks of AJAX/web 2.0 applications\" (PDF). Infosecurity. Archived from the original (PDF) on 25 June 2008. Retrieved 6 June 2008. which cites Hayre, Jaswinder S. & Kelath, Jayasankar (22 June 2006). \"Ajax Security Basics\". SecurityFocus. Archived from the original on 15 May 2008. Retrieved 6 June 2008.\n\n^ Berinato, Scott (1 January 2007). \"Software Vulnerability Disclosure: The Chilling Effect\". CSO. CXO Media. p. 7. Archived from the original on 18 April 2008. Retrieved 7 June 2008.\n\n^ \"2012 Global Losses From phishing Estimated At $1.5 Bn\". FirstPost. 20 February 2013. Archived from the original on 21 December 2014. Retrieved 25 January 2019.\n\n^ Prince, Brian (9 April 2008). \"McAfee Governance, Risk and Compliance Business Unit\". eWEEK. Ziff Davis Enterprise Holdings. Retrieved 25 April 2008.\n\n^ Preston, Rob (12 April 2008). \"Down To Business: It's Past Time To Elevate The Infosec Conversation\". InformationWeek. United Business Media. Archived from the original on 14 April 2008. Retrieved 25 April 2008.\n\n^ Claburn, Thomas (6 February 2007). \"RSA's Coviello Predicts Security Consolidation\". InformationWeek. United Business Media. Archived from the original on 7 February 2009. Retrieved 25 April 2008.\n\n^ Duffy Marsan, Carolyn (9 April 2008). \"How the iPhone is killing the 'Net\". Network World. IDG. Archived from the original on 14 April 2008. Retrieved 17 April 2008.\n\n^ boyd, danah; Hargittai, Eszter (July 2010). \"Facebook privacy settings: Who cares?\". First Monday. 15 (8). doi:10.5210/fm.v15i8.3086.\n\n^ \"W3C Technical Reports and Publications\". W3C. Retrieved 19 January 2009.\n\n^ \"IETF RFC page\". IETF. Archived from the original on 2 February 2009. Retrieved 19 January 2009.\n\n^ \"Search for World Wide Web in ISO standards\". ISO. Retrieved 19 January 2009.\n\n^ \"Ecma formal publications\". Ecma. Retrieved 19 January 2009.\n\n^ \"Unicode Technical Reports\". Unicode Consortium. Retrieved 19 January 2009.\n\n^ \"IANA home page\". IANA. Retrieved 19 January 2009.\n\n^ Sikos, Leslie (2011). Web standards – Mastering HTML5, CSS3, and XML. Apress. ISBN 978-1-4302-4041-9. Archived from the original on 2 April 2015. Retrieved 12 March 2019.\n\n^ Jump up to: a b c \"Web Accessibility Initiative (WAI)\". World Wide Web Consortium. Archived from the original on 2 April 2009. Retrieved 7 April 2009.\n\n^ \"Developing a Web Accessibility Business Case for Your Organization: Overview\". World Wide Web Consortium. Archived from the original on 14 April 2009. Retrieved 7 April 2009.\n\n^ \"Legal and Policy Factors in Developing a Web Accessibility Business Case for Your Organization\". World Wide Web Consortium. Archived from the original on 5 April 2009. Retrieved 7 April 2009.\n\n^ \"Web Content Accessibility Guidelines (WCAG) Overview\". World Wide Web Consortium. Archived from the original on 1 April 2009. Retrieved 7 April 2009.\n\n^ \"Internationalization (I18n) Activity\". World Wide Web Consortium. Archived from the original on 16 April 2009. Retrieved 10 April 2009.\n\n^ Davis, Mark (5 April 2008). \"Moving to Unicode 5.1\". Archived from the original on 21 May 2009. Retrieved 10 April 2009.\n\n^ \"World Wide Web Consortium Supports the IETF URI Standard and IRI Proposed Standard\" (Press release). World Wide Web Consortium. 26 January 2005. Archived from the original on 7 February 2009. Retrieved 10 April 2009.\n\n\nFurther reading\nBerners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris; Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). \"Architecture of the World Wide Web, Volume One\". Version 20041215. W3C. {{cite journal}}: Cite journal requires |journal= (help)\nBerners-Lee, Tim (August 1996). \"The World Wide Web: Past, Present and Future\". {{cite journal}}: Cite journal requires |journal= (help)\nBrügger, Niels, ed, Web25: Histories from the first 25 years of the World Wide Web (Peter Lang, 2017).\nFielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). \"Hypertext Transfer Protocol – HTTP/1.1\". Request For Comments 2616. Information Sciences Institute. {{cite journal}}: Cite journal requires |journal= (help)\nNiels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including issues of culture, content, and preservation.\nPolo, Luciano (2003). \"World Wide Web Technology Architecture: A Conceptual Analysis\". New Devices.\nSkau, H.O. (March 1990). \"The World Wide Web and Health Information\". New Devices.\nExternal links\n.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}\n\n\nWikimedia Commons has media related to World Wide Web.\n\n\n\n\nWikibooks has a book on the topic of: Nets, Webs and the Information Infrastructure\n\nThe first website\nEarly archive of the first Web site\nInternet Statistics: Growth and Usage of the Web and the Internet\nLiving Internet A comprehensive history of the Internet, including the World Wide Web\nWeb Design and Development at Curlie\nWorld Wide Web Consortium (W3C)\nW3C Recommendations Reduce \"World Wide Wait\"\nWorld Wide Web Size Daily estimated size of the World Wide Web\nAntonio A. Casilli, Some Elements for a Sociology of Online Interactions\nThe Erdős Webgraph Server Archived 1 March 2021 at the Wayback Machine offers weekly updated graph representation of a constantly increasing fraction of the WWW\nThe 25th Anniversary of the World Wide Web Archived 11 July 2021 at the Wayback Machine is an animated video produced by USAID and TechChange which explores the role of the WWW in addressing extreme poverty\n.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:\": \"}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:\" · \";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:\" (\";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:\")\";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:\" \"counter(listitem)\"\\a0 \"}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:\" (\"counter(listitem)\"\\a0 \"}.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}show.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}vteTelecommunicationsHistory\nBeacon\nBroadcasting\nCable protection system\nCable TV\nCommunications satellite\nComputer network\nData compression\naudio\nDCT\nimage\nvideo\nDigital media\nInternet video\nonline video platform\nsocial media\nstreaming\nDrums\nEdholm's law\nElectrical telegraph\nFax\nHeliographs\nHydraulic telegraph\nInformation Age\nInformation revolution\nInternet\nMass media\nMobile phone\nSmartphone\nOptical telecommunication\nOptical telegraphy\nPager\nPhotophone\nPrepaid mobile phone\nRadio\nRadiotelephone\nSatellite communications\nSemaphore\nSemiconductor\ndevice\nMOSFET\ntransistor\nSmoke signals\nTelecommunications history\nTelautograph\nTelegraphy\nTeleprinter (teletype)\nTelephone\nThe Telephone Cases\nTelevision\ndigital\nstreaming\nUndersea telegraph line\nVideotelephony\nWhistled language\nWireless revolution\nPioneers\nNasir Ahmed\nEdwin Howard Armstrong\nMohamed M. Atalla\nJohn Logie Baird\nPaul Baran\nJohn Bardeen\nAlexander Graham Bell\nEmile Berliner\nTim Berners-Lee\nFrancis Blake (telephone)\nJagadish Chandra Bose\nCharles Bourseul\nWalter Houser Brattain\nVint Cerf\nClaude Chappe\nYogen Dalal\nDaniel Davis Jr.\nDonald Davies\nAmos Dolbear\nThomas Edison\nLee de Forest\nPhilo Farnsworth\nReginald Fessenden\nElisha Gray\nOliver Heaviside\nRobert Hooke\nErna Schneider Hoover\nHarold Hopkins\nGardiner Greene Hubbard\nInternet pioneers\nBob Kahn\nDawon Kahng\nCharles K. Kao\nNarinder Singh Kapany\nHedy Lamarr\nInnocenzo Manzetti\nGuglielmo Marconi\nRobert Metcalfe\nAntonio Meucci\nSamuel Morse\nJun-ichi Nishizawa\nCharles Grafton Page\nRadia Perlman\nAlexander Stepanovich Popov\nTivadar Puskás\nJohann Philipp Reis\nClaude Shannon\nAlmon Brown Strowger\nHenry Sutton\nCharles Sumner Tainter\nNikola Tesla\nCamille Tissot\nAlfred Vail\nThomas A. Watson\nCharles Wheatstone\nVladimir K. Zworykin\nTransmissionmedia\nCoaxial cable\nFiber-optic communication\noptical fiber\nFree-space optical communication\nMolecular communication\nRadio waves\nwireless\nTransmission line\ndata transmission circuit\ntelecommunication circuit\nNetwork topologyand switching\nBandwidth\nLinks\nNodes\nterminal\nNetwork switching\ncircuit\npacket\nTelephone exchange\nMultiplexing\nSpace-division\nFrequency-division\nTime-division\nPolarization-division\nOrbital angular-momentum\nCode-division\nConcepts\nCommunication protocol\nComputer network\nData transmission\nStore and forward\nTelecommunications equipment\nTypes of network\nCellular network\nEthernet\nISDN\nLAN\nMobile\nNGN\nPublic Switched Telephone\nRadio\nTelevision\nTelex\nUUCP\nWAN\nWireless network\nNotable networks\nARPANET\nBITNET\nCYCLADES\nFidoNet\nInternet\nInternet2\nJANET\nNPL network\nToasternet\nUsenet\nLocations\nAfrica\nAmericas\nNorth\nSouth\nAntarctica\nAsia\nEurope\nOceania\n(Global telecommunications regulation bodies)\n\n Telecommunication portal\n Category\n Outline\n Commons\n\nshowvteWeb syndication\nHistory\nBlogging\nPodcasting\nVlogging\nWeb syndication technology\nTypes\nArt\nBloggernacle\nClassical music\nCorporate\nDream diary\nEdublog\nElectronic journal\nFake\nFamily\nFashion\nFood\nHealth\nLaw\nLifelog\nLitblog\nMP3\nNews\nPhotoblog\nPolice\nPolitical\nProject\nReverse\nTravel\nWarblog\nTechnologyGeneral\nBitTorrent\nFeed URI scheme\nFeatures\nLinkback\nPermalink\nPing\nPingback\nReblogging\nRefback\nRollback\nTrackback\nMechanism\nConversation threading\nGeotagging\nRSS enclosure\nSynchronization\nMemetics\nAtom feed\nData feed\nPhotofeed\nProduct feed\nRDF feed\nWeb feed\nRSS\nGeoRSS\nMRSS\nRSS TV\nSocial\nInter-process communication\nLivemark\nMashup\nReferencing\nRSS editor\nRSS tracking\nStreaming media\nStandard\nOML\nOPML\nRSS Advisory Board\nUsenet\nWorld Wide Web\nXBEL\nXOXO\nForm\nAudio podcast\nEnhanced podcast\nMobilecast\nNarrowcasting\nPeercasting\nScreencast\nSlidecasting\nVideocast\nWebcomic\nWebtoon\nWeb series\n\nAnonymous blogging\nCollaborative blog\nColumnist\nInstant messaging\nLiveblogging\nMicroblog\nMobile blogging\nRoblog\nSpam blog\nVideo blogging\nMotovlogging\nMediaAlternative media\nCarnivals\nFiction\nJournalism\nCitizen\nDatabase\nOnline diary\nSearch engines\nSideblog\nSoftware\nWeb directory\nMicromedia\nAggregation\nNews\nPoll\nReview\nSearch\nVideo\nAtom\nAtomPub\nBroadcatching\nHashtag\nNewsML\n1\nG2\nSocial communication\nSocial software\nWeb Slice\nRelated\nBlogosphere\nEscribitionist\nGlossary of blogging\nPay per click\nPosting style\nSlashdot effect\nSpam in blogs\nUses of podcasting\n\nshowvteSemantic WebBackground\nDatabases\nHypertext\nInternet\nOntologies\nSemantics\nSemantic networks\nWorld Wide Web\nSub-topics\nDataspaces\nHyperdata\nLinked data\nRule-based systems\nApplications\nSemantic analytics\nSemantic broker\nSemantic computing\nSemantic mapper\nSemantic matching\nSemantic publishing\nSemantic reasoner\nSemantic search\nSemantic service-oriented architecture\nSemantic wiki\nSolid\nRelated topics\nCollective intelligence\nDescription logic\nFolksonomy\nGeotagging\nInformation architecture\nKnowledge extraction\nKnowledge management\nKnowledge representation and reasoning\nLibrary 2.0\nDigital library\nDigital humanities\nMetadata\nReferences\nTopic map\nWeb 2.0\nWeb engineering\nWeb Science Trust\nStandardsSyntax and supporting technologies\nHTTP\nIRI\nURI\nRDF\ntriples\nRDF/XML\nJSON-LD\nTurtle\nTriG\nNotation3\nN-Triples\nTriX (no W3C standard)\nRRID\nSPARQL\nXML\nSemantic HTML\nSchemas, ontologies and rules\nCommon Logic\nOWL\nRDFS\nRule Interchange Format\nSemantic Web Rule Language\nALPS\nSHACL\nSemantic annotation\neRDF\nGRDDL\nMicrodata\nMicroformats\nRDFa\nSAWSDL\nFacebook Platform\nCommon vocabularies\nDOAP\nDublin Core\nFOAF\nSchema.org\nSIOC\nSKOS\nMicroformat vocabularies\nhAtom\nhCalendar\nhCard\nhProduct\nhRecipe\nhReview\n\n.mw-parser-output .tooltip-dotted{border-bottom:1px dotted;cursor:help}showAuthority control National libraries\nSpain\nFrance\nBnF data\nGermany\nIsrael\nUnited States\nLatvia\nCzech Republic\nOther\nFAST\nNARA\n\n\n\n\n\n<img src=\"//en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1\" alt=\"\" title=\"\" width=\"1\" height=\"1\" style=\"border: none; position: absolute;\" />\nRetrieved from \"https://en.wikipedia.org/w/index.php?title=World_Wide_Web&oldid=1137206274\"\n\t\t\t\t\tCategories: World Wide WebComputer-related introductions in 1989English inventionsBritish inventionsHuman–computer interactionInformation AgeCERNTim Berners-LeeWeb technology20th-century inventionsHidden categories: Wikipedia articles needing page number citations from September 2016CS1 errors: missing periodicalCS1 maint: multiple names: authors listArticles with short descriptionShort description is different from WikidataWikipedia semi-protected pagesWikipedia indefinitely move-protected pagesEngvarB from February 2020Use dmy dates from October 2022Articles containing potentially dated statements from 1997All articles containing potentially dated statementsAll articles lacking reliable referencesArticles lacking reliable references from August 2022All accuracy disputesArticles with disputed statements from July 2019Articles lacking reliable references from November 2016Articles containing Chinese-language textArticles lacking reliable references from April 2018All articles with unsourced statementsArticles with unsourced statements from March 2021Commons category link is on WikidataArticles with Curlie linksWebarchive template wayback linksArticles with BNE identifiersArticles with BNF identifiersArticles with GND identifiersArticles with J9U identifiersArticles with LCCN identifiersArticles with LNB identifiersArticles with NKC identifiersArticles with FAST identifiersArticles with NARA identifiers\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t" + } + ], + url: "https://en.wikipedia.org/wiki/World_Wide_Web" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640ad26e8d65a900bf805a56"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "HomeFavoritesElectronicsExpand: ElectronicsMost popular categoriesSmartphones and accessoriesVideo games and consolesComputers and tabletsCameras and photosCamera dronesRefurbishedSmart homeMore categoriesAppleSamsungPortable audio and headphonesEmerging brandsSmart watchesDealsSell on eBay\n\n\n\n\n\n\n\n\n\nMotorsExpand: MotorsCarAuto and truck partsTools and suppliesTurbo chargersClothing and merchandiseShock absorbersElectronic and GPSAir intakeVintage piecesMotorcycle and moreMotorcycle partsBody and frameEngines and partsAccessoriesExhausts and systemsRimsDealsSell on eBay\n\n\n\n\n\n\n\n\n\nFashionExpand: FashionMost popular categoriesFootwearWomen's clothingFootwear for womenMen's clothingMen's footwearWatchesJewelryMore categoriesAccessories for menAccessories for womenBags and wallets for womenMens sunglassesWomens sunglasessSneakersDealsSell on eBay\n\n\n\n\n\n\n\n\n\nCollectibles and ArtExpand: Collectibles and ArtMost popular categoriesCollectiblesArtAction figuresCartoon charactersMovie and TV charactersDiecastMusical memorabiliaMore categoriesSports memorabiliaTrading card gamesAntiquesComicsFunko popStar WarsDealsSell on eBay\n\n\n\n\n\n\n\n\n\nSportsExpand: SportsMost popular categoriesCyclingFitness, running and yogaFitness TechFishingCampingScootersTeam sportsMore categoriesWatersportsWinter sportsBox and MMASwimmingGPS & Running WatchesGarminDealsSell on eBay\n\n\n\n\n\n\n\n\n\nHealth & BeautyExpand: Health & BeautyMost popular categoriesBeautyMakeupHealthK-BeautyManicure and pedicureHair productsSkin productsOrthopedic productsMore categoriesVitamins and food supplementsShaving and waxingBath and personal hygieneOral hygieneMassagersDealsSell on eBay\n\n\n\n\n\n\n\n\n\nIndustrial equipmentExpand: Industrial equipmentMost popular categoriesDental healthcareElectronic equipment and suppliesMetallurgy and manufacturingMotors and industrial automationHeavy equipment partsLight industrial toolsInspection, measurement and testing equipmentMore categoriesPacking and shippingOffice supplies and equipmentPrinting and graphic artsRestaurants and food serviceMaintenance and safetyRetail and servicesDealsSell on eBay\n\n\n\n\n\n\n\n\n\nHome & GardenExpand: Home & GardenMost popular categoriesWorkshop Tools and EquipmentPatio, garden and outdoorsHome improvementKitchen, dining and barLamps, lights and fansInterior decorationHome organizationHome appliancesMore categoriesToysPetsCraftsArt suppliesMusical instrumentsJewelry and beadsDealsSell on eBay\n\n\n\n\n\n\n\n\n\nDealsSellExpand: SellHow to create a listingJoin our growth programSeller centerSeller updatesSeller customer serviceeBay managed paymentsLearn to selleBay storeseBay feesSelling limits\n\n\n\n\n\n\n\n\n\nMore Expand: MoreElectronicsMotorsFashionCollectibles and ArtSportsHealth & BeautyIndustrial equipmentHome & GardenDealsSell(window.$ebay||($ebay = {})).tracking={pageId:'2380057',pageName:'Highline_Homepage'} <div class=\"hl-image hl-full-bleed-banner__image\" style=\"background-image: url('https://i.ebayimg.com/images/g/xN4AAOSw-sZj-IK6/s-l1600.webp')\"><img src=https://i.ebayimg.com/images/g/xN4AAOSw-sZj-IK6/s-l1600.webp alt role=presentation></div>Featured Women SellersInternational Women's DayShop now Shop now <div class=\"hl-image hl-full-bleed-banner__image\" style=\"background-image: url('https://i.ebayimg.com/images/g/eBQAAOSw3m5j-dgN/s-l1600.webp')\"><img src=https://i.ebayimg.com/images/g/eBQAAOSw3m5j-dgN/s-l1600.webp alt role=presentation></div>Save when you shop refurbishedReliable brands, excellent quality, great prices.Buy it now Buy it now These Deals Won’t Stick AroundSave on headphonesBuy it now Buy it now - <div class=\"hl-image hl-multi-cta-banner__image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/3nUAAOSw4yti83jq/s-l400.webp alt=apple></div><div class=\"hl-image hl-multi-cta-banner__image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/LdgAAOSw4dFi83j2/s-l400.webp alt=Beats></div><div class=\"hl-image hl-multi-cta-banner__image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/6zIAAOSwKMBi83kH/s-l400.webp alt=sony></div>Popular CategoriesSee allPopular Categories<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/A9sAAOSw4bJjBe-V/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/A9sAAOSw4bJjBe-V/s-l200.webp alt></div>Daily Deals<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/bbUAAOSw3JhjBe-V/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/bbUAAOSw3JhjBe-V/s-l200.webp alt></div>Auto Parts & Accessories<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/FuoAAOSwNaRjBe-T/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/FuoAAOSwNaRjBe-T/s-l200.webp alt></div>eBay Refurbished<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/tOsAAOSwgn1jBe-V/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/tOsAAOSwgn1jBe-V/s-l200.webp alt></div>Tech<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/yfMAAOSwN~5jBe-U/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/yfMAAOSwN~5jBe-U/s-l200.webp alt></div>Fashion<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/0q0AAOSwSl9jBe-U/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/0q0AAOSwSl9jBe-U/s-l200.webp alt></div>Help & Contact<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/tOQAAOSwsfhg0rW8/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/tOQAAOSwsfhg0rW8/s-l200.webp alt></div>Seller Center<div class=\"hl-image hl-loyalty__icon-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/hSMAAOSw9Ftj2KBp/s-l96.webp')\"><img src=https://i.ebayimg.com/images/g/hSMAAOSw9Ftj2KBp/s-l96.webp alt></div>Up to 40% OFF. Kick off the year with new tech!Everything you need to help you succeed.Let's go Let's go Daily DealsSee all<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/v5gAAOSwcDJj2lMI/s-l225.webp alt=\"Jordan Men's T-Shirt Jumpman Short Sleeve Crew Athletic Active Basketball Tee\"></div>HKD 163.91<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/nAIAAOSwsBtaDeZL/s-l225.webp alt=\"Garmin Forerunner 35 Black GPS Sport Watch Wrist Based HR 010-01689-00\"></div>HKD 784.91Previous Price:HKD 1,569.90·50% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/-c4AAOSwCWRgSjq9/s-l225.webp alt=\"Jaeger Sports J-Bands Baseball Pitching Resistance Training Bands - Adult\"></div>HKD 243.27Previous Price:HKD 274.35·11% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/QS0AAOSwpUtgv9Pl/s-l225.webp alt=\"Stainless Steel Mixing Bowls 14 Piece Bowl Set with Measuring Cups and Spoons\"></div>HKD 211.87Previous Price:HKD 706.41·70% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/mr0AAOSw82BjmMqS/s-l225.webp alt=\"Xbox Series S 512GB SSD Console + Watch Dogs: Legion (Email Delivery)\"></div>HKD 1,907.45Previous Price:HKD 2,433.39·22% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/I0IAAOSwATNeabZk/s-l225.webp alt=\"USB-C to USB-C Cable Male Type-C Cable Cord Fast Charger Charging Data Sync\"></div>HKD 40.35<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/XCMAAOSw2QVfMxTg/s-l225.webp alt=\"Leather Wallets For Women - Trifold Womens Wallet With Coin Purse RFID Blocking\"></div>HKD 235.42<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/ljcAAOSwYORfMxQ3/s-l225.webp alt=\"Leather Trifold Wallet For Women With Removable Checkbook Holder RFID Blocking\"></div>HKD 274.67<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/kx0AAOSwPpRienPW/s-l225.webp alt=\"Contigo 20 oz. West Loop 2.0 AutoSeal Insulated Stainless Steel Travel Mug\"></div>HKD 268.39<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/MmcAAOSwT~NeJu0r/s-l225.webp alt=\"DICTOPRO X100 Digital Voice Activated Recorder Portable Mini Tape Dictaphone 8GB\"></div>HKD 345.16Previous Price:HKD 439.36·21% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/QDoAAOSwiepjXCoF/s-l225.webp alt=\"Apple Watch Series 7 45mm GPS + WiFi + Bluetooth Aluminum Case - Very Good\"></div>HKD 1,883.90<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/G4MAAOSwlINhP655/s-l225.webp alt=\"Lucky Bums Toddler Kids Beginner Plastic Snow Skis w/ Adjustable Bindings, Green\"></div>HKD 431.67Previous Price:HKD 1,098.91·61% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/d2kAAOSwLGxj9M-1/s-l225.webp alt=\"Champion Men's CU515503 Sport 65mm Matte Tortoise Sunglasses\"></div>HKD 196.17Previous Price:HKD 549.10·64% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/UAAAAOSwzhhjvcsh/s-l225.webp alt=\"Park Hotel Collection ESSENTIALS 3PC Sheet Set Cotton Rich Percale 225TC\"></div>HKD 156.92<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/2a0AAOSwmRVjNxUh/s-l225.webp alt=\"Amour Sterling Silver Black Diamond Accent Heart Locket Necklace\"></div>HKD 590.31Previous Price:HKD 1,569.98·62% OFF超級新星- Carousel精選陸克萊運動卡Shop Now Shop Now - Shop Now<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/DgwAAOSwVWVicsle/s-l225.webp alt=\"Charles Leclerc / Carlos Sainz 2022 Topps Formula 1 F1 NEON UV Bobzilla Auto 1/1\"></div>HKD 998.51Previous Price:HKD 1,248.14·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/CToAAOSwah1iq9Hu/s-l225.webp alt=\"🏁2021 Topps Chrome F1 CHARLES LECLERC B/W RAYWAVE REFRACT SGC 9 MT 🇲🇨\"></div>HKD 307.72Previous Price:HKD 384.65·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/UPwAAOSwqoFiZK4K/s-l225.webp alt=\"🏁2020 TOPPS CHROME SAPPHIRE 177 Charles Leclerc - Scuderia Ferrari SGC 9 🇲🇨\"></div>HKD 364.24Previous Price:HKD 455.29·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/FR0AAOSwqNpi02fV/s-l225.webp alt=\"🏁2020 PSA 10 Chrome F1 Scuderia Sapphire Edition Ferrari Team Logo G-MT🇮🇹\"></div>HKD 2,197.97Previous Price:HKD 2,747.47·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/rroAAOSwtCFi2IhK/s-l225.webp alt=\"2020 PSA 9 Chrome Formula 1 F1 Racing Refractor #113 Scuderia Ferrari MINT\"></div>HKD 1,877.70Previous Price:HKD 2,347.12·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/8pcAAOSw7aBjPKc9/s-l225.webp alt=\"🏁2020 Topps Chrome Formula 1 CHARLES LECLERC 1954 World On Wheels #3 PSA 9🇲🇨\"></div>HKD 376.48Previous Price:HKD 470.60·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/UKgAAOSwl~xkCkV6/s-l225.webp alt=\"Charles Leclerc Topps Chrome Formula 1 Sapphire 70th Anniversary Refractor Card\"></div>HKD 78.50<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/aG4AAOSwcvpju2A3/s-l225.webp alt=\"2021 TOPPS CHROME F1 FORMULA 1 CHARLES LECLERC PURPLE REFRACTOR FERRARI 11 PSA 9\"></div>HKD 196.25古董錢幣- Carousel發掘稀有珍貴款Shop Now Shop Now - Shop Now<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/1NoAAOSwcl1jwxay/s-l225.webp alt=\"1926 China Republic Dragon & Phoenix 10 Cents PCGS XF 40\"></div>HKD 11,774.86<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/PSsAAOSwobVjcH6I/s-l225.webp alt=\"1926 China Republic Dragon & Phoenix 10 Cents PCGS AU Details\"></div>HKD 9,412.04<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/igsAAOSwDX1jNv3-/s-l225.webp alt=\"1914, China (Nationalist Republic). Large Silver "Fat Man" Dollar Coin. NGC AU+\"></div>HKD 2,479.94Previous Price:HKD 2,818.12·12% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/CscAAOSwE21jYc0j/s-l225.webp alt=\"CHINA Silver Dollar, FatMan, Year 10 (1921). PCGS XF Details Gold Shield\"></div>HKD 2,747.47<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/k3wAAOSwhAxkCK1C/s-l225.webp alt=\"CHINA 1934 $1 Dollar Silver Coin Junk L&M-110 Y-345 Sun Yat Sen UNCIRCULATED\"></div>HKD 3,139.57<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/qawAAOSwciJkCKkM/s-l225.webp alt=\"1927 L&M-49 $1 China Sun Yat-Sen Memento Silver Dollar 6 Pointed Stars NGC UNC.\"></div>HKD 3,532.07<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/cuwAAOSwG31kCfz1/s-l225.webp alt=\"China 1995 Platinum 1/20 Panda- Key Date\"></div>HKD 3,022.22<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/5JQAAOSww8djmM8v/s-l225.webp alt=\"Qian Ancient Bronze Chinese Cash Lot 35 Holed Coins China Asia Dynasty Indonesia\"></div>HKD 4,647.07Previous Price:HKD 5,163.44·10% OFF" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + } + ], + links: "https://www.ebay.com", + name: "eaby", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "HomeFavoritesElectronicsExpand: ElectronicsMost popular categoriesSmartphones and accessoriesVideo games and consolesComputers and tabletsCameras and photosCamera dronesRefurbishedSmart homeMore categoriesAppleSamsungPortable audio and headphonesEmerging brandsSmart watchesDealsSell on eBay\n\n\n\n\n\n\n\n\n\nMotorsExpand: MotorsCarAuto and truck partsTools and suppliesTurbo chargersClothing and merchandiseShock absorbersElectronic and GPSAir intakeVintage piecesMotorcycle and moreMotorcycle partsBody and frameEngines and partsAccessoriesExhausts and systemsRimsDealsSell on eBay\n\n\n\n\n\n\n\n\n\nFashionExpand: FashionMost popular categoriesFootwearWomen's clothingFootwear for womenMen's clothingMen's footwearWatchesJewelryMore categoriesAccessories for menAccessories for womenBags and wallets for womenMens sunglassesWomens sunglasessSneakersDealsSell on eBay\n\n\n\n\n\n\n\n\n\nCollectibles and ArtExpand: Collectibles and ArtMost popular categoriesCollectiblesArtAction figuresCartoon charactersMovie and TV charactersDiecastMusical memorabiliaMore categoriesSports memorabiliaTrading card gamesAntiquesComicsFunko popStar WarsDealsSell on eBay\n\n\n\n\n\n\n\n\n\nSportsExpand: SportsMost popular categoriesCyclingFitness, running and yogaFitness TechFishingCampingScootersTeam sportsMore categoriesWatersportsWinter sportsBox and MMASwimmingGPS & Running WatchesGarminDealsSell on eBay\n\n\n\n\n\n\n\n\n\nHealth & BeautyExpand: Health & BeautyMost popular categoriesBeautyMakeupHealthK-BeautyManicure and pedicureHair productsSkin productsOrthopedic productsMore categoriesVitamins and food supplementsShaving and waxingBath and personal hygieneOral hygieneMassagersDealsSell on eBay\n\n\n\n\n\n\n\n\n\nIndustrial equipmentExpand: Industrial equipmentMost popular categoriesDental healthcareElectronic equipment and suppliesMetallurgy and manufacturingMotors and industrial automationHeavy equipment partsLight industrial toolsInspection, measurement and testing equipmentMore categoriesPacking and shippingOffice supplies and equipmentPrinting and graphic artsRestaurants and food serviceMaintenance and safetyRetail and servicesDealsSell on eBay\n\n\n\n\n\n\n\n\n\nHome & GardenExpand: Home & GardenMost popular categoriesWorkshop Tools and EquipmentPatio, garden and outdoorsHome improvementKitchen, dining and barLamps, lights and fansInterior decorationHome organizationHome appliancesMore categoriesToysPetsCraftsArt suppliesMusical instrumentsJewelry and beadsDealsSell on eBay\n\n\n\n\n\n\n\n\n\nDealsSellExpand: SellHow to create a listingJoin our growth programSeller centerSeller updatesSeller customer serviceeBay managed paymentsLearn to selleBay storeseBay feesSelling limits\n\n\n\n\n\n\n\n\n\nMore Expand: MoreElectronicsMotorsFashionCollectibles and ArtSportsHealth & BeautyIndustrial equipmentHome & GardenDealsSell(window.$ebay||($ebay = {})).tracking={pageId:'2380057',pageName:'Highline_Homepage'} <div class=\"hl-image hl-full-bleed-banner__image\" style=\"background-image: url('https://i.ebayimg.com/images/g/xN4AAOSw-sZj-IK6/s-l1600.webp')\"><img src=https://i.ebayimg.com/images/g/xN4AAOSw-sZj-IK6/s-l1600.webp alt role=presentation></div>Featured Women SellersInternational Women's DayShop now Shop now <div class=\"hl-image hl-full-bleed-banner__image\" style=\"background-image: url('https://i.ebayimg.com/images/g/eBQAAOSw3m5j-dgN/s-l1600.webp')\"><img src=https://i.ebayimg.com/images/g/eBQAAOSw3m5j-dgN/s-l1600.webp alt role=presentation></div>Save when you shop refurbishedReliable brands, excellent quality, great prices.Buy it now Buy it now These Deals Won’t Stick AroundSave on headphonesBuy it now Buy it now - <div class=\"hl-image hl-multi-cta-banner__image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/3nUAAOSw4yti83jq/s-l400.webp alt=apple></div><div class=\"hl-image hl-multi-cta-banner__image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/LdgAAOSw4dFi83j2/s-l400.webp alt=Beats></div><div class=\"hl-image hl-multi-cta-banner__image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/6zIAAOSwKMBi83kH/s-l400.webp alt=sony></div>Popular CategoriesSee allPopular Categories<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/A9sAAOSw4bJjBe-V/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/A9sAAOSw4bJjBe-V/s-l200.webp alt></div>Daily Deals<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/bbUAAOSw3JhjBe-V/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/bbUAAOSw3JhjBe-V/s-l200.webp alt></div>Auto Parts & Accessories<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/FuoAAOSwNaRjBe-T/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/FuoAAOSwNaRjBe-T/s-l200.webp alt></div>eBay Refurbished<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/tOsAAOSwgn1jBe-V/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/tOsAAOSwgn1jBe-V/s-l200.webp alt></div>Tech<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/yfMAAOSwN~5jBe-U/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/yfMAAOSwN~5jBe-U/s-l200.webp alt></div>Fashion<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/0q0AAOSwSl9jBe-U/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/0q0AAOSwSl9jBe-U/s-l200.webp alt></div>Help & Contact<div class=\"hl-image hl-popular-destinations-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/tOQAAOSwsfhg0rW8/s-l200.webp')\"><img src=https://i.ebayimg.com/images/g/tOQAAOSwsfhg0rW8/s-l200.webp alt></div>Seller Center<div class=\"hl-image hl-loyalty__icon-image\" style=\"background-image: url('https://i.ebayimg.com/images/g/hSMAAOSw9Ftj2KBp/s-l96.webp')\"><img src=https://i.ebayimg.com/images/g/hSMAAOSw9Ftj2KBp/s-l96.webp alt></div>Up to 40% OFF. Kick off the year with new tech!Everything you need to help you succeed.Let's go Let's go Daily DealsSee all<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/v5gAAOSwcDJj2lMI/s-l225.webp alt=\"Jordan Men's T-Shirt Jumpman Short Sleeve Crew Athletic Active Basketball Tee\"></div>HKD 163.91<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/nAIAAOSwsBtaDeZL/s-l225.webp alt=\"Garmin Forerunner 35 Black GPS Sport Watch Wrist Based HR 010-01689-00\"></div>HKD 784.91Previous Price:HKD 1,569.90·50% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/-c4AAOSwCWRgSjq9/s-l225.webp alt=\"Jaeger Sports J-Bands Baseball Pitching Resistance Training Bands - Adult\"></div>HKD 243.27Previous Price:HKD 274.35·11% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/QS0AAOSwpUtgv9Pl/s-l225.webp alt=\"Stainless Steel Mixing Bowls 14 Piece Bowl Set with Measuring Cups and Spoons\"></div>HKD 211.87Previous Price:HKD 706.41·70% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/mr0AAOSw82BjmMqS/s-l225.webp alt=\"Xbox Series S 512GB SSD Console + Watch Dogs: Legion (Email Delivery)\"></div>HKD 1,907.45Previous Price:HKD 2,433.39·22% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/I0IAAOSwATNeabZk/s-l225.webp alt=\"USB-C to USB-C Cable Male Type-C Cable Cord Fast Charger Charging Data Sync\"></div>HKD 40.35<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/XCMAAOSw2QVfMxTg/s-l225.webp alt=\"Leather Wallets For Women - Trifold Womens Wallet With Coin Purse RFID Blocking\"></div>HKD 235.42<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/ljcAAOSwYORfMxQ3/s-l225.webp alt=\"Leather Trifold Wallet For Women With Removable Checkbook Holder RFID Blocking\"></div>HKD 274.67<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/kx0AAOSwPpRienPW/s-l225.webp alt=\"Contigo 20 oz. West Loop 2.0 AutoSeal Insulated Stainless Steel Travel Mug\"></div>HKD 268.39<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/MmcAAOSwT~NeJu0r/s-l225.webp alt=\"DICTOPRO X100 Digital Voice Activated Recorder Portable Mini Tape Dictaphone 8GB\"></div>HKD 345.16Previous Price:HKD 439.36·21% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/QDoAAOSwiepjXCoF/s-l225.webp alt=\"Apple Watch Series 7 45mm GPS + WiFi + Bluetooth Aluminum Case - Very Good\"></div>HKD 1,883.90<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/G4MAAOSwlINhP655/s-l225.webp alt=\"Lucky Bums Toddler Kids Beginner Plastic Snow Skis w/ Adjustable Bindings, Green\"></div>HKD 431.67Previous Price:HKD 1,098.91·61% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/d2kAAOSwLGxj9M-1/s-l225.webp alt=\"Champion Men's CU515503 Sport 65mm Matte Tortoise Sunglasses\"></div>HKD 196.17Previous Price:HKD 549.10·64% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/UAAAAOSwzhhjvcsh/s-l225.webp alt=\"Park Hotel Collection ESSENTIALS 3PC Sheet Set Cotton Rich Percale 225TC\"></div>HKD 156.92<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/2a0AAOSwmRVjNxUh/s-l225.webp alt=\"Amour Sterling Silver Black Diamond Accent Heart Locket Necklace\"></div>HKD 590.31Previous Price:HKD 1,569.98·62% OFF超級新星- Carousel精選陸克萊運動卡Shop Now Shop Now - Shop Now<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/DgwAAOSwVWVicsle/s-l225.webp alt=\"Charles Leclerc / Carlos Sainz 2022 Topps Formula 1 F1 NEON UV Bobzilla Auto 1/1\"></div>HKD 998.51Previous Price:HKD 1,248.14·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/CToAAOSwah1iq9Hu/s-l225.webp alt=\"🏁2021 Topps Chrome F1 CHARLES LECLERC B/W RAYWAVE REFRACT SGC 9 MT 🇲🇨\"></div>HKD 307.72Previous Price:HKD 384.65·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/UPwAAOSwqoFiZK4K/s-l225.webp alt=\"🏁2020 TOPPS CHROME SAPPHIRE 177 Charles Leclerc - Scuderia Ferrari SGC 9 🇲🇨\"></div>HKD 364.24Previous Price:HKD 455.29·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/FR0AAOSwqNpi02fV/s-l225.webp alt=\"🏁2020 PSA 10 Chrome F1 Scuderia Sapphire Edition Ferrari Team Logo G-MT🇮🇹\"></div>HKD 2,197.97Previous Price:HKD 2,747.47·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/rroAAOSwtCFi2IhK/s-l225.webp alt=\"2020 PSA 9 Chrome Formula 1 F1 Racing Refractor #113 Scuderia Ferrari MINT\"></div>HKD 1,877.70Previous Price:HKD 2,347.12·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/8pcAAOSw7aBjPKc9/s-l225.webp alt=\"🏁2020 Topps Chrome Formula 1 CHARLES LECLERC 1954 World On Wheels #3 PSA 9🇲🇨\"></div>HKD 376.48Previous Price:HKD 470.60·20% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/UKgAAOSwl~xkCkV6/s-l225.webp alt=\"Charles Leclerc Topps Chrome Formula 1 Sapphire 70th Anniversary Refractor Card\"></div>HKD 78.50<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/aG4AAOSwcvpju2A3/s-l225.webp alt=\"2021 TOPPS CHROME F1 FORMULA 1 CHARLES LECLERC PURPLE REFRACTOR FERRARI 11 PSA 9\"></div>HKD 196.25古董錢幣- Carousel發掘稀有珍貴款Shop Now Shop Now - Shop Now<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/1NoAAOSwcl1jwxay/s-l225.webp alt=\"1926 China Republic Dragon & Phoenix 10 Cents PCGS XF 40\"></div>HKD 11,774.86<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/PSsAAOSwobVjcH6I/s-l225.webp alt=\"1926 China Republic Dragon & Phoenix 10 Cents PCGS AU Details\"></div>HKD 9,412.04<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/igsAAOSwDX1jNv3-/s-l225.webp alt=\"1914, China (Nationalist Republic). Large Silver "Fat Man" Dollar Coin. NGC AU+\"></div>HKD 2,479.94Previous Price:HKD 2,818.12·12% OFF<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/CscAAOSwE21jYc0j/s-l225.webp alt=\"CHINA Silver Dollar, FatMan, Year 10 (1921). PCGS XF Details Gold Shield\"></div>HKD 2,747.47<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/k3wAAOSwhAxkCK1C/s-l225.webp alt=\"CHINA 1934 $1 Dollar Silver Coin Junk L&M-110 Y-345 Sun Yat Sen UNCIRCULATED\"></div>HKD 3,139.57<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/qawAAOSwciJkCKkM/s-l225.webp alt=\"1927 L&M-49 $1 China Sun Yat-Sen Memento Silver Dollar 6 Pointed Stars NGC UNC.\"></div>HKD 3,532.07<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/cuwAAOSwG31kCfz1/s-l225.webp alt=\"China 1995 Platinum 1/20 Panda- Key Date\"></div>HKD 3,022.22<div class=\"hl-image hl-item__bg-image hl-image__no-fill\"><img src=https://i.ebayimg.com/images/g/5JQAAOSww8djmM8v/s-l225.webp alt=\"Qian Ancient Bronze Chinese Cash Lot 35 Holed Coins China Asia Dynasty Indonesia\"></div>HKD 4,647.07Previous Price:HKD 5,163.44·10% OFF" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640ae2558d65a900bf805a58"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "computer" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Click Next Page", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Collection", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "VR / POWERFUL Gaming PC - 12GB Nvidia RTX 3060 / Intel i7 / 16GB DDR3 / 1TB SSD" + }, + { + num: NumberInt("1"), + value: "Dell Optiplex SFF Computer Core i3 i5 i7 16GB RAM 2TB HDD/SSD Windows 10 PC WiFi" + }, + { + num: NumberInt("2"), + value: "Work from Home HP I5 16GB 2TB HD 512GB SSD WiFi 22in LCD Windows 10 Computer PC" + }, + { + num: NumberInt("3"), + value: "Dell OptiPlex 7010 Desktop MT Core i5 32GB Ram 2TB SSD Wi-Fi Windows 10 Computer" + }, + { + num: NumberInt("4"), + value: "Libre Computer AML-S905X-CC Le Potato Single Board Computer" + }, + { + num: NumberInt("5"), + value: "HP SFF i7 6700 3.4GHz 16GB DDR4 Win 11 Desktop PC Fast Cheap" + }, + { + num: NumberInt("6"), + value: "Windows 11 Lenovo ThinkCentre M93 Tiny Core i5 16GB RAM 1TB SSD Wi-Fi PC Desktop" + }, + { + num: NumberInt("7"), + value: "Dell i7 SSD Desktop Computer PC Windows 11 10 7/WiFi/HDMI/up to 32GB RAM 7010" + }, + { + num: NumberInt("8"), + value: "READ!! HP EliteDesk 705 G5 Mini PC Ryzen 5 Pro 3400G 16gb ram no ssd" + }, + { + num: NumberInt("9"), + value: "Dell Precision Tower 3620 Intel Core i7-6700K 4GHz 32GB 1TB SSD 2TB HDD Win10" + }, + { + num: NumberInt("10"), + value: "DELL/HP i5 QUAD DESKTOP TOWER PC & TFT COMPUTER SET 16GB WINDOWS 10 HDD & SSD" + }, + { + num: NumberInt("11"), + value: "HP Z6 G4 Workstation Desktop, No CPU, No RAM, No GPU, No HS, No HDD =Barebone=" + }, + { + num: NumberInt("12"), + value: "HP Z640 Tower Xeon E5-1650 v3 3.50Ghz 32GB RAM 240GB SSD Quadro M6000 12GB Win 1" + }, + { + num: NumberInt("13"), + value: "Dell Core i5 Desktop Computer PC 16GB RAM 512 SSD 1TB HDD 22\" LCD WiFi Win10 Pro" + }, + { + num: NumberInt("14"), + value: "Dell Optiplex 5050 i7-7700 4.2GHz Turbo Boost 32GB Ram 2TB SSD Wi-Fi Desktop" + }, + { + num: NumberInt("15"), + value: "Quad Core i5 Gaming PC 16GB DDR3 RAM 240GB SSD Windows 10 Desktop Computer Wi-Fi" + }, + { + num: NumberInt("16"), + value: "Dell Alienware Area 51 R6 Gaming Desktop Computer CHASSIS CADDY CABLES" + }, + { + num: NumberInt("17"), + value: "Dell OptiPlex 7060 SFF i5-8500/i7-8700 +up to 64GB RAM &2TB SSD &6TB HD &WiFi+BT" + }, + { + num: NumberInt("18"), + value: "HP or Dell Desktop Computer 16GB 2TB 512GB SSD Core i5 Windows 10 PC 24\" 22\" LCD" + }, + { + num: NumberInt("19"), + value: "HP ELITEDESK PC 800 G3 MINI I7-6700 2.8GHZ 16GB 512GB SSD WIN 10 Pro WIFI" + }, + { + num: NumberInt("20"), + value: "FAST DELL CORE 2 DUO PC COMPUTER DESKTOP WINDOWS 10 WI-FI 8GB RAM 500GB HDD" + }, + { + num: NumberInt("21"), + value: "✅mini-COMPUTER✅ADVANTECH DS-080 CELERON 3765U 2x1.90GHz 4GB DDR3 60GB SSD 4xUSB" + }, + { + num: NumberInt("22"), + value: "Dell Precision 3430 SFF 6 Core i7-8700 32GB RAM 512GB SSD Windows 11 Pro WiFi" + }, + { + num: NumberInt("23"), + value: "HP Pro 3300 SFF PC - Cheap Desktop Computer with SSD + WIFI & Windows 10 Pro" + }, + { + num: NumberInt("24"), + value: "Windows 11 Pro Mini PC Intel J4125 Quad Core 2.7GHz 8GB RAM DDR4 128GB SSD GK3V" + }, + { + num: NumberInt("25"), + value: "DELL Optiplex 3060 MFF Intel Core i7@4.0GHz 16GB SSD M.2 256Gb Win 11 Pro" + }, + { + num: NumberInt("26"), + value: "Dell OptiPlex 7060 Micro i5-8500/i7-8700&up to 32G RAM&2TB SSD&WiFi+BT&Win11 Pro" + }, + { + num: NumberInt("27"), + value: "New ListingDell OptiPlex 5070 Micro - i7 9th Gen M.2 256GB NVMe 16GB RAM DDR4 Win10Pro" + }, + { + num: NumberInt("28"), + value: "Lenovo ThinkPad Yoga 11e Touchscreen Laptop Windows 10 Pro 4GB Ram 128GB SSD" + }, + { + num: NumberInt("29"), + value: "HP Desktop Computer PC 16GB 2TB 512GB SSD Wifi Core i5 Windows 10 PC 24\" 22\" LCD" + }, + { + num: NumberInt("30"), + value: "HP i7 6th Gen SFF Computer PC 32GB RAM 2TB HDD/SSD Windows 10 PC WIFI" + }, + { + num: NumberInt("31"), + value: "Gaming PC Bundle I3 I5 I7 Desktop Gaming Computer PC 16GB RAM GTX 1660 Windows10" + }, + { + num: NumberInt("32"), + value: "Dell Optiplex 3010 MT Intel Core i3-3220 3.30GHz CPU 4GB RAM No HDD No OS" + }, + { + num: NumberInt("33"), + value: "PC Dell OptiPlex 3050 Tower 6th Gen i5/i7 8GB/16GB RAM 256GB/512GB SSD DVDRW,VG" + }, + { + num: NumberInt("34"), + value: "FAST ACER CHROMEBOOK 11 N7 TOUCHSCREEN CHROME OS LAPTOP 16GB 11.5\" HD SCREEN" + }, + { + num: NumberInt("35"), + value: "Dell OptiPlex 7040 Micro computer Intel i7-6700T 32GB RAM 960GB SSD Win10 WiFi" + }, + { + num: NumberInt("36"), + value: "Lenovo ThinkCentre M910Q Mini Tiny Desktop PC Computer i5 6500T SSD Win 10 Pro " + }, + { + num: NumberInt("37"), + value: "PC Dell OptiPlex 7050 SFF i5 i7 6th 7th Gen 8GB 16GB RAM 256GB SSD Warranty, VG" + }, + { + num: NumberInt("38"), + value: "Cheap Dell i7 4th Gen SFF Computer PC 32GB RAM 2TB HDD/SSD Windows 10 Pro WIFI" + }, + { + num: NumberInt("39"), + value: "FULL DELL/HP INTEL CORE i3/i5 DESKTOP TOWER PC MONITOR COMPUTER SYSTEM WIN10 PRO" + }, + { + num: NumberInt("40"), + value: "Dell OptiPlex 3040 SFF Intel i5 8GB RAM 120GB SSD HDMI DisplayPort Win10 Desktop" + }, + { + num: NumberInt("41"), + value: "New ListingDell Precision T7810 Workstation 2x Xeon E5-2620V3 32GB Ram 256GB SSD NVS510" + }, + { + num: NumberInt("42"), + value: "Dell i7 Desktop Computer PC | up to 32GB RAM, 3TB SSD | Windows 10 HDMI | WiFi" + }, + { + num: NumberInt("43"), + value: "CHEAP Windows 11 DELL Desktop PC Tiny Mini Micro Core i5 8Gb 16GB 1TB SSD WiFi" + }, + { + num: NumberInt("44"), + value: "Dell OptiPlex 7470 i5-9400 16GB 512GB SSD Win10 WIFI 24inch All In One Desktop" + }, + { + num: NumberInt("45"), + value: "Dell 9010 Tower Desktop Computer i7 QUAD CORE Windows 10 Pro 16GB RAM 480GB SSD" + }, + { + num: NumberInt("46"), + value: "Lenovo i7 Quad Core up to 4.0GHz 32GB Ram 3TB HDD 960GB SSD HDMI M900 Desktop PC" + }, + { + num: NumberInt("47"), + value: "Lenovo ThinkCentre M910t Core i5-6500 3.2GHz 8GB RAM 256GB SSD Windows 10 Pro PC" + }, + { + num: NumberInt("48"), + value: "Aegis ZS Gaming Desktop, AMD RX 6600, Ryzen 7 5700G, 500GB SSD, 1TB HDD, 16G RAM" + }, + { + num: NumberInt("49"), + value: "HP ProBook 640 G2 14\" Laptop Intel i5 6200U 4GB RAM 128GB SSD Win10 Pro -Good" + }, + { + num: NumberInt("50"), + value: "Raspberry Pi 400 Personal Computer Keyboard Only (US Layout) 4GB RAM FAST SHIP" + }, + { + num: NumberInt("51"), + value: "Raspberry Pi 4 Model B 8GB RAM -- Customer Return. Tested for Functionality." + }, + { + num: NumberInt("52"), + value: "Raspberry Pi 4 Model B- 8GB Starter Kit - UK STOCK - NEW, SEALED - 🚚🚀✅" + }, + { + num: NumberInt("53"), + value: "HP Elitedesk 800 G2 Mini PC i5-6500T 2.5Ghz 16GB 256GB SSD w/AC WIN 10 Pro" + }, + { + num: NumberInt("54"), + value: "HP Z440 DDR4 Workstation 700w PSU Barebones No CPU/RAM/HDD/GPU" + }, + { + num: NumberInt("55"), + value: "KAMRUI Mini PC Window 11 Pro, 8GB DDR4/256GB M.2 SSD Computer, Quad-core" + }, + { + num: NumberInt("56"), + value: "Dell Optiplex 3070 Micro PC i3-9100T 3.1Ghz 8GB 500Gb with Win10 Pro OEM A/C" + }, + { + num: NumberInt("57"), + value: "Fast Gaming PC Computer Bundle Intel 4130 Quad 8GB 500GB HDD Windows11 2GB GT730" + }, + { + num: NumberInt("58"), + value: "Dell i7 6th Gen SFF Computer PC 32GB RAM 2TB HDD/SSD Windows 10 PC WIFI" + }, + { + num: NumberInt("59"), + value: "Dell OptiPlex Tower Computer PC Core i3 32GB RAM 2TB HDD/SSD Windows 10 PC" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "computer", + value: "computer" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop Click Next Page_2", + nodeId: NumberInt("4"), + nodeName: "Loop Click Next Page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "eBay Product information task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "VR / POWERFUL Gaming PC - 12GB Nvidia RTX 3060 / Intel i7 / 16GB DDR3 / 1TB SSD" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640ae3fee9c32379f083e87f"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPad" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("6"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPad mini 2 16GB, Wi-Fi, 7.9in - Silver" + }, + { + num: NumberInt("1"), + value: "New ListingApple iPad 7th Gen A2200 (WiFi + Cellular Unlocked) 32GB Space Gray (Fair)" + }, + { + num: NumberInt("2"), + value: "New ListingApple iPad 8th Gen. 128GB, Wi-Fi, 10.2 in - Space Gray" + }, + { + num: NumberInt("3"), + value: "Apple iPad Pro 11\" 1st Gen 2018 64/256/512GB WiFi/4G Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("4"), + value: "Apple iPad 5th Generation 32/128GB, Wi-Fi, 9.7in, ALL COLOURS GOOD USED" + }, + { + num: NumberInt("5"), + value: "NEW! Apple iPad 9th Gen (2021) 64GB, Wi-Fi, 10.2in Tablet - Silver MK2L3LL/A" + }, + { + num: NumberInt("6"), + value: "Apple iPad Lot " + }, + { + num: NumberInt("7"), + value: "Apple iPad 5th Generation 32GB Wi-Fi + 4G A1823 9.7 inch - Gold" + }, + { + num: NumberInt("8"), + value: "Apple iPad 9th Generation 10.2 inch Silver 256GB WIFI. BNIB sealed" + }, + { + num: NumberInt("9"), + value: "Apple iPad Pro 4. Gen 128GB, Wi-Fi, 11-Inch - Space Grey" + }, + { + num: NumberInt("10"), + value: "Apple iPad 6th Gen 128GB Wi-Fi + 4G Cellular Unlocked, 9.7 in - Gray - EXCELLENT" + }, + { + num: NumberInt("11"), + value: "Apple iPad Air 2 32 GB Space Gray Excellent Condition" + }, + { + num: NumberInt("12"), + value: "Apple iPad 6th Gen (2018) - 32GB - All Colors - Wi-Fi Only - Very Good " + }, + { + num: NumberInt("13"), + value: "Apple iPad 7 10.2\" 32GB 128GB Space Gray Gold Silver WiFi or Cellular - Good" + }, + { + num: NumberInt("14"), + value: "New ListingApple iPad Pro 9.7 (1st Gen) A1673 (WiFi + Cellular) 32GB Space Gray (Good)" + }, + { + num: NumberInt("15"), + value: "Apple iPad A1893 - 32GB - Wi-Fi, 9.7in Touch ID Pencil Support Newest IOS 16" + }, + { + num: NumberInt("16"), + value: "Apple iPad Pro 11\" 2nd Gen 2020 128/256/512GB/1TB WiFi + 4G Unlocked Very Good" + }, + { + num: NumberInt("17"), + value: "New ListingApple iPad Pro 12.9 Inch - 128GB - Gray (Unlocked) (Read Description) AG1122" + }, + { + num: NumberInt("18"), + value: "New ListingApple iPad Pro 12.9\" 4th Gen (2020) 128/256/512/1TB WiFi/4G Good Condition" + }, + { + num: NumberInt("19"), + value: "Apple 10.9-Inch iPad Air (5th Generation) w/ Wi-Fi - 64GB - Space Gray" + }, + { + num: NumberInt("20"), + value: "Apple iPad 7th Gen. 128GB, Wi-Fi, 10.2 in - Space Gray IC Locked" + }, + { + num: NumberInt("21"), + value: "Apple iPad Air 5th Generation 64GB-256GB WiFi - 1 Year Apple Warranty UK Verison" + }, + { + num: NumberInt("22"), + value: "Apple iPad Air 4th Gen (2020) 64GB 256GB WiFi + 4G Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("23"), + value: "New ListingApple iPad 5th Gen. 32GB, Wi-Fi, 9.7in - Space Gray MP2F2LL/A" + }, + { + num: NumberInt("24"), + value: "Apple iPad Pro 12.9-inch (3rd Gen) Tablet (Wi-Fi) A1876 - Cracked Not Working" + }, + { + num: NumberInt("25"), + value: "New ListingApple iPad 6th Gen. 32GB, Wi-Fi, 9.7in - Silver (CA) - Mdm Locked - Lot Of 2" + }, + { + num: NumberInt("26"), + value: "Lot Of 3 x Apple iPad Air 16gb 1st Gen A1474 Gray - IC Locked" + }, + { + num: NumberInt("27"), + value: "Apple iPad 10.9-inch 10th Generation (2022) 64GB Blue Wi-Fi A2696" + }, + { + num: NumberInt("28"), + value: "Apple iPad 7 (7th Gen) - (2019 Model) - 32GB - 128GB - Wi-Fi - Cellular - Good" + }, + { + num: NumberInt("29"), + value: "New ListingApple iPad Mini 4 A1538 (WiFi) 128GB Gold (Fair)" + }, + { + num: NumberInt("30"), + value: "iPad pro 12.9 2nd gen model A1670 256Gb Good Condition IOS 15 1 year warranty" + }, + { + num: NumberInt("31"), + value: "Apple iPad Air 2 16/32/64/128GB WiFi + 4G Cellular Unlocked Grade A++ Certified" + }, + { + num: NumberInt("32"), + value: "Apple iPad Mini (5th Generation) 64GB, Wi-Fi, 7.9in - Space Gray - MDM" + }, + { + num: NumberInt("33"), + value: "Apple iPad 5th Gen. 32GB, Wi-Fi, 9.7in - Space Gray (CA)" + }, + { + num: NumberInt("34"), + value: "Apple iPad 6 9.7\" A1893 32GB Silver Wi-Fi Only iOS Tablet Excellent" + }, + { + num: NumberInt("35"), + value: "New ListingApple iPad Air 2 Wi-Fi 9.7in - A1567 LOCKED AS IS ONLY FAST SHIPPING" + }, + { + num: NumberInt("36"), + value: "APPLE IPAD PRO 12.9 SCREEN 128MB WI-FI CELLULAR UNLOCKED MODEL A1652 CRAACKED" + }, + { + num: NumberInt("37"), + value: "Apple iPad Mini 4 - 16GB - Silver (Wifi) (Read Description) AG1233" + }, + { + num: NumberInt("38"), + value: "Apple iPad Air 1st Gen 16/32/64/128GB WiFi/4G Unlocked 9.7\" Very Good Condition" + }, + { + num: NumberInt("39"), + value: "New ListingApple iPad 9th Gen. 64GB, Wi-Fi + 5G (Verizon), 10.2 in - Space Gray" + }, + { + num: NumberInt("40"), + value: "New ListingApple iPad Pro 6th Generation 12.9\" 128GB Silver. MNXQ3LL/A Brand New & Sealed. " + }, + { + num: NumberInt("41"), + value: "Apple iPad mini 6th Gen. 64GB, Wi-Fi, 8.3 in Starlight with Apple Pencil Gen 2" + }, + { + num: NumberInt("42"), + value: "Apple iPad mini 3 16GB, Wi-Fi, 7.9in, A1599 - GOLD / WHITE" + }, + { + num: NumberInt("43"), + value: "Apple iPad Pro 2 12.9\" 64GB 256GB 512GB All Colors WiFi or Cellular - Acceptable" + }, + { + num: NumberInt("44"), + value: "Apple iPad 3 3rd Generation Wifi Black And White 16GB 32GB 64GB" + }, + { + num: NumberInt("45"), + value: "Apple iPad Air 5th Gen. 64GB, Wi-Fi, 10.9in - Space Grey" + }, + { + num: NumberInt("46"), + value: "New ListingApple iPad Air 1st Gen. 16GB, Wi-Fi + Cellular (Verizon), 9.7in - Space Gray" + }, + { + num: NumberInt("47"), + value: "Apple iPad mini 5th Gen Retina 64GB Wi-Fi+4G 7.9\" S.Grey B Grade Latest iOS 16" + }, + { + num: NumberInt("48"), + value: "Apple iPad Mini 3 16GB 32GB 64GB 128GB Gray Silver Gold WiFi or Cellular - Good" + }, + { + num: NumberInt("49"), + value: "Apple iPad 9th Gen 2021 10.2 in 64GB WiFi Space Gray Silver Brand New" + }, + { + num: NumberInt("50"), + value: "New ListingApple iPad Mini 1st Gen 16/32/64GB WiFi + Cellular Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("51"), + value: "Apple iPad Pro 12.9\" (3rd Gen) A2014 (Unlocked) 256GB Space Gray - Battery/Lift" + }, + { + num: NumberInt("52"), + value: "Apple iPad mini 1,2,3,4 (16GB,32GB) Wi-Fi ONLY Space Grey 7.9in Grade A Conditio" + }, + { + num: NumberInt("53"), + value: "New ListingApple iPad Pro 11 Inch 2nd - 128GB - Gray (Unlocked) (Read Description) BA1094" + }, + { + num: NumberInt("54"), + value: "Apple iPad 6th Gen (2018) - 128GB - All Colors - Wi-Fi + 4G Unlocked - Good" + }, + { + num: NumberInt("55"), + value: "Apple iPad Pro 4th Gen 512GB, Wi-Fi+4G (Unlocked), 12.9in - Space Gray MXFG2LL/A" + }, + { + num: NumberInt("56"), + value: "Apple iPad Pro 3rd Gen 11-inch [2021 Model]" + }, + { + num: NumberInt("57"), + value: "Apple iPad Air 1 9.7\" 16GB 32GB 64GB 128GB Gray Silver WiFi / Cellular-Excellent" + }, + { + num: NumberInt("58"), + value: "Apple iPad Pro 3rd Gen 12.9\" 64/256/512GB 1TB WiFi + 4G Unlocked Very Good" + }, + { + num: NumberInt("59"), + value: "Apple iPad Pro 9.7 (1st Gen) A1673 (WiFi/Unlocked) 32GB Space Gray (Excellent)" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("8"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("9"), + index: NumberInt("9"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para2_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPad mini 2 16GB, Wi-Fi, 7.9in - Silver" + }, + { + num: NumberInt("1"), + value: "New ListingApple iPad 7th Gen A2200 (WiFi + Cellular Unlocked) 32GB Space Gray (Fair)" + }, + { + num: NumberInt("2"), + value: "New ListingApple iPad 8th Gen. 128GB, Wi-Fi, 10.2 in - Space Gray" + }, + { + num: NumberInt("3"), + value: "Apple iPad Pro 11\" 1st Gen 2018 64/256/512GB WiFi/4G Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("4"), + value: "Apple iPad 5th Generation 32/128GB, Wi-Fi, 9.7in, ALL COLOURS GOOD USED" + }, + { + num: NumberInt("5"), + value: "NEW! Apple iPad 9th Gen (2021) 64GB, Wi-Fi, 10.2in Tablet - Silver MK2L3LL/A" + }, + { + num: NumberInt("6"), + value: "Apple iPad Lot " + }, + { + num: NumberInt("7"), + value: "Apple iPad 5th Generation 32GB Wi-Fi + 4G A1823 9.7 inch - Gold" + }, + { + num: NumberInt("8"), + value: "Apple iPad 9th Generation 10.2 inch Silver 256GB WIFI. BNIB sealed" + }, + { + num: NumberInt("9"), + value: "Apple iPad Pro 4. Gen 128GB, Wi-Fi, 11-Inch - Space Grey" + }, + { + num: NumberInt("10"), + value: "Apple iPad 6th Gen 128GB Wi-Fi + 4G Cellular Unlocked, 9.7 in - Gray - EXCELLENT" + }, + { + num: NumberInt("11"), + value: "Apple iPad Air 2 32 GB Space Gray Excellent Condition" + }, + { + num: NumberInt("12"), + value: "Apple iPad 6th Gen (2018) - 32GB - All Colors - Wi-Fi Only - Very Good " + }, + { + num: NumberInt("13"), + value: "Apple iPad 7 10.2\" 32GB 128GB Space Gray Gold Silver WiFi or Cellular - Good" + }, + { + num: NumberInt("14"), + value: "New ListingApple iPad Pro 9.7 (1st Gen) A1673 (WiFi + Cellular) 32GB Space Gray (Good)" + }, + { + num: NumberInt("15"), + value: "Apple iPad A1893 - 32GB - Wi-Fi, 9.7in Touch ID Pencil Support Newest IOS 16" + }, + { + num: NumberInt("16"), + value: "Apple iPad Pro 11\" 2nd Gen 2020 128/256/512GB/1TB WiFi + 4G Unlocked Very Good" + }, + { + num: NumberInt("17"), + value: "New ListingApple iPad Pro 12.9 Inch - 128GB - Gray (Unlocked) (Read Description) AG1122" + }, + { + num: NumberInt("18"), + value: "New ListingApple iPad Pro 12.9\" 4th Gen (2020) 128/256/512/1TB WiFi/4G Good Condition" + }, + { + num: NumberInt("19"), + value: "Apple 10.9-Inch iPad Air (5th Generation) w/ Wi-Fi - 64GB - Space Gray" + }, + { + num: NumberInt("20"), + value: "Apple iPad 7th Gen. 128GB, Wi-Fi, 10.2 in - Space Gray IC Locked" + }, + { + num: NumberInt("21"), + value: "Apple iPad Air 5th Generation 64GB-256GB WiFi - 1 Year Apple Warranty UK Verison" + }, + { + num: NumberInt("22"), + value: "Apple iPad Air 4th Gen (2020) 64GB 256GB WiFi + 4G Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("23"), + value: "New ListingApple iPad 5th Gen. 32GB, Wi-Fi, 9.7in - Space Gray MP2F2LL/A" + }, + { + num: NumberInt("24"), + value: "Apple iPad Pro 12.9-inch (3rd Gen) Tablet (Wi-Fi) A1876 - Cracked Not Working" + }, + { + num: NumberInt("25"), + value: "New ListingApple iPad 6th Gen. 32GB, Wi-Fi, 9.7in - Silver (CA) - Mdm Locked - Lot Of 2" + }, + { + num: NumberInt("26"), + value: "Lot Of 3 x Apple iPad Air 16gb 1st Gen A1474 Gray - IC Locked" + }, + { + num: NumberInt("27"), + value: "Apple iPad 10.9-inch 10th Generation (2022) 64GB Blue Wi-Fi A2696" + }, + { + num: NumberInt("28"), + value: "Apple iPad 7 (7th Gen) - (2019 Model) - 32GB - 128GB - Wi-Fi - Cellular - Good" + }, + { + num: NumberInt("29"), + value: "New ListingApple iPad Mini 4 A1538 (WiFi) 128GB Gold (Fair)" + }, + { + num: NumberInt("30"), + value: "iPad pro 12.9 2nd gen model A1670 256Gb Good Condition IOS 15 1 year warranty" + }, + { + num: NumberInt("31"), + value: "Apple iPad Air 2 16/32/64/128GB WiFi + 4G Cellular Unlocked Grade A++ Certified" + }, + { + num: NumberInt("32"), + value: "Apple iPad Mini (5th Generation) 64GB, Wi-Fi, 7.9in - Space Gray - MDM" + }, + { + num: NumberInt("33"), + value: "Apple iPad 5th Gen. 32GB, Wi-Fi, 9.7in - Space Gray (CA)" + }, + { + num: NumberInt("34"), + value: "Apple iPad 6 9.7\" A1893 32GB Silver Wi-Fi Only iOS Tablet Excellent" + }, + { + num: NumberInt("35"), + value: "New ListingApple iPad Air 2 Wi-Fi 9.7in - A1567 LOCKED AS IS ONLY FAST SHIPPING" + }, + { + num: NumberInt("36"), + value: "APPLE IPAD PRO 12.9 SCREEN 128MB WI-FI CELLULAR UNLOCKED MODEL A1652 CRAACKED" + }, + { + num: NumberInt("37"), + value: "Apple iPad Mini 4 - 16GB - Silver (Wifi) (Read Description) AG1233" + }, + { + num: NumberInt("38"), + value: "Apple iPad Air 1st Gen 16/32/64/128GB WiFi/4G Unlocked 9.7\" Very Good Condition" + }, + { + num: NumberInt("39"), + value: "New ListingApple iPad 9th Gen. 64GB, Wi-Fi + 5G (Verizon), 10.2 in - Space Gray" + }, + { + num: NumberInt("40"), + value: "New ListingApple iPad Pro 6th Generation 12.9\" 128GB Silver. MNXQ3LL/A Brand New & Sealed. " + }, + { + num: NumberInt("41"), + value: "Apple iPad mini 6th Gen. 64GB, Wi-Fi, 8.3 in Starlight with Apple Pencil Gen 2" + }, + { + num: NumberInt("42"), + value: "Apple iPad mini 3 16GB, Wi-Fi, 7.9in, A1599 - GOLD / WHITE" + }, + { + num: NumberInt("43"), + value: "Apple iPad Pro 2 12.9\" 64GB 256GB 512GB All Colors WiFi or Cellular - Acceptable" + }, + { + num: NumberInt("44"), + value: "Apple iPad 3 3rd Generation Wifi Black And White 16GB 32GB 64GB" + }, + { + num: NumberInt("45"), + value: "Apple iPad Air 5th Gen. 64GB, Wi-Fi, 10.9in - Space Grey" + }, + { + num: NumberInt("46"), + value: "New ListingApple iPad Air 1st Gen. 16GB, Wi-Fi + Cellular (Verizon), 9.7in - Space Gray" + }, + { + num: NumberInt("47"), + value: "Apple iPad mini 5th Gen Retina 64GB Wi-Fi+4G 7.9\" S.Grey B Grade Latest iOS 16" + }, + { + num: NumberInt("48"), + value: "Apple iPad Mini 3 16GB 32GB 64GB 128GB Gray Silver Gold WiFi or Cellular - Good" + }, + { + num: NumberInt("49"), + value: "Apple iPad 9th Gen 2021 10.2 in 64GB WiFi Space Gray Silver Brand New" + }, + { + num: NumberInt("50"), + value: "New ListingApple iPad Mini 1st Gen 16/32/64GB WiFi + Cellular Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("51"), + value: "Apple iPad Pro 12.9\" (3rd Gen) A2014 (Unlocked) 256GB Space Gray - Battery/Lift" + }, + { + num: NumberInt("52"), + value: "Apple iPad mini 1,2,3,4 (16GB,32GB) Wi-Fi ONLY Space Grey 7.9in Grade A Conditio" + }, + { + num: NumberInt("53"), + value: "New ListingApple iPad Pro 11 Inch 2nd - 128GB - Gray (Unlocked) (Read Description) BA1094" + }, + { + num: NumberInt("54"), + value: "Apple iPad 6th Gen (2018) - 128GB - All Colors - Wi-Fi + 4G Unlocked - Good" + }, + { + num: NumberInt("55"), + value: "Apple iPad Pro 4th Gen 512GB, Wi-Fi+4G (Unlocked), 12.9in - Space Gray MXFG2LL/A" + }, + { + num: NumberInt("56"), + value: "Apple iPad Pro 3rd Gen 11-inch [2021 Model]" + }, + { + num: NumberInt("57"), + value: "Apple iPad Air 1 9.7\" 16GB 32GB 64GB 128GB Gray Silver WiFi / Cellular-Excellent" + }, + { + num: NumberInt("58"), + value: "Apple iPad Pro 3rd Gen 12.9\" 64/256/512GB 1TB WiFi + 4G Unlocked Very Good" + }, + { + num: NumberInt("59"), + value: "Apple iPad Pro 9.7 (1st Gen) A1673 (WiFi/Unlocked) 32GB Space Gray (Excellent)" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPad", + value: "iPad" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("4"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "Apple iPad mini 2 16GB, Wi-Fi, 7.9in - Silver" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "Apple iPad mini 2 16GB, Wi-Fi, 7.9in - Silver" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640aea52e9c32379f083e882"), + containJudge: false, + desc: "https://www.ebay.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("8") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.ebay.com", + links: "https://www.ebay.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-ac\"]", + wait: NumberInt("0"), + value: "iPad" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"gh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPad Air 2 A1566 (WiFi) 64GB Space Gray (Very Good)" + }, + { + num: NumberInt("1"), + value: "Apple iPad Air 2 A1567 (WiFi + Cellular Unlocked) 128GB Space Gray (Very Good)" + }, + { + num: NumberInt("2"), + value: "Apple iPad Mini 4 - Wi-Fi - Wi-Fi + Cellular - 16GB - 32GB - 64GB - 128GB - Good" + }, + { + num: NumberInt("3"), + value: "Apple iPad 6th Gen 9.7\" 32GB 128GB Silver Gray WiFi or Cellular Unlocked Good" + }, + { + num: NumberInt("4"), + value: "Apple iPad 5 - 5th Gen 2017 Model 9.7\" - 32GB 128GB Wi-Fi - Grade C" + }, + { + num: NumberInt("5"), + value: "Apple iPad Air 2 2nd WiFi + Cellular Unlocked 16GB 32GB 64GB 128GB - Good" + }, + { + num: NumberInt("6"), + value: "New ListingApple iPad Pro - 6th Gen 12.9\"" + }, + { + num: NumberInt("7"), + value: "Apple iPad Air 2 64 GB Wi-Fi 9.7in - Space Gray IOS 15 Fast Free Shipping" + }, + { + num: NumberInt("8"), + value: "Apple iPad 5 (5th Gen -2017 Model) -32GB -128GB - Wi-Fi + Cellular - Good" + }, + { + num: NumberInt("9"), + value: "Apple iPad Air 5th Gen. 10.9 in, 64GB, Wi-Fi A2588 - Blue" + }, + { + num: NumberInt("10"), + value: "Apple iPad 2nd 3rd 4th Generation 16GB 32GB 64GB *Grade B*" + }, + { + num: NumberInt("11"), + value: "Apple iPad 9th Gen. 64GB, Wi-Fi, 10.2 in - Silver read the description!!" + }, + { + num: NumberInt("12"), + value: "NEW! Apple iPad 9th Gen 64GB, Wi-Fi, 10.2in Tablet Space Gray MK2K3LL/A " + }, + { + num: NumberInt("13"), + value: "Apple iPad 6th Gen A1893 (WiFi) 32GB Space Gray (Good)" + }, + { + num: NumberInt("14"), + value: "Apple iPad Air A1474 (WiFi) 32GB Space Gray (Excellent)" + }, + { + num: NumberInt("15"), + value: "Apple iPad mini 3 16GB, Wi-Fi + Cellular (Unlocked), 7.9in - Silver (CA)" + }, + { + num: NumberInt("16"), + value: "Apple iPad 6 - 6th Generation 32GB MP2F2LL/A Space Gray - WiFi - Grade C" + }, + { + num: NumberInt("17"), + value: "Apple iPad Air 2 9.7\" 16GB 32GB 64GB 128GB All Colors WiFi + Cellular - Good" + }, + { + num: NumberInt("18"), + value: "Apple iPad 5th Gen 9.7\" 32GB 128GB Gray Silver WiFi or Cellular Unlocked Good" + }, + { + num: NumberInt("19"), + value: "Apple iPad Pro 2 (2017) 10.5\" 64GB 256GB 512GB All Colors (WiFi or Cellular)" + }, + { + num: NumberInt("20"), + value: "APPLE A1876 - iPad PRO 3rd Gen / 64GB HD / 4GB RAM / iOS 16.2 / 12.9-Inch Tablet" + }, + { + num: NumberInt("21"), + value: "Acceptable Apple iPad Pro 9.7\" 32GB 128GB 256GB All Colors WiFi or Unlocked" + }, + { + num: NumberInt("22"), + value: "Excellent Condition Apple iPad 4th Gen, 16GB, Wi-Fi 9.7in Retina, WIFI + Warrant" + }, + { + num: NumberInt("23"), + value: "Apple iPad Air 5th Gen. 10.9 in, 64GB, Wi-Fi A2588 - Space Gray" + }, + { + num: NumberInt("24"), + value: "Apple iPad Air 1st WiFi + Cellular Unlocked 16GB 32GB 64GB 128GB - Good" + }, + { + num: NumberInt("25"), + value: "Apple iPad 9th Gen. 64GB, Wi-Fi, 10.2 in - Silver" + }, + { + num: NumberInt("26"), + value: "Apple iPad Air 2 9.7\" 16GB 32GB 64GB 128GB All Colors WiFi Cellular Used" + }, + { + num: NumberInt("27"), + value: "Apple iPad 6th Gen A1893 (WiFi) 32GB Space Gray (Very Good)" + }, + { + num: NumberInt("28"), + value: "Apple iPad 8 (8th Gen) - (2020 Model) - 32GB - 128GB - Wi-Fi - Cellular - Good" + }, + { + num: NumberInt("29"), + value: "Apple iPad 6 (6th Gen) - (2018 Model) - 32GB - 128GB - Wi-Fi - Cellular - Good" + }, + { + num: NumberInt("30"), + value: "Apple iPad mini 2 16GB, Wi-Fi, 7.9in - Silver" + }, + { + num: NumberInt("31"), + value: "New ListingApple iPad Pro 1st Gen. 64GB, Wi-Fi + 4G (Unlocked), 10.5 in - Space Gray" + }, + { + num: NumberInt("32"), + value: "Apple iPad Air 3rd Gen 10.5\" 64GB 256GB Gray Silver Gold (WiFi or Cellular) Used" + }, + { + num: NumberInt("33"), + value: "Apple iPad 7 7th Gen 10.2\" 32GB 128GB Gray Gold Silver WiFi or Cellular - Used" + }, + { + num: NumberInt("34"), + value: "Apple iPad 1st Generation 32GB, Wi-Fi, 9.7in - Black - Good Working Condition" + }, + { + num: NumberInt("35"), + value: "NEW Apple iPad 9th Generation 10.2\" Retina Display 64GB Wifi Touch ID + Stylus" + }, + { + num: NumberInt("36"), + value: "Apple iPad Pro 1st Gen 12.9 32GB 128GB 256GB WiFi Cellular 4G iOS 15 GOOD USED" + }, + { + num: NumberInt("37"), + value: "New ListingApple iPad 5th Gen. 32GB, Wi-Fi, 9.7in - Space Gray MP2F2LL/A" + }, + { + num: NumberInt("38"), + value: "New ListingApple iPad 7th Gen A2200 (WiFi + Cellular Unlocked) 32GB Space Gray (Fair)" + }, + { + num: NumberInt("39"), + value: "Apple iPad Pro 9.7\" 32GB 128GB 256GB Gray Silver Gold Rose WiFi / Cellular- Good" + }, + { + num: NumberInt("40"), + value: "Apple 12.9-inch iPad Pro (Wi-Fi, 128GB) 4th Generation Space Gray" + }, + { + num: NumberInt("41"), + value: "New ListingNEW Apple iPad Pro 11\" 3rd Gen 2021 M1 256GB Silver WiFi + Cellular 5G Unlocked" + }, + { + num: NumberInt("42"), + value: "Apple iPad Mini 4th Gen 32GB Wi-Fi 7.9\" Space Gray A1538 Tested Good Condition" + }, + { + num: NumberInt("43"), + value: "Apple iPad Mini 3 3rd Gen 16GB Wi-Fi 7.9\" Space Gray A1599 Tested Good Condition" + }, + { + num: NumberInt("44"), + value: "Apple iPad mini 4, 4th Gen 16GB 32GB 64GB 128GB Wi-Fi + 4G Cellular - Good" + }, + { + num: NumberInt("45"), + value: "New ListingApple iPad Pro 11 Inch 2nd - 128GB - Gray (Unlocked) (Read Description) BA1097" + }, + { + num: NumberInt("46"), + value: "Apple - 8.3\" iPad Mini 6th Gen. - 64GB - WiFi Only - MK7M3LL/A - Space Gray - VG" + }, + { + num: NumberInt("47"), + value: "Apple iPad 3 3rd Generation Wifi Black And White 16GB 32GB 64GB" + }, + { + num: NumberInt("48"), + value: "Apple iPad Pro 11 2nd Gen 128GB Space Gray WiFi + Cellular" + }, + { + num: NumberInt("49"), + value: "Apple iPad 10.9-inch 10th Generation (2022) 64GB Blue Wi-Fi A2696" + }, + { + num: NumberInt("50"), + value: "New ListingApple iPad 8th Gen. 128GB, Wi-Fi, 10.2 in - Space Gray" + }, + { + num: NumberInt("51"), + value: "NEW! Apple iPad 9th Gen (2021) 64GB, Wi-Fi, 10.2in Tablet - Silver MK2L3LL/A" + }, + { + num: NumberInt("52"), + value: "Apple iPad 5th Gen. 32GB, Wi-Fi, 9.7in - Space Gray (CA)" + }, + { + num: NumberInt("53"), + value: "BRAND NEW Sealed Apple 10.2 iPad 9th Generation Silver 64gb" + }, + { + num: NumberInt("54"), + value: "New ListingApple iPad Pro 12.9 Inch - 128GB - Gray (Unlocked) (Read Description) AG1122" + }, + { + num: NumberInt("55"), + value: "Apple iPad Air 5th Gen. 64GB, Wi-Fi, 10.9in - Blue" + }, + { + num: NumberInt("56"), + value: "Apple iPad Air 2 16/32/64/128GB WiFi + 4G Cellular Unlocked Grade A+ Excellent" + }, + { + num: NumberInt("57"), + value: "Apple iPad Pro 10.5\" 64GB 256GB 512GB Gray Gold Silver WiFi or Cellular - Good" + }, + { + num: NumberInt("58"), + value: "New ListingApple iPad 8th Gen. 128GB, Wi-Fi + 4G (Unlocked), 10.2 in - Space Gray Lot 1A" + }, + { + num: NumberInt("59"), + value: "Apple iPad Pro 11\" 1st Gen 2018 64/256/512GB WiFi/4G Unlocked Grade A+ Excellent" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("6"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("4"), + index: NumberInt("8"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Click Next Page", + sequence: [ + NumberInt("10"), + NumberInt("9") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("9"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination__next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("10"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop Collection", + sequence: [ + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[8]/div[4]/div[2]/div[1]/div[2]/ul[1]/li/div[1]/div[2]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("11"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "product_name", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "Apple iPad Air 1st Gen 16/32/64/128GB WiFi/4G Unlocked 9.7\" Very Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("1"), + value: "Apple iPad Pro 3rd Gen 12.9\" 64/256/512GB 1TB WiFi + 4G Unlocked Very GoodOpens in a new window or tab" + }, + { + num: NumberInt("2"), + value: "Apple iPad Pro 12.9\" 3rd Gen 64/256/512GB/1TB WiFi + 4G Unlocked Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("3"), + value: "New ListingApple iPad Pro 10.5 (2017) 64/256/512GB WiFi + 4G Unlocked Very Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("4"), + value: "Apple iPad 9th Gen 2021 10.2 in 64GB WiFi Space Gray Silver Brand NewOpens in a new window or tab" + }, + { + num: NumberInt("5"), + value: "Apple iPad Air 4th Gen. 64GB, Wi-Fi, 10.9 in - Space GrayOpens in a new window or tab" + }, + { + num: NumberInt("6"), + value: "Apple iPad 6th generation 32gb wifiOpens in a new window or tab" + }, + { + num: NumberInt("7"), + value: "New ListingApple iPad Mini 1st Gen 16/32/64GB WiFi + Cellular Unlocked Grade A+ ExcellentOpens in a new window or tab" + }, + { + num: NumberInt("8"), + value: "Apple iPad Air 1 9.7\" 16GB 32GB 64GB 128GB Gray Silver WiFi / Cellular-ExcellentOpens in a new window or tab" + }, + { + num: NumberInt("9"), + value: "Apple iPad Pro 11\" 64GB Wi-Fi + Cellular Tablet SilverOpens in a new window or tab" + }, + { + num: NumberInt("10"), + value: "Apple iPad Pro 2 12.9\" 64GB 256GB 512GB All Colors WiFi or Cellular - AcceptableOpens in a new window or tab" + }, + { + num: NumberInt("11"), + value: "Apple iPad Mini 6th Gen . 64GB, Wi-Fi 2023 Space Grey RRP£569 N.DayDel. SealedOpens in a new window or tab" + }, + { + num: NumberInt("12"), + value: "Apple iPad 6th Gen 9.7\" A1893 (WiFi) 32GB Space GrayOpens in a new window or tab" + }, + { + num: NumberInt("13"), + value: "Apple iPad 1st Gen. 64GB, Wi-Fi + 3G (Unlocked), 9.7 in - Space GrayOpens in a new window or tab" + }, + { + num: NumberInt("14"), + value: "Apple iPad Air 3rd Gen (2019) - All Sizes - All Colours - Wi-Fi OnlyOpens in a new window or tab" + }, + { + num: NumberInt("15"), + value: "Apple iPad Pro 9.7\" 32GB 128GB 256GB Gray Silver Gold WiFi / Cellular- Very GoodOpens in a new window or tab" + }, + { + num: NumberInt("16"), + value: "APPLE IPAD PRO MLMV2LL/A | 9.7\" | 256GB | WIFI | SPACE GRAYOpens in a new window or tab" + }, + { + num: NumberInt("17"), + value: "Apple iPad mini 1,2,3,4 (16GB,32GB) Wi-Fi ONLY Space Grey 7.9in Grade A ConditioOpens in a new window or tab" + }, + { + num: NumberInt("18"), + value: "Apple iPad Air 2 32GB, Wi-Fi, 9.7in - Space Gray (CA)Opens in a new window or tab" + }, + { + num: NumberInt("19"), + value: "NON-WORKING Apple iPad 9th Gen (2021) 64GB, Wi-Fi, 10.2in Tablet MK2L3LL/AOpens in a new window or tab" + }, + { + num: NumberInt("20"), + value: "Apple iPad 6th Gen (2018) - 128GB - All Colors - Wi-Fi + 4G Unlocked - GoodOpens in a new window or tab" + }, + { + num: NumberInt("21"), + value: "New ListingApple iPad 7 - 32GB - Gray (Unlocked) (Read Description) BA1149Opens in a new window or tab" + }, + { + num: NumberInt("22"), + value: "New ListingApple iPad 6th Gen. 32GB, Wi-Fi, 9.7in - Silver (CA)Opens in a new window or tab" + }, + { + num: NumberInt("23"), + value: "Apple iPad Pro 12.9\" (3rd Gen) A2014 (Unlocked) 256GB Space Gray - Battery/LiftOpens in a new window or tab" + }, + { + num: NumberInt("24"), + value: "Apple A2014 iPad Pro 3rd GEN 12.9\" 256GB WiFi + Cellular Shattered Screen LCDOpens in a new window or tab" + }, + { + num: NumberInt("25"), + value: "Apple iPad 4th Gen. 16GB, Wi-Fi, 9.7in - Grey New Sealed Original PackagingOpens in a new window or tab" + }, + { + num: NumberInt("26"), + value: "New ListingApple iPad Air 2 64GB, Wi-Fi + Cellular (Verizon), 9.7in - Space Gray MGJY2LLOpens in a new window or tab" + }, + { + num: NumberInt("27"), + value: "Apple iPad Pro 4th Gen. 256GB, Wi-Fi + 4G (Unlocked), 12.9 in - Space GrayOpens in a new window or tab" + }, + { + num: NumberInt("28"), + value: "New ListingApple iPad 10.2\" 8th Gen (2021) 32/128B WiFi + 4G Unlocked Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("29"), + value: "Apple iPad 6th Gen 9.7\" 32GB 128GB Silver Gold Gray WiFi or Cellular - ExcellentOpens in a new window or tab" + }, + { + num: NumberInt("30"), + value: "Apple iPad Air A1474 (WiFi) 32GB Space Gray (Very Good)Opens in a new window or tab" + }, + { + num: NumberInt("31"), + value: "Apple iPad 5th Generation 32GB 128GB Wi-Fi Various Colours Excellent ConditionOpens in a new window or tab" + }, + { + num: NumberInt("32"), + value: "Apple iPad 8th Gen. 32GB 10.2 in - Space Gray 100119Opens in a new window or tab" + }, + { + num: NumberInt("33"), + value: "Apple iPad Pro 10.5 Inch - 256GB - Gold (Wifi) (Read Description) AH1269Opens in a new window or tab" + }, + { + num: NumberInt("34"), + value: "Apple iPad Pro 1st Gen. 11\" 64GB Wi-Fi + Cellular Model MU0P2LL/A Cracked ScreenOpens in a new window or tab" + }, + { + num: NumberInt("35"), + value: "Apple iPad 10.9-inch 10th Generation (2022) 64GB Blue Wi-Fi A2696Opens in a new window or tab" + }, + { + num: NumberInt("36"), + value: "Apple iPad Air 2 (A1566) 128GB - Gray (Wi-Fi) 9.7\" Tablet - BAD BATTERY - K0085Opens in a new window or tab" + }, + { + num: NumberInt("37"), + value: "Brand new factory sealed Apple iPad 3rd Gen. 32GB, Wi-Fi, 9.7in - BlackOpens in a new window or tab" + }, + { + num: NumberInt("38"), + value: "Apple iPad Air 2 16/32/64/128GB WiFi/4G Cellular Unlocked 9.7\" Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("39"), + value: "Apple iPad 5th Gen 32/128GB WiFi + 4G Unlocked 9.7\" Very Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("40"), + value: "Apple iPad Air (3rd Generation) 256GB, Wi-Fi + 4G (Verizon), 10.5in - LockedOpens in a new window or tab" + }, + { + num: NumberInt("41"), + value: "Apple iPad Air (3rd Gen) - 64GB (Wi-Fi) - Space Gray - FMI ON - READ FIRSTOpens in a new window or tab" + }, + { + num: NumberInt("42"), + value: "Lot Of 9 Apple iPad Air 2 16GB, Wi-Fi, 9.7in With Cases BundleOpens in a new window or tab" + }, + { + num: NumberInt("43"), + value: "Apple iPad mini 4 128GB Wi-Fi 7.9in - Space Gray - Includes original boxOpens in a new window or tab" + }, + { + num: NumberInt("44"), + value: "Apple iPad Pro 3rd Gen, 12.9\", Wi-Fi A2014 *Read Desc* #40Opens in a new window or tab" + }, + { + num: NumberInt("45"), + value: "2019 Apple iPad Air 3 10.5 256 WiFi iOS 16Opens in a new window or tab" + }, + { + num: NumberInt("46"), + value: "APPLE IPAD PRO 64GB WI-FI 10.5IN A1701 SILVER TABLET MQDT2LL/A AS ISOpens in a new window or tab" + }, + { + num: NumberInt("47"), + value: "Apple iPad 6th Gen 128GB Wi-Fi + 4G Cellular Unlocked, 9.7 in - Gray - EXCELLENTOpens in a new window or tab" + }, + { + num: NumberInt("48"), + value: "Apple iPad Air A1474 16GB WIFI Pre-ownedOpens in a new window or tab" + }, + { + num: NumberInt("49"), + value: "Apple iPad Pro 12.9\" 1st Gen A1584 32GB WiFi Gray BAD BATTERYOpens in a new window or tab" + }, + { + num: NumberInt("50"), + value: "Apple iPad Pro (11 inch) Wi-Fi, 64GB, Silver (Brand New)Opens in a new window or tab" + }, + { + num: NumberInt("51"), + value: "Apple iPad Pro 10.5\" 256GB A1701Opens in a new window or tab" + }, + { + num: NumberInt("52"), + value: "Apple iPad Air 4th Gen. 64GB, Wi-Fi, 10.9 in - Sky BlueOpens in a new window or tab" + }, + { + num: NumberInt("53"), + value: "Apple iPad 6th Gen. 128GB, Wi-Fi + Cellular (Unlocked), 9.7in - Silver (CA)Opens in a new window or tab" + }, + { + num: NumberInt("54"), + value: "Apple iPad Pro 4th Gen 512GB, Wi-Fi+4G (Unlocked), 12.9in - Space Gray MXFG2LL/AOpens in a new window or tab" + }, + { + num: NumberInt("55"), + value: "Apple iPad Pro 12.9-inch (3rd Gen) Tablet (Wi-Fi) A1876 - Cracked Not WorkingOpens in a new window or tab" + }, + { + num: NumberInt("56"), + value: "Apple iPad 6th Generation 32GB Space Gray Unlocked Good ConditionOpens in a new window or tab" + }, + { + num: NumberInt("57"), + value: "New ListingApple iPad 9th Gen. 64GB, Wi-Fi + 5G (T-Mobile), 10.2 in - Space GrayOpens in a new window or tab" + }, + { + num: NumberInt("58"), + value: "Apple iPad Pro 4th Gen 12.9\" (2020) 128/256/512GB/1TB WiFi + 4G A+ ExcellentOpens in a new window or tab" + }, + { + num: NumberInt("59"), + value: "Apple iPad Air 2 16GB Wi-Fi 9.7\" various colour + 12 Months WarrantyOpens in a new window or tab" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "product_address", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.ebay.com/itm/385077763771?hash=item59a86c5ebb:g:UnwAAOSw9SFjBN0z&amdata=enc%3AAQAHAAAA4NrXp7Pwq2uBVPvp7oCv1nZVhrg1syxqtty0g4VGQvuCi%2FqMgTuS3h%2FHVrzcLNHNEL75eoXllSsCqi81UUrsyWvKxinUIDFe3DmZPJoEuP5G%2BSWZtVaXjAxwSWBhElT9gND4oZ6B21qyI09PSe3Ztat6Efrv3vltvgPFFfwP4upsH3uFBm%2BFoFu2qSF3apV5GOBo7pSxQp7qut7oGq0wqSB5vT8CU2AqNNXi%2Fv2g5BSqSnqziqHeQco6ViJb%2BDwZnU4FBKDoBfttwMLTLhLxV0kr0kiUJSF2jekDGGyKBMvT%7Ctkp%3ABFBMtuf0qNlh" + }, + { + num: NumberInt("1"), + value: "https://www.ebay.com/itm/204057987847?hash=item2f82cdcb07:g:5lcAAOSwi41i55gr&amdata=enc%3AAQAHAAAA4E%2FUz6gObrUZIYUe7uU440oG2cKUwl45CJmshoiFN8gqOULXy6G3rJgOqdtvyy%2F5ogyUCKouPzfMvAXu51o5WgEi86iMpfVyHpWtnMm1JJJaJxHVuuSSXGnFkqAC5Q27MKx8iDmdg1r80lLwPMrJCDYQ5EtVjqp5E88TynKq2Jz%2Fs%2FCmIHUH%2BHfngINQSmaakaqw%2BajK9d%2FodDE8DmQ18FEwDWjkgAj%2FdvgPTFZM2vkUOcUXRW6XiNidD6yfpqvgevR26p5ih66Fs5FnY59tbfYNTVmavG4SvwQSYUqDkRQ8%7Ctkp%3ABFBMtuf0qNlh" + }, + { + num: NumberInt("2"), + value: "https://www.ebay.com/itm/385136136551?hash=item59abe71167:g:5jUAAOSwOJVjMV4b&amdata=enc%3AAQAHAAAA4D0peKxVY2%2FgvvXSOugBTL6AhSYGXl8Nh0GFxjJ715Z2otHjfNUeQ04J2OpdKiztI3hlmkCAYjqlftNgF%2FzXrDJMkaodSqsURqEYgD3yarRSfRkCws%2B6Yhx5z1NooeHVF6EkVYQR4kQlw9UlkX9EW6GJD5K2d4Rbi0tRh7%2FJsYOjNH3s2h2fpk7V9A0C4DCfMd679xXn2GNYiH57iWbGxi6ihA%2BYOnCiK88khAI6bPFdTMkUHzG%2BxuSI6uK04IzD3OrzwqeHQUGqkvJqOLO17czsXAVgHSaYd2m2o3oUMpcv%7Ctkp%3ABFBMtuf0qNlh" + }, + { + num: NumberInt("3"), + value: "https://www.ebay.com/itm/266165047247?hash=item3df8ac4fcf:g:zogAAOSw3DJkCf3f&amdata=enc%3AAQAHAAAA4DTSWISM2dn588EnBaVcBtpQNYpCaIn%2BRdUqbshTu5wX2ZB93X0DHAspCV%2BAngIsZgvGf6nRcYu5qvSnH0AY6Vi5rJLww7eC0YtQ34sLJMP3xoOz3nY%2Bd4s%2FuCNCv8PT3wcwjqkHWU5xFNp4MmVy2grend%2FgaStxonaOtXfor1xbDrZcqGprg1xEGCVyQ2Wg5E6jrgkXyLoWRcp5s7y%2BbOr1QlmtmWueOiYr0ET7bnUwidM37nAtlqhsbL3IjViopFiYhE11x%2FMYNoM90mQ9g1WE6iyd8EGTaNRiCypzsG8V%7Ctkp%3ABFBMtuf0qNlh" + }, + { + num: NumberInt("4"), + value: "https://www.ebay.com/itm/115705841441?hash=item1af09b0721:g:EKgAAOSwrqFj5oiz&amdata=enc%3AAQAHAAAAwHQ8IUc9uwqYG26ah38A3w23jRFdN1Ig0H5UGvxDl1cRNc9p%2FupoU7CxCH8VWlG8%2BM%2FQARuakfYjqX3BATl5gNfQNQjr9COeX6dDA7Md6qtJtyeCFh9tl%2F1y38OBa27R7YI9Jg%2Fi6aPuurYYts%2FwcDjxL4Nthw2zXDtT02kc3MCbF6Ry3fjeFgJXJTdKo3TeXqHh%2FVr3mLqGPKAYCHRCIzii121QUyWcKCRrguH%2FgfgW7MNExbzgMYv2tuHBuFFbug%3D%3D%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("5"), + value: "https://www.ebay.com/itm/304830388882?epid=15040889178&hash=item46f94e9a92:g:BWQAAOSwFytj2TK4&amdata=enc%3AAQAHAAAAsHEKuDrHotr4JC9o9DA2KolW%2FtndLXsPtRicvEqtJMCkoL%2BXLA6VAYaoMYddXtbWVhgImXUzROUUBvA%2FOhhiU9OVwhGDbgY2uRiMR8KKiL1aH0ogoBsD6wboh2efnpbfO1eymfD3hdG%2BhUXbGNEIPWv1N3pyF5qxbS%2BmBQwn%2BJijoVSoODCbatNozUrTKjRcHe%2B7sHCABOSd4N8FpB%2BS2NrCgk7qqbI40tGmbq4LOHZj%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("6"), + value: "https://www.ebay.com/itm/266159309327?hash=item3df854c20f:g:ljIAAOSwLu1kBKl9&amdata=enc%3AAQAHAAAA0HZSvv6fesOlszYSAyv41TjZ2S%2BgXiL03f10VWAB9vxDkPHbHG6Imfo8SqVmp5ZtNQejQsOkluGz%2FbwOBQPG6t41RyOKYJD%2BxZsYhESTFJUjmk8BTKpCRJpJpalHou%2FbOrJ669178ataJAtJcVXzvy8aCEOmZy8GupjpfPauPMc7Ek3l3QZK0bWD%2F%2FjEBHiAE57eAjeizcp466hAceqQ6rsfzpLhAasRMi2CqZc2%2BFmu9FP7TWVCWYjFL3x1onjbfpUQhHwJOgHci%2FlMfl%2ByazI%3D%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("7"), + value: "https://www.ebay.com/itm/204268743406?hash=item2f8f5daaee:g:8eIAAOSwxJ9kCZRf&amdata=enc%3AAQAHAAAAwBtOJ%2FydwPEbbVfvx4IiK4CkfAvg9kvg891WtAuYQJyQ%2FhoXCD7x%2ByGGOcaQv2r4iuXftJic0PrRm7IlRRD0TGEx85Jj%2FdoJ5ApXAtQKyNrg0hSYbfl7ivfJyylKK3cBHfZkUSCIvyX1D%2F%2FsINeL13js3drMmES7Y4%2BRAY54Uq9iwwea6t7dUJX%2BjsCcGAvFt2tvFkVa29Ag1T4cu9ZHl0YEstItVSfAxdB0YqKD7J1Rcv5W5WOGdkC2fT1jeaSM2w%3D%3D%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("8"), + value: "https://www.ebay.com/itm/165324532233?hash=item267e1c2a09:g:i~YAAOSweANihbJA&amdata=enc%3AAQAHAAAA4PRdPePOAndMxQlHUagbauYmHEKg66R22EB5qNRttKUTAQ5zm7nVGRd17OqaaIpwRf2OeXuKAdibWVNoK2YHOdpRMYmDLgo%2FWldnNux%2FqxN4r0VBw8caravO5NbQOmPT%2FQqcXvXyQvjsTwemYYiIrr4UT1cK8QtHWZydW%2F0pWNw3cORks8BC4pALS3FqUjVXxW%2B2PDofuIoopip8bXq2MFwvOmuWH3Qjg7SfMtAw6u%2FEOJ8Gj6bxdcr57xMWFXbgjcSV0rWp%2BcBrsSwZnEyDtaKipsERf86Bqv3oQ%2FANRvCZ%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("9"), + value: "https://www.ebay.com/itm/255992774978?hash=item3b9a5bc142:g:0EAAAOSwR6hj-49x&amdata=enc%3AAQAHAAAA4BYCvHKet5kmly%2FcZc%2BEJrLsf%2BpUCwXMRK2lzK0ruLre45D%2BOlnD3YGzKMCmz3l7KkkA%2BMFTiV%2Fdb89TFOXL4TZ6N57rNpNrUnjV2rocIvH%2FjbdNAWKquJPQnGuZbJeOhNdmQw9yknWtoQpWs3wIhvgcQWrh85%2Be3%2FfhfHB4QmLDUaXWk8QtdXRHqx7sSL4gespfS2oScckmmXF0isYs9vK93IO%2FC5XJuPTayXB3BiweCVckBGUagk02ybE9gf1fI5Nm9Co0TQ2Ii8oF32PfyAC6XWGp%2FaN503Sh%2B4lFGtuz%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("10"), + value: "https://www.ebay.com/itm/154854581495?hash=item240e0d64f7:g:3YcAAOSwQNhjfRjm&amdata=enc%3AAQAHAAAAwH65uVbIcTEud14IYdJaUXMKEbHjjx9tMq5HxvkQnzHJ7A1eVoWyvIxwKK3A3GNbauy6DvlOeS8xfXmSLviCyi3DSoGN4Oec4ZcVhbdTE0aZR1Yh9kPnx56EnDw%2FBfZ00UJ6SWlni2Q0bDrDjPpfZOhR1sbc4A657iXdX%2F8CMBCQtFoaXG9jfd1aCCr7R%2FxlGyLhdtvrsvQPvT6WpcDc50SJ9z78dXNDMUN5ugukPwE8IMB%2B0%2BKH2ahMeCbrVpjW2w%3D%3D%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("11"), + value: "https://www.ebay.com/itm/165920897625?epid=28049286309&hash=item26a1a7fa59:g:qpsAAOSwnzthQhsT&amdata=enc%3AAQAHAAAA4HrvpM86eBPSfjNMTce%2BTeRIouWtlGPZPKaF6unyLJe3ZoVBvWY7UJawXwRyXqbf2hpzfL%2Bc5LZPKl2B8EwVWU7S5F6G113GMqWd46Vn%2Fn6vnpiUCkdTE%2FRxAXCIFIcjRlj%2B6eamle1TKrh20pNSGPCT9Ao7nx7LrpDxQzMtCGpX3j108AHHOyS2jyFWpkJUvpmdUXr0DSiXYUjgsVHLYE%2Fp5um0d5HKck5whabimCZh83RSSrHen2S%2BuuoE%2FUk7uNciBcqssLOjwAEZhLhM9JRDcrQbRpNizn2cZBW71gIZ%7Ctkp%3ABk9SR7bn9KjZYQ" + }, + { + num: NumberInt("12"), + value: "https://www.ebay.com/itm/285140988740?hash=item4263ba3344:g:Ka8AAOSwr4Zj3BX3&amdata=enc%3AAQAHAAAA4L3B6sNQOk2ldeeFxEe7lrMRLwvOpTWuXU6Il0Fmni6AuLEvKoCI5V67OFGJ2ZocgQFfLUsRnD%2BEBvSTzdLfEEUKZ4ZjNlt9dx1JMpw%2BFFu23ihPDCU0EID4PesmP%2FJ%2BGzVv%2F5A1KDPdvJqXsiz6GubTMt9%2BkHMwJXOKEwz9DAIlqPb%2B3AnoIHCMmZu7FECilvnWxMx8G6iw4%2FaAs7DuUpvwCSVKx%2B3iVQXJf0Uvx4b74W2v826Evqupz%2BBjIAFVOxvuEfwJcmRv9B%2BIZnHkjh%2BGx8hx0dwFizaw%2BB5eGfmW%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("13"), + value: "https://www.ebay.com/itm/275734713781?hash=item403311d5b5:g:hR4AAOSwT2FkCS-e&amdata=enc%3AAQAHAAAA0DnHLZPIdEXO8pzBqvZokv00gHugNOIWaucFAfCwrxlSy9JuSRICrC7XHzJ4IeD06wbKL3fIyGEde27UlCaxXdS%2FbBxw0LGqJd5CWXDJUz0ClSyqbaUcPh4fWRgm5EyMFDislmPSeYCSV36HPxf5m5PB3f7RQy%2BwxbqIsBa1NetPyR9%2BalfXPYGV%2BcMwvWM5YM9%2FisCKmGTY8S%2Bw5zSRs7rC1P28qhjAxlkgvlukZnVK4ZxEtOqzS8Z3DlqwBIbtc%2BVMzPzM0iycry%2F5IcxRtfQ%3D%7Ctkp%3ABFBMuOf0qNlh" + }, + { + num: NumberInt("14"), + value: "https://www.ebay.com/itm/255965396933?hash=item3b98b9ffc5:g:SOMAAOSw8N5j4MVT&amdata=enc%3AAQAHAAAA4ACtUetU%2Bu5UN30jeAg4%2BwByM3cX%2BVLfSdUthTH2bTsjuLuobR56euaT6LZRYl4rOw%2BH3JQ2QFPI3QtXn4q7WqqcOl3SfBQRjH%2FoMdLuWc6M5Y1uzjVr7lTgKZciKdIn2JlIszpmFJXGzzP7r2Xk8foI87D8Ox8ppzYfWR9TjCNTKWw0m0%2FZ3YCmFdNR9Nj%2BPq89VW2G%2FQYczXW%2FbW6EwTLmSk7dU3V2KDmeRjMeXVoYY29jSB5YcqpNsAmAZVhnT8SBKEL9eXdt5cGTPMcs0pjSfhQTAzD5uxsMl1i%2Ftsey%7Ctkp%3ABFBMuOf0qNlh" + }, + { + num: NumberInt("15"), + value: "https://www.ebay.com/itm/154887586872?hash=item2410050438:g:HbEAAOSw-axjQFZz&amdata=enc%3AAQAHAAAA4JiDYMl2ywaLtK0nEpdGYYnDfZXHvmheEwgTuTD%2FDAiTtjHdiHA%2BX3NC967JTwTnzG7dozRoe1AqAIYoi16Y6pT2awSpQr1D%2FqsFyspngupb6SE2h7xBVhY36ZjDXTqvhYaG0SfdNU%2BnIeMNU%2BqZFXkWXYFrJrnw0m4EgnVsxTZQvWt4uI3zkoaiNp4R1O%2BywEHc%2BpO9go1MagURWqThkjrW5r3c0pcr3tEc2dG%2FhogwKmiN0GotpqkJ1xMYf9QF6cS%2BXP7fGy9MOt%2FnTDj9SH4uiI9zsweclxuyxNQNHLms%7Ctkp%3ABFBMuOf0qNlh" + }, + { + num: NumberInt("16"), + value: "https://www.ebay.com/itm/155443466095?hash=item2431270f6f:g:bvUAAOSwwbpkB-lv&amdata=enc%3AAQAHAAAAsOx7r17rtoClDzQfCAs7UAlo9Mj0%2FIjyevHTyn9NNyY%2BW0slYIbAtMwBmsP1PWQHnhgqI4%2F%2BUhff%2BNo0sIFsXWpgARWG6EOTtE1JpT7IkZ%2BzmGJ4bGbKK6iVFTc5YiEfjYEw%2B81sTx4BwmyDjFuj78fXq1Q1nCNtQS8TIouECNebGPBMC5tDYBU23NsM2YwwAz8BEEEcu%2FCZnJGtCDLxnKn5EIytJgZM4V13fzqOcT79%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("17"), + value: "https://www.ebay.com/itm/134337765811?hash=item1f4727a1b3:g:sycAAOSwYLBjfQXb&amdata=enc%3AAQAHAAAAwPXeJGXWceqmwWSqftAPAwsNKTgT1kH15gHQTSz1eU2RHyX8b0tFoyJeiF9L4ypA5A64g6SVIK%2FCTv9497yjW14ez2z4SpZUNQMwsBpzDKCqVd8yEgzqcwO0TC0Zee20iKl04F8QoYuRDwXXeUBAaoBJPKmb42K%2BV1fJPgky3NgNixkJdg%2FSpBrBrgIc7rJ5N2uRf2T1vudffltSez9C%2BDZKD4HKXBBr%2F%2FqgyOx4eRLV35Ahpdt3sK2cLO6ACQJWRA%3D%3D%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("18"), + value: "https://www.ebay.com/itm/266147146323?epid=229053842&hash=item3df79b2a53:g:bvQAAOSwpo9j-X-c&amdata=enc%3AAQAHAAAAwHwBOm97TRxk%2BlFR5W7fUbMqtc0h3QdJTQdtlwZxZ461vumnai9a5jFLmGU%2F%2BTlQZr%2F4iSdlf7CBmDPK7Hd%2Bn5x3jA78Vg0NDbsMeaCK4MM2mKTDB9M%2BbmXmC3m1RTzDiem%2Fr6%2BYxXRyV8M46QVMCdPhk2CV1S37Cyx4qa50RbCRmCylTMdpB%2FLx42qepkvWFDhfVMAZau8yFLFuyCm%2Fvnoav3zz9AjilJAwDF9WDVfRn0y8EDo3R3h2roIysnaShg%3D%3D%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("19"), + value: "https://www.ebay.com/itm/255938053221?hash=item3b9718c465:g:u8UAAOSwTnZjrJtU&amdata=enc%3AAQAHAAAA4Abf1NeQOawRf8SzFSgsJsnGDYZysO0GDj7nEs65jec0f93d1BK20V2%2FkJpX2d9lWiBNeE4l84wQvrH5aMEhL9uqv%2BTX%2FlJXgVYyFMHXwMlb4y7L%2FsnyvFb9oQD%2FrTh0AZUmEGqXKEACmXCcm28jDIqJ5BGzvuNfnQD1zZLkbOglnBruetq%2BaWkNyEHSHSAGdAqA22rDR618XOKU9aCH7u3R2B7gjfR6gGqlaGqHCd4iRE3NS4PBiuIf56XKx1eMxZCTQlXUx9UX3PffkJohr67Y6fkAyLx0ZeE3hfzMxdn0%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("20"), + value: "https://www.ebay.com/itm/175140626362?epid=243729421&hash=item28c731dfba:g:6P0AAOSwMhRh-p0R&amdata=enc%3AAQAHAAAAwGznVrcslXesmFCthZUZaWGYKIPSpK7wBNnLIL1gnFw48XdWXQBLAX69y29tFWI6vhApTGwK5I%2FHlb1ZK7lPWUQkUFp89FvDBHv%2BIWfYZ145diIgbl4Q7H1buxSZJFQU%2BZMf%2BOnZAw9SBGyFq7hAfVyiiYOG81DfNKuWESHGoKCrU%2BgE1xSuNbtPoiu7fdVRuA%2Fr%2F7PHXETrfa83IYHGREiPBIVCrn18f80Dn7E%2Bux%2Fhydp7%2Blu%2Bt8jTCp3aNKV2LQ%3D%3D%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("21"), + value: "https://www.ebay.com/itm/285177232915?epid=5034224458&hash=item4265e33e13:g:TtkAAOSwx1dkCk3I&amdata=enc%3AAQAHAAAA0JgxmT%2Bn8HapxtDsvoWMtdpvzthxag7pUMeZiqpwnuoExfESOe2AzgUJussZWIva8VEI3jmiuYv4VDij0i5G1FdeSHZjQBiZYIxmZ7iS8HpEZ%2FNYKXw0MRvL0J7%2Bk3dYVJsNRPD5QU2dXi85GTSfEH%2BAKkIrFM%2B2L4DrKYJB5oKmtMX3tgKYLn5aDjrIjYBJpuxn7n7TkiPrRBMJ0YjVU5DNuS9HkJyMOwuiqiqyKP%2B13SSq8EHABVH4MQssZuIlHTCHRfOQ%2FkKdOrmebH6tpBc%3D%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("22"), + value: "https://www.ebay.com/itm/385469299104?epid=243845160&hash=item59bfc2b9a0:g:D7cAAOSwnWpkCg2i&amdata=enc%3AAQAHAAAA4BBKuN041pOilIoBe1YqqGfWjOiXPvievuHMPAzOMl8r%2FhJk0jy0%2FLVfBG1C%2B7%2F%2F5yaDaDjdIcIGYvbBPSkasgHzxuKln1gxkQOBRJgJdQgTD08DErfceGgy36rj7yuu%2FxZ2tQh7UKCkPrnH1qfspN5xDejX3XEqGT0Bsv6IBH6rfxJ2Vh8sPfTL0q5%2F%2F%2BIkJJQZRBMh3V%2F%2BPpXB1Wko8FmMlV5mujIsllQV1mDK0hSB4wmSbxkHtMhbq8mQyWhEzTuD7JSOZt%2FVcQ7wswdR7j3OMHXRW%2BQUBDDG%2B1OCIMI2%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("23"), + value: "https://www.ebay.com/itm/285140990614?hash=item4263ba3a96:g:s4MAAOSwiRtjcqaM&amdata=enc%3AAQAHAAAA4MF%2FU%2B3AzqHKZzkdJ2eb%2FpUQs0KsCR5w5VJSuccFB1IRyWXfA1lA5GeDyR%2FJMlp61f6CleLW0Vu%2FDy0Heg3rjax%2B%2Ffbrf8Cdg%2BSLuUP1I7PlgTGcJEMGFzJxgd5fQqcmcznRZvzS8YKzQKIL5ieelWYMq8NgGq0bkjI5ggk6ztfnbYe7pmldHBj%2BAU1WNqQVpQpUj5KgKhxeO8wWILiSFCIDHFqGXy0waV749AeFH6yiEFoKax%2BD4MEt1an1YyDBgKVZv6lxDjC6MqoY85EUSWV7oyuUn7JWy5TeInjCiG7I%7Ctkp%3ABk9SR7jn9KjZYQ" + }, + { + num: NumberInt("24"), + value: "https://www.ebay.com/itm/325558494238?hash=item4bcccc641e:g:AlEAAOSw9olkAX66&amdata=enc%3AAQAHAAAA4FjIVwdep61L6UndCX7Uk49Oz3UZ2I2bPCLEnBf08TmxgMdAfTnpRhZTg3ZcN05TMNwVP6%2FjWhjnJAUdLJlnE0kz7KJnpgB8pIlNVTK0YG9zn2noybAnttpOMLQiNTJDJwq1Dh16coAehzGDOmdMdim0%2F8orYHELGou4Lm9dpijIfkwH1L1iHGL5CSNWRRd2O2cAHhg2KVQqzud4kmpj0wMeeUJzW5EBiJT1WGZrTW%2BJnBtdTwqb%2FYoMbBvkrkjK%2FKMqB5Scw6mt1UE3IVmMqaD4umwcxuRSjJx1KYkIea%2FI%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("25"), + value: "https://www.ebay.com/itm/144978157843?hash=item21c15f2113:g:A90AAOSwHVJkCH~H&amdata=enc%3AAQAHAAAA0DXQtCtoBJmxjrte8%2FlP2223i3rAtQVPHbkZmbBMhCMbLSFTqwrj%2BkOHTngTzjRLagl5iUvaC6AAGxaEB1bG1QiuK%2Fp5mo789ovs0lahAn%2F3P9GMoXWG%2FME%2BxVxW%2BRrFJ2kKQrbbukocjuyEUBqTv3CP8HozDq2ZqTZ4vevMsg2iTJLvEqWlwJOOHRQ3rbcTYJvpzGUCIn5ltBXE%2FB1y3AehKXbjcBIqveNqRHD4PAP7S0%2BZji7RXV56uue%2FUXReL7qz1LlWa6z9%2BbYhZ%2B2AbTk%3D%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("26"), + value: "https://www.ebay.com/itm/325568007059?epid=241922885&hash=item4bcd5d8b93:g:lCsAAOSw78lkCjwc&amdata=enc%3AAQAHAAAAsPQcVzP2njJ7Lgu1704S%2Bv4luH1rngNuM4h2kvfjLToRGWYayprdK5XZUAqkXu3FVIoLYeBF95Yavph%2Fty4vpk91UHJA74iI6ash0zxVGUfmL0DSSsAcRpfwHO3wE65fvFAPr8mqKDw15S%2F1lQXn9RMeG6a%2Bxqb1Cwdt%2FCIo7wFsiZE6yWBRKqWiipNuQiX%2BFUqrepDwoB7SVf5SjH1%2FkTJ0r9HF2%2Fv8FMoYvsdVwuk%2B%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("27"), + value: "https://www.ebay.com/itm/295552779318?epid=6037478371&hash=item44d0518436:g:3jYAAOSwg5pkA6Ad&amdata=enc%3AAQAHAAAA0FKS9HAkD9aM5cb8j2PbknUJOEDdOfS0qPY7IZseqjSfM1cLaw7ePUvij2xypUBTCuBm2qTjykUDYwgzymzELczk0OFZ1cqLg1n9tBmCzhkSt9zCD1GFh9arNkdPCckz%2FYePHprImxsYUCILUSD1u7yEtfCUAb1ayOs3NLKvmT5cAPyqzbh8Rvv2wPGuASWuKVlh2I2tgB7gaZ%2BElrglu0tu8TBR4pVOmNfhaA4X4IQ0xqRemqQVb5TYGwjWvuLWRyXPPYhAbJQMdbjW9ST95ik%3D%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("28"), + value: "https://www.ebay.com/itm/385468530180?epid=23054868819&hash=item59bfb6fe04:g:JbIAAOSw1M9kCZQi&amdata=enc%3AAQAHAAAA4NVL6r3foSQmcRTLravigpiVDqZDkS8sbfikV3eMAQpFctPIczVbxXze1BsoMEf%2BOpf2TrHf7eJl4JZH7Ge5%2B%2BkUKtAX7TzfjXUbQHI60d8zKtAs67LmZ4MEaof5U4Fu%2B4SmbIHB91LHDOsrARoUXX83J1VWyuDmRJ%2BuQJOHZs%2FT%2BfwNaPSAzm5LCtjmXafPaT43HOL2tTOlnZa6a1%2B5O%2BHPY7W5ok8siUL2JzBsFD%2FHecxR4zxZAEMNlrQ97Leyet%2FN1BC5UFhZ1YlKxF%2B8hdzqqd0XgNbgZ7w1Ujp6yda5%7Ctkp%3ABFBMuuf0qNlh" + }, + { + num: NumberInt("29"), + value: "https://www.ebay.com/itm/154843099853?hash=item240d5e32cd:g:YccAAOSwaZJiBxO2&amdata=enc%3AAQAHAAAA0MdEGXnecvT8Lzt47CZJlvHrtfmcQFUWXmslsSmJrgMoK7JHqbixOpsihOwU476LwjY7rAlAOoyfquPMtFV2zXh8EuSu55ESItj%2FI5gKJ39Zg855IFc%2F4XNNLDC14RIAJ95skhBy9%2BkWUvkwDJhdiznKApVi7U7IQTIefw220zDgrFrDhHo%2BfQ0ymJZ5Frhdg9YF4YuOSJhsF84r3sNKSAA9K9Zx46xvrW0vTAsUB8jER7qQL%2F0BfYfm%2FDUy9oYmPQEojBgUtwIEKLsbmd25jbM%3D%7Ctkp%3ABFBMuuf0qNlh" + }, + { + num: NumberInt("30"), + value: "https://www.ebay.com/itm/284204990157?epid=170330392&hash=item422beffecd:g:NLIAAOSwgPViVKNu&amdata=enc%3AAQAHAAAA0PIy7ufXkIAlz3chNBgR1IbqgrHNCOehUZSDKwa8RWaKfWCTzYeId4VUoa2pqkBZFRPh1O4StcDGU6ToKNz8%2B6XJcufUOf6KuW6v7LrFJGSNFZdR3dh2I%2FVuEO4NyC9Q81IigX0BjZMDeOligsaLnQugTC%2BfKoKWOSIC5NyWRzuLEttqZKUwg0n99jkfPjYsHzl6O4YI6CCiJTw3CyICukLUrJKItdVxYPPPiNVhfrNnWaCI7uNLWIZrwFjAg8Ab2gY%2Fgf83rGPpk3%2BIzBmSD%2BQ%3D%7Ctkp%3ABFBMuuf0qNlh" + }, + { + num: NumberInt("31"), + value: "https://www.ebay.com/itm/313751933866?epid=235202925&hash=item490d1293aa:g:ojwAAOSwTmBhj~7n&amdata=enc%3AAQAHAAAA4BylyH87Z2SPgwqz1VTJoOEvCYIA0sQuuBXXter%2BscHSRzKV7TZ6opvo5uJC1N0rBC29DJ9xaG3CBZgXZwYpZG6oHpqnqYGJZyPLIDDDT6%2FkO5h78kcdjh4P8m1vM8DiwcYiI1QX8FDYyWBRkuXf0x262IKrn8rvmZUKok4YKevKx%2BxNnyAdwGiHk98xMyciOwBz02pBUyqWdiOJTC2ai630QCN8DZ%2BY9e0%2Fld3gH0VduKdf4bW1vUCNr9mIQkwJY2ZAx4eDKtU9wCLBBbldZObfqqeLk%2BiDxXxn6GRFqNN2%7Ctkp%3ABFBMuuf0qNlh" + }, + { + num: NumberInt("32"), + value: "https://www.ebay.com/itm/266137891447?hash=item3df70df277:g:B5IAAOSwq-Fj8XA4&amdata=enc%3AAQAHAAAA4K5Ki1ZVhZPC1QLoP0vXwsm%2FTGOWk%2FnsoI93TGj%2FFQPFY85HBS33inbmu6JlubEGxOWkFIZT80%2BneNn1S1alKU2pcKHmsq0PQdOcJHR%2FqlLdc4WKygVPkLWCMDAWbDrvrvorGtWJqotLll8s%2BaNZke294sdneMK7em8RJb7iPGO7XjXM1kb1J%2FyBjlthjepHKf3f%2Fmx6IFHGplpkoCzzgNwnUaLeTAEUiOra0XOFE392F8ODNPIf0V24Z2twRkf9QC0MBjfZ7h7eFyiq0zlOlQSvdE1RYXoJwouXDwPws%2FsI%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("33"), + value: "https://www.ebay.com/itm/285174357206?epid=238174530&hash=item4265b75cd6:g:JAwAAOSwr0Fj8AHz&amdata=enc%3AAQAHAAAAsNCbKiaWXP2LNfi2s5fMCKCahNk0sN3W7r%2B2SOE5n5KOBOtpP%2FsM4yhY%2FPwiJlaCaOm5t8ja09iolXenNw50eYL7TEgEXSvirRIULpU5rmQ6M69c31Ezaaotfc%2BZ6cEueHQ%2FB8boyKuIm%2BL5hC7fwObYYweDxbU2MD5waTrJyqCb3clZdRPxpKZygxf8MpBjNNIP6FzQsoaO4PX7gFfjBla%2F4qNaOe0Df9bUUBQT%2Bys4%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("34"), + value: "https://www.ebay.com/itm/266163817877?hash=item3df8998d95:g:F30AAOSwci9kCN~-&amdata=enc%3AAQAHAAAA4CgoGgi%2Fl3kZQtt%2BjNwdj502MCo%2FBte1CSrbfH%2F2BFdP%2BkWuvup0Vvs86TFRRR1H%2F1yIiK%2BLpzkUVXhskaGh88e0UBnW8qwE9YmUOjKfFP3Ra3wgwzeQwNoAa8D02VwR6XimgaXn%2BRD2RwoU3E3JQegAEWu74SBoeP27bKgyVi%2Bv2wUZVqAc7%2Bnj5RDCwjgB2KpLMzrWMoJS9tclYRue4SmtdL%2Bzf1OYT3P6ZREDAOINeGPBtUY4dYARu3o%2BZYekiPXGSb4H29D%2BLKpCn7Qrnlov%2FoRvJhJaUlioHIB4mpkt%7Ctkp%3ABk9SR7rn9KjZYQ" + }, + { + num: NumberInt("35"), + value: "https://www.ebay.com/itm/275608368141?epid=12057115261&hash=item402b89f40d:g:aLYAAOSwzyhjr31J&amdata=enc%3AAQAHAAAA4EXmSTJPFNWwbBaRdDxGoaZfu7OoiHpwprWCSxGdJ9oo%2BB29VesQ4nS15Wkc19soUN1OeXB9p6sO21FUwgY40%2FhzNxQawIinI3RrXfGwKp6Zp%2FfAJnunleAEno3ihYd%2BziQxwCx32q3XhPJR32d9EqZLL1BSQ%2FsnWmfaDyhwsfapb17nkUdzvsf59q%2FaFYlM8sGNDfIJx5k0KzDkdXaWxlg9s6iscQgRLJws%2FqeU9qcj%2BhE1sSpDzwG1etid7IFFLKtmFl3JhxbG6eqy0Uf3qso4%2FlWBfnKl0aHwty5uTDYM%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("36"), + value: "https://www.ebay.com/itm/165971912879?hash=item26a4b268af:g:a64AAOSwsmFkA8xZ&amdata=enc%3AAQAHAAAAwG1V2RY52wkymf%2FSukwx7ChtE9qUJKCrbHkG8RjTzVIuYGElpZf03lJKD0Wcs4a%2B4qNFudghRGAM4nyfFsFEaW3pT%2BhWNHR9e7JNr603%2FbDJS8h9L6hwl4Km8EN5vqTAFYXzD9%2Fw%2BpVe5l%2BSyDzh388JA0m7wPfdSpXTGYw8UVe0zWh63Z3C3k3t1StXTuNMxUyaErznWglw4dRiS6oLbIDvvzBwVJTZjGhaOXNDQf7oidKkvVrZJzaLTdaUxFU%2BWQ%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("37"), + value: "https://www.ebay.com/itm/385451028441?hash=item59beabefd9:g:En4AAOSw0t1jdVaP&amdata=enc%3AAQAHAAAA0Dk0RaCeZ2BtgcymfxEhDgw1M75EzQep%2BUIPszmgILgkaWF6uLr3%2FBjdN6HJlPpFwb9Qqb1CtQczZrCeLRQ6yCGpdwBMYZkkVbzZVuxhndgplFd6p8U6tpSGH%2FMhvY1oXmRjpnEhZpAXXbN0yooEApaSMbKkxWsVvRAmJG%2B8BU0V3jLHXdGiFIShMr7vg%2BZt%2BnTEFFmiQ9uLfFbzFHZ2QjmR%2BmV8wftOGyMLWmUz8cFaYBExECPITDW0X1iJcKVzAUR6D8FdPHb0ET4cdEOIXW0%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("38"), + value: "https://www.ebay.com/itm/265785439260?epid=204351686&hash=item3de20bf41c:g:Mp8AAOSw2-9i1Xur&amdata=enc%3AAQAHAAAA4GMlnOxKu4BbRr%2ForMb3raZ9XJD%2FoC3cV95s7bUGrFjMvSYWh84b8URzj%2B%2FUGvuhahkbQbIEw%2BmIytJPsffQgHnJAJqJdSHaorVTFr5bpT8oXSxCA1LCkuwD2cUxG957PKITuMPtn1c9k6RUgdeccuSnWgYSynWWLHDBRL1b9PFq88H2Qbnsq1oZN2zt5VBA6LDE%2BtGjMrVbuDBuPx3KLdTnTPKNqAAgmtsLTw%2BpeZubefP4MnjVWLWeVdGM4LWlbTjsqEdSj6OaTyzKohRWQ3yzklUJjh9%2F0tkhkEZIvG40%7Ctkp%3ABFBMvOf0qNlh" + }, + { + num: NumberInt("39"), + value: "https://www.ebay.com/itm/385016086358?epid=12054852458&hash=item59a4bf3f56:g:9RgAAOSwlIdi1oRo&amdata=enc%3AAQAHAAAA4J0hzILHtH7WEriwqb9fLVqJEi%2B8vTjMLrI34b4h0m%2BxVzTGtAITdy3kWP9PPEQkzt3LZ7mCzTn1V0l%2BQBJVNW66sX90ij3co9WC4GAodxqF%2BjXJPYFIa6nWYREDWUH8GGCvOK44ghr3U6rRfuWjJB8NdLF9dsiMMKbT6Zj8BttIQiyl%2B0ezp%2FJdUpF8Ml2%2FGpXJopAhJP6%2Bc78O3%2FtycDPL3ZAnpCZsRUbBRFhNZUckOaGDbw2vTbOWTLRWuUiikyWDFmbzx3c50b1qIFFmjfZeqUl%2BKo1Qv7OoneuWBg9H%7Ctkp%3ABFBMvOf0qNlh" + }, + { + num: NumberInt("40"), + value: "https://www.ebay.com/itm/266156915776?epid=16030599546&hash=item3df8303c40:g:~FIAAOSwV3dkAiix&amdata=enc%3AAQAHAAAAwJd1scWDfZCcJ7jBu0jtWfd65jPcDAofFCy%2FvkUnRCJ%2FkVt%2Bo9Raxdb%2Be4eQzSChnVk7VLRHyag17m2cPq%2FQeS4nDFyV03%2B7paP%2ByAk5KP9Urb4zcIKllGdus4XhJf%2FRzvWkTo9q%2FzYJZaFtwLBvy%2BdELaQfq%2BTrYm0l3knHhar6aIuo8TRRDIAdfnxVwCykZSi0jy79Z5q%2BTOAcgFgX%2BPTDrHAl4e8FNYl9eBdGlwhJowWhbXD3wp2jbmm3Zyc9tw%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("41"), + value: "https://www.ebay.com/itm/334778692237?hash=item4df25d728d:g:RPAAAOSwXfNkBlCV&amdata=enc%3AAQAHAAAAwCP1g6kG8gk2LTQtx9GGEsjSdwW%2BwfbYBfqLtZeumUjPN7fxlRRwuJmi6oaWyfRe%2FEoYFn5lQ0zeKWYUpksBiddkXDk%2Bt3swuTLICjCCR45c6MVZXtwZ50hJ0pBWdZ35fvb8FS8wyQHJwKzzj0P8wiyEaJdZtWqDxUpiEQRnMa5lKIRZPVR2P%2BxybN8Uvnv1779br0KnZUi7PRrmyb27RJ7A79FZer1CPOSYV2viw6bRvtfCn7Sa6WHSzn4LWOJFHA%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("42"), + value: "https://www.ebay.com/itm/285174618309?epid=241911826&hash=item4265bb58c5:g:EWYAAOSwuY9kB-5S&amdata=enc%3AAQAHAAAAsGHXWM09BFfh5h6HTIlMOc980qGb1%2F4IFo92ChwWDWiCQNX%2Fk7%2FN%2BBTaGPH%2Fo8F2XKD7Bl7RWJqORNxY8ua6NYOJz26MB2YxNb8%2F5%2Fns2KL5OFgGqGjg%2B1QlCVT8dD%2F3e5ygPBkLC5F6UcGawAgGYyBUhTmQ756g576S3T741narT%2FzXN%2FSFWr2JbLnbwGxIVXahzBbD44P6NsClWnYWE8nIGWxKzEnASGmgcgC65BB%2B%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("43"), + value: "https://www.ebay.com/itm/234920488770?epid=216598788&hash=item36b25a2f42:g:rnAAAOSw-clkA3Gr&amdata=enc%3AAQAHAAAAwAz5%2FdvaHDykxWmNR0O8VnpNmEWLt1%2F9mW1zR0IDHuWBDCgRIsF6Vof4SywJGlPnGHykeOUyS5UAi5wn8C54Q8wBIvJnrhWx5K2wqMa%2Bg%2Bv0yQNYnwNUTeQRO1QhhI67J0oOIaOkFQnpsfYnTL0sP6XYc7ubyQtG89V4GLkod4o4TmeJwr3mOnCE%2FBTX%2BBJ263tQh3GU7fqz6W4VtNZOovjvIckL2SgGX7hlGG9JB1iHz5fA0i%2BniALtd5ezqZWAGA%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("44"), + value: "https://www.ebay.com/itm/314412263494?hash=item49346e6846:g:3k4AAOSwj79j8Wo9&amdata=enc%3AAQAHAAAAwGFZKTURdAbpp577%2FVL6oiimM1weVysQSvqAoRKOYYLxyfucZGcZqdx%2BWw6okfjscbH8WCmJF%2Fut3quTx5plxuFLZt2ZjIFrEu5WoIue1bGwzh2RLlAKYsVfWsrv0zXIsBzzesNPtpmzvuNJ6PdMNw3prsjVbL9DsIejF1YGmFBPS4sxcBvYu77y%2FkqQre%2BmcH9Xx2T52fuDp2LqqUjB2xA%2FW1gWTKOA0B691%2BBLY8DRe%2FKKgQsKsmWvHu1fLBn9jQ%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("45"), + value: "https://www.ebay.com/itm/155439935350?hash=item2430f12f76:g:LXQAAOSwtFpkCKXo&amdata=enc%3AAQAHAAAAwNtsIgEKQQjQrZ9rPP5ZZ6stvXu2zApWMqOVSD3ZIJNNZhjAozlDPw%2F2zWtH3PlVtHjgEtvZ0ZElaJDzq%2FW5OwhHQclUhc9DPyWIeRHhhF3uIMvNESc39yt%2B6NCBTs0rLP2fdgFmV3G9ZhUfpdP3TF1Ahs9rBG98yNOjiTvSzk49vqTz%2FZ4cfvmy10tIIUQOF6JxKGCO6osZaYaDOsuWT67jP9T3%2B8IcwlTYRrTJ6x6Unf6NrlrQgOn3PnhPWTTtrw%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("46"), + value: "https://www.ebay.com/itm/234905485888?hash=item36b1754240:g:q~cAAOSwRKhjxvCP&amdata=enc%3AAQAHAAAAwLmVoelwRAsDr%2B10xOj4wQHVJWO3RcGC7%2Bg5CL9J74blFsClW5eH8s7GKHk%2Bbyhv0A5Oik5%2BMvrCWNzSigznHB9opnEitul2h%2BDKpPTUFTw4bcxHPbib9ldIeS9NvruKmdScUZHgwpbGF50oeCK%2BkrVw%2FoKqc59I6VNtLBzaP4ej5MlwYuKTGV44LoUIFLIbl2uZSO6RRpy95kYVULXr5al7Uj0z1Wr1tNustUzYmBndNdq8spp%2Fs2kleKXLSFc9GQ%3D%3D%7Ctkp%3ABk9SR7zn9KjZYQ" + }, + { + num: NumberInt("47"), + value: "https://www.ebay.com/itm/266163694489?epid=243885585&hash=item3df897ab99:g:xqEAAOSwdYNkCNAU&amdata=enc%3AAQAHAAAAwN8Oi2ebB6YX9Sf5deUQrgdqE1vbUMHiNfr5c1yfsk7ClloGfBWeTL3NU%2BYeVfr9tNv4nNe8Kg0mm%2FHrody1L3vFAineZX5oGDWE%2FWZqLiYc%2B078%2FPW0JxtmUZSHaaPdQ%2F7DQ%2FGxBb4UKb9fvbTjtFl6qx0Us68kyQf5cstJ76PK0GUMym2WA7TiGK25Upqwyj%2BczaMpsqXvTv%2Bi0R00UsVuDwm9s4ebbV8X3p7wNUgJMSTccl%2FS7dGgZg%2BrupW7hw%3D%3D%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("48"), + value: "https://www.ebay.com/itm/325565404406?hash=item4bcd35d4f6:g:~KYAAOSwG~9kB66G&amdata=enc%3AAQAHAAAAsF2Tp5qczI6sSSDbCNALceaM8qONodAyxuskFWt7JVAiCcNIpsUOYIiwpnfx0sUgX1JXBoycH8xTKvEMkcTABAvLOEhvhuER1gKmMG3p0%2B1l%2BcJoWEyhI0gVtcuXdX51Fb2lvg%2F8FabLAJcFtpbPUzbYwIn1%2BmrM8GTTY0hxe5R%2BpPGXFbdURgAEIIfGxGS77rst71wzk%2Bi%2BaXZS%2FE1ufds3bFVks1nxcxd8NgNjwAom%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("49"), + value: "https://www.ebay.com/itm/275730163484?hash=item4032cc671c:g:vt8AAOSwjIJkBgcY&amdata=enc%3AAQAHAAAA4LOgUb8ut%2BJStkN1xUn32ckl2sbAimmuwOlUK%2BFU%2FDBc1uPBnMZ%2BCLIBrtRa6nRizg1u01rnmaAre5dDLK%2FdOK%2BL4e1HMpAJQU%2BAL5qMgG%2BduZnrwh%2FNDLOYm9%2FPuubff%2BGSpV0Qyy%2FhC81QszafSEzqn2jLkzvSSCs9PuDxTKttSkDVjoUGaaVyk70bmKGngRTm0%2BEsa80%2Bgp5qrFLPFxPqzmMVMYQZRYNOWbDLrCY6qqgWo94aC4ObNG%2BLjnApa7c4ScOvAlV%2BLIRpYHogKt6fn7N9FdaJPeZ%2BdpS%2FaEhd%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("50"), + value: "https://www.ebay.com/itm/195629875171?epid=10025332214&hash=item2d8c72ffe3:g:DIEAAOSwwZ9j~t5Q&amdata=enc%3AAQAHAAAAwC12n30lnhN%2FuFpJBBL8FGE4vmnOj8%2B7XSWPPRtuk02GROK7F0rPTTS2Lj0557j8jOn5KwVrPCJTbozHA5y0yl%2FjrI1fSv92FfnoUutjk%2F25vk36%2F8CpfBw3ERn8PUk0i%2B74m%2BYTg9XEaOSqUqq2eL9z6i7qOi42x5gmNcmDeytJIyOGqm6TnZsQ1LBOSQmRqSBXpmDQT5reSxEHu3N0hNqi9WOcJpZ14YWgzGoZLZ%2B8E6kR0BpI7cUPhpHeyRvBsA%3D%3D%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("51"), + value: "https://www.ebay.com/itm/125802898846?hash=item1d4a6fe59e:g:XVEAAOSw60dkA51L&amdata=enc%3AAQAHAAAAsGL1BG1Hm2QbGImP%2FjBEbAODIAoIurw2Me5P2%2Bl%2Fpf7hnlS15mAi0kcNHVscBoKp0XFjSA%2FEYtJw0x%2FiLxkzjXiMo2bU8YNyQGIXDuoksHtYMe7Zo3QG%2BUIQpGAuleCOyqVPutCPcUHB4U43Wpj6t4cfKCbxGW2jXoAeEsWUXU%2B49sZFDvjSijk%2BZgyk2jnbkFpbfCIPhqhsJo9C0jt9vzpf2XU59CUciK7d0qwlq7zd%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("52"), + value: "https://www.ebay.com/itm/125809797595?epid=6040897172&hash=item1d4ad929db:g:YtQAAOSw0w9kCOYZ&amdata=enc%3AAQAHAAAAsC7%2Bt8HLorAuSQkefTP2NjgHu7fuSThauqVquGSHVatTewVZt%2FOB%2BdmAtuX0YdwEJJ58GtL1K9uY3LRGqLxN%2F4d0dXiwjHYEb3sdqzXZKmwWpiCgwAfxKrZtFw0x4IHTO%2BGcAA2jkrdu23v3h5%2BRSna7G7xCond2Eb1XGQeu%2FE1pIbp%2B6YfHFmqPOuA91CHM4utx2Vo4Fugv9n16amIHk9Ml0p8heNQ6MEAMRtOpX68W%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("53"), + value: "https://www.ebay.com/itm/364170844494?epid=243891187&hash=item54ca46194e:g:t0YAAOSwL~dkBAz-&amdata=enc%3AAQAHAAAA0KMn%2BsL5fqIx3HWfWBvGRXMog94GrXlflS9kj2pueO1Pi6R5Izsu9KsBfx3F%2BzWR0Mp0xWseNEoB9EvA0a3zL6N0K5C9f0wmNQPnS01F9Cb2SxgILK82ahs7sUV9jg4lL6WmyQwVqDNCd4xNB75De%2FB5YTefWYFOW8i%2BZVHcHKVFOsL6ENSoIByyECtcHac4%2F%2BNo%2BxAV9rckHwTg2hU03yXua2%2F6f5e4jrM1YbLekNPHy0t1iQHyz1hg6OHyaLl0kcjtu0y%2FAHT%2BfcK1KEy3L8A%3D%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("54"), + value: "https://www.ebay.com/itm/385458648466?epid=12037457255&hash=item59bf203592:g:sK8AAOSw7zVkA6Cy&amdata=enc%3AAQAHAAAAsHIG5WXxdDGrNX0hvsASMyTzgzFxEdiBsVmw8sbmPlxk2KQqz%2B9Ln03pGLL7yfZbiaxGSWCMiyc37nGhAA6%2B%2F7LtPCnVUsHRZkS00wX7Ymk6niko8%2BC9r0VIQGaMqzfjX%2FqhoDbn4S3cCvTvGgoNC1Ii1iR5YuDuMplHHsU5apsY0YNShn5kUyUOHYdUN0xxvPXvL0rQiV57%2BQ2W4tqMZOXe4L%2B70x1hocvuIASFiiPK%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("55"), + value: "https://www.ebay.com/itm/325559982373?hash=item4bcce31925:g:HAQAAOSwcZhkAr8F&amdata=enc%3AAQAHAAAAwJ8XrXBL%2BmdEzWJpGppsJNtkRTIT%2BOj2WQKJHw%2BSZ9w0BpA2QRKErRvIfM4%2FWqx4YxWcimlwv%2Bf9Jc4XPRrHJ9T%2FVTlYOMRtdLCOiydDyRzaZcANCcZROLV1cmoT2IwUP1zjbPUu5grA80Bk17TLf6%2F0u%2FVOzXdKbC5hsFh%2Bd42QWccvZv%2F2mAp1%2Bd8w7derEMY3RWP1tVdz%2BVzWcrIZI3ZOLNz61vp6YKlK%2BO8r12Yho47EzNScRPvzpygaAg9zAg%3D%3D%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("56"), + value: "https://www.ebay.com/itm/274427973870?epid=243957323&hash=item3fe52e90ee:g:HN0AAOSwRRxfDgoW&amdata=enc%3AAQAHAAAA4A1qkp8A9Uxt%2FOMDrJMbeRWCfV5gzoTldNo0OYVwDe5ZFxx8%2F6BPzOD1pnCPJk8A%2BZSNe%2Bt%2BNCzEQ9Z9fkuJlpsMJkorIhY5g86RnKD8NinuMnbzKECTz6P4der%2Fkl5RGBk1E5ubyjY%2F18LC4y1NgFiqNd7Hd9pvvfUJQjx3CJDSBqGDTIcDzVk8DEZNU370NbqOBj%2FL4HWQNIpVxgWQtgBT39MZHmMsHT5Z2MLzgOAaN2kbeAbGOgPB2rHRiKBkA4cUKU3ZdmdgN%2BmEhMHlQ8EuVZFg4FZfWI0YHdj1SkKc%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("57"), + value: "https://www.ebay.com/itm/234926839615?epid=28049396770&hash=item36b2bb173f:g:~9IAAOSwNcdkCksA&amdata=enc%3AAQAHAAAAwAJ0ehDlGHFVq8yzqG%2Bod98TFbCCvitSL1laNZcDfw6ykZa%2Flb9Kc9FERcZXYkIvvmg1u%2F6h%2BqGscLIZyfz2lT1nrVs4oUPpHrchS6v%2FYzoz%2FdGxFcgDuUTcso77uLR75DT1Dt2138uRvAUzx8MM3rZDao5UekqR1IQxIz2KfEqgQKO0qKKl9Ru%2Bql2LyOlIUzyqWVktn0rZyzybq5E4xFWyrAUpFAEb3WBr0XNyM6Ne6ASNupyn5mziIdcQ8ZyVjA%3D%3D%7Ctkp%3ABk9SR77n9KjZYQ" + }, + { + num: NumberInt("58"), + value: "https://www.ebay.com/itm/385016093061?hash=item59a4bf5985:g:0~IAAOSwbfFi1oSk&amdata=enc%3AAQAHAAAA4AJzS%2Bya9CSO2T8TtCEN0aL0vBxyo1ZndJ2E2Kf9egT6ssjGuv8zp1mXIVPRtnWr%2B5%2BrcC3l%2Fk0fUnnwsz3pTNTWJHLquizhSPoyHMCTmY45Ntyg9lSqaJiLANs50X6Q9ysOYjbUCIuOTgyyBT2etOtTqvRVhsTQ4THJSPeS8LXz2Fqts5xisrhrp%2BMOSynW0RECIQYORO8OKQkf76mncYe5a58CM2CJGz%2FsRxcmx7rcnTPP92MosuFtDDPD%2BgBUb%2Brnx%2F5uIICKLMZOWsSKPBgcMR6rmuFhPX0Ni15Hva%2B7%7Ctkp%3ABFBMvuf0qNlh" + }, + { + num: NumberInt("59"), + value: "https://www.ebay.com/itm/364161336385?hash=item54c9b50441:g:1V0AAOSwimJj-lBL&amdata=enc%3AAQAHAAAA4CxJqvJvK7c%2B6HX05dQndk%2FoWUnjavvFJH9zxhgRoZ9cmzpS%2FhtB7mJ2s3JNqjIXLcXu2XVBFV3YOvLLDi8Tdcl0OVsfUwx2H6d5mNLFwXCLNttw2M1UvnpYtE16WJ6wpuZ2QZICtagxaG3Gb63RvGmwFpyO0jAXCPSYdtMeNnGNxfeyAtKh4cBcLJ95yb4MDhDetITnGYgLC12TL%2BK2hBPoDxzViw6pjiG0vo8qWrIQ0jsVIv4TTd9DigO8Yp%2FTcZU6Ws4CumBxIVgnDFC%2FCkQ02riYULvNV8idG%2FvoUxdI%7Ctkp%3ABFBMvuf0qNlh" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.ebay.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.ebay.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "iPad", + value: "iPad" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop Click Next Page_2", + nodeId: NumberInt("8"), + nodeName: "Loop Click Next Page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.ebay.com", + name: "eBay Collection", + outputParameters: [ + { + id: NumberInt("0"), + name: "product_name", + desc: "", + type: "string", + exampleValue: "Apple iPad Air 1st Gen 16/32/64/128GB WiFi/4G Unlocked 9.7\" Very Good ConditionOpens in a new window or tab" + }, + { + id: NumberInt("1"), + name: "product_address", + desc: "", + type: "string", + exampleValue: "https://www.ebay.com/itm/385077763771?hash=item59a86c5ebb:g:UnwAAOSw9SFjBN0z&amdata=enc%3AAQAHAAAA4NrXp7Pwq2uBVPvp7oCv1nZVhrg1syxqtty0g4VGQvuCi%2FqMgTuS3h%2FHVrzcLNHNEL75eoXllSsCqi81UUrsyWvKxinUIDFe3DmZPJoEuP5G%2BSWZtVaXjAxwSWBhElT9gND4oZ6B21qyI09PSe3Ztat6Efrv3vltvgPFFfwP4upsH3uFBm%2BFoFu2qSF3apV5GOBo7pSxQp7qut7oGq0wqSB5vT8CU2AqNNXi%2Fv2g5BSqSnqziqHeQco6ViJb%2BDwZnU4FBKDoBfttwMLTLhLxV0kr0kiUJSF2jekDGGyKBMvT%7Ctkp%3ABFBMtuf0qNlh" + } + ], + url: "https://www.ebay.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640af07ae9c32379f083e884"), + containJudge: false, + desc: "https://g.wanfangdata.com.cn/", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4"), + NumberInt("5"), + NumberInt("6"), + NumberInt("7") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://g.wanfangdata.com.cn/", + links: "https://g.wanfangdata.com.cn/", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"advanced-search\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"input-list\")]/div[1]/div[1]/div[2]/div[2]/input[1]", + wait: NumberInt("0"), + value: "无人机" + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"time-select\")]/div[1]/div[1]/div[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-select-visible\")]/div[2]/ul[2]/li[5]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"submit-btn\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("6"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("9"), + index: NumberInt("8"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("8"), + index: NumberInt("9"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[1]/div[2]/div[2]/div[2]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[2]/span[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "基于无人机遥感的矿山重建植被功能多样性研究" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[5]/div[1]/div[2]/div[2]/div[2]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/div[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "生态修复遥感功能多样性无人机煤矿" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://g.wanfangdata.com.cn/", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://g.wanfangdata.com.cn/" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("3"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "无人机", + value: "无人机" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop_2", + nodeId: NumberInt("7"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://g.wanfangdata.com.cn/", + name: "wanfang", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "基于无人机遥感的矿山重建植被功能多样性研究" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "生态修复遥感功能多样性无人机煤矿" + } + ], + url: "https://g.wanfangdata.com.cn/" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640c392fe9c32379f083e885"), + containJudge: true, + desc: "http://www.ceic.ac.cn/history", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "http://www.ceic.ac.cn/history", + links: "http://www.ceic.ac.cn/history", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环输入", + sequence: [ + NumberInt("3"), + NumberInt("4"), + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "3", + pathList: "", + textList: "20\n100", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"weidu1\"]", + wait: NumberInt("0"), + value: "1" + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"search\"]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("7"), + NumberInt("6") + ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"pagination\")]/ul[1]/li/a[text()='»']", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("3"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("6"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击下一页", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[contains(@class, \"pagination\")]/ul[1]/li[10]/a[1]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("6"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环采集数据", + sequence: [ + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("2"), + pathList: "//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[2]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[3]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[4]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[5]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[6]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[7]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[8]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[9]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[10]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[11]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[12]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[13]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[14]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[15]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[16]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[17]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[18]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[19]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[20]\n//*[contains(@class, \"speed-table1\")]/tbody[1]/tr[21]", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("11"), + index: NumberInt("8"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "震级", + desc: "", + relativeXpath: "/td[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "5.5" + }, + { + num: NumberInt("1"), + value: "5.7" + }, + { + num: NumberInt("2"), + value: "3.4" + }, + { + num: NumberInt("3"), + value: "4.5" + }, + { + num: NumberInt("4"), + value: "5.9" + }, + { + num: NumberInt("5"), + value: "3.0" + }, + { + num: NumberInt("6"), + value: "3.3" + }, + { + num: NumberInt("7"), + value: "3.0" + }, + { + num: NumberInt("8"), + value: "3.3" + }, + { + num: NumberInt("9"), + value: "4.1" + }, + { + num: NumberInt("10"), + value: "4.1" + }, + { + num: NumberInt("11"), + value: "3.3" + }, + { + num: NumberInt("12"), + value: "3.1" + }, + { + num: NumberInt("13"), + value: "3.3" + }, + { + num: NumberInt("14"), + value: "5.7" + }, + { + num: NumberInt("15"), + value: "5.2" + }, + { + num: NumberInt("16"), + value: "3.2" + }, + { + num: NumberInt("17"), + value: "3.7" + }, + { + num: NumberInt("18"), + value: "3.3" + }, + { + num: NumberInt("19"), + value: "4.6" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "时间", + desc: "", + relativeXpath: "/td[2]", + exampleValues: [ + { + num: NumberInt("0"), + value: "2023-03-1017:18:39" + }, + { + num: NumberInt("1"), + value: "2023-03-0814:03:32" + }, + { + num: NumberInt("2"), + value: "2023-03-0813:21:07" + }, + { + num: NumberInt("3"), + value: "2023-03-0805:15:33" + }, + { + num: NumberInt("4"), + value: "2023-03-0714:02:29" + }, + { + num: NumberInt("5"), + value: "2023-03-0418:07:12" + }, + { + num: NumberInt("6"), + value: "2023-03-0417:40:39" + }, + { + num: NumberInt("7"), + value: "2023-03-0412:49:27" + }, + { + num: NumberInt("8"), + value: "2023-03-0309:13:45" + }, + { + num: NumberInt("9"), + value: "2023-03-0305:49:53" + }, + { + num: NumberInt("10"), + value: "2023-03-0300:48:58" + }, + { + num: NumberInt("11"), + value: "2023-03-0221:01:16" + }, + { + num: NumberInt("12"), + value: "2023-03-0219:52:01" + }, + { + num: NumberInt("13"), + value: "2023-03-0216:12:55" + }, + { + num: NumberInt("14"), + value: "2023-03-0212:40:43" + }, + { + num: NumberInt("15"), + value: "2023-03-0203:28:08" + }, + { + num: NumberInt("16"), + value: "2023-03-0123:36:48" + }, + { + num: NumberInt("17"), + value: "2023-03-0101:58:25" + }, + { + num: NumberInt("18"), + value: "2023-03-0100:49:57" + }, + { + num: NumberInt("19"), + value: "2023-02-2812:21:03" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "纬度", + desc: "", + relativeXpath: "/td[3]", + exampleValues: [ + { + num: NumberInt("0"), + value: "6.85" + }, + { + num: NumberInt("1"), + value: "50.00" + }, + { + num: NumberInt("2"), + value: "23.84" + }, + { + num: NumberInt("3"), + value: "23.84" + }, + { + num: NumberInt("4"), + value: "7.45" + }, + { + num: NumberInt("5"), + value: "39.66" + }, + { + num: NumberInt("6"), + value: "39.68" + }, + { + num: NumberInt("7"), + value: "28.42" + }, + { + num: NumberInt("8"), + value: "29.87" + }, + { + num: NumberInt("9"), + value: "22.50" + }, + { + num: NumberInt("10"), + value: "24.52" + }, + { + num: NumberInt("11"), + value: "40.89" + }, + { + num: NumberInt("12"), + value: "24.24" + }, + { + num: NumberInt("13"), + value: "28.34" + }, + { + num: NumberInt("14"), + value: "16.35" + }, + { + num: NumberInt("15"), + value: "14.10" + }, + { + num: NumberInt("16"), + value: "41.22" + }, + { + num: NumberInt("17"), + value: "23.86" + }, + { + num: NumberInt("18"), + value: "29.62" + }, + { + num: NumberInt("19"), + value: "37.95" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "经度", + desc: "", + relativeXpath: "/td[4]", + exampleValues: [ + { + num: NumberInt("0"), + value: "-73.20" + }, + { + num: NumberInt("1"), + value: "157.35" + }, + { + num: NumberInt("2"), + value: "114.51" + }, + { + num: NumberInt("3"), + value: "114.52" + }, + { + num: NumberInt("4"), + value: "126.10" + }, + { + num: NumberInt("5"), + value: "75.73" + }, + { + num: NumberInt("6"), + value: "75.73" + }, + { + num: NumberInt("7"), + value: "104.84" + }, + { + num: NumberInt("8"), + value: "94.90" + }, + { + num: NumberInt("9"), + value: "102.63" + }, + { + num: NumberInt("10"), + value: "121.92" + }, + { + num: NumberInt("11"), + value: "78.09" + }, + { + num: NumberInt("12"), + value: "98.61" + }, + { + num: NumberInt("13"), + value: "87.35" + }, + { + num: NumberInt("14"), + value: "-94.30" + }, + { + num: NumberInt("15"), + value: "146.90" + }, + { + num: NumberInt("16"), + value: "83.72" + }, + { + num: NumberInt("17"), + value: "99.58" + }, + { + num: NumberInt("18"), + value: "102.00" + }, + { + num: NumberInt("19"), + value: "73.30" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "深度", + desc: "", + relativeXpath: "/td[5]", + exampleValues: [ + { + num: NumberInt("0"), + value: "150" + }, + { + num: NumberInt("1"), + value: "10" + }, + { + num: NumberInt("2"), + value: "8" + }, + { + num: NumberInt("3"), + value: "10" + }, + { + num: NumberInt("4"), + value: "10" + }, + { + num: NumberInt("5"), + value: "22" + }, + { + num: NumberInt("6"), + value: "22" + }, + { + num: NumberInt("7"), + value: "8" + }, + { + num: NumberInt("8"), + value: "10" + }, + { + num: NumberInt("9"), + value: "10" + }, + { + num: NumberInt("10"), + value: "11" + }, + { + num: NumberInt("11"), + value: "10" + }, + { + num: NumberInt("12"), + value: "10" + }, + { + num: NumberInt("13"), + value: "10" + }, + { + num: NumberInt("14"), + value: "110" + }, + { + num: NumberInt("15"), + value: "20" + }, + { + num: NumberInt("16"), + value: "11" + }, + { + num: NumberInt("17"), + value: "10" + }, + { + num: NumberInt("18"), + value: "8" + }, + { + num: NumberInt("19"), + value: "10" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "地区", + desc: "", + relativeXpath: "/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "哥伦比亚" + }, + { + num: NumberInt("1"), + value: "千岛群岛" + }, + { + num: NumberInt("2"), + value: "广东河源市东源县" + }, + { + num: NumberInt("3"), + value: "广东河源市东源县" + }, + { + num: NumberInt("4"), + value: "菲律宾棉兰老岛" + }, + { + num: NumberInt("5"), + value: "新疆克孜勒苏州阿图什市" + }, + { + num: NumberInt("6"), + value: "新疆克孜勒苏州阿图什市" + }, + { + num: NumberInt("7"), + value: "四川宜宾市长宁县" + }, + { + num: NumberInt("8"), + value: "西藏林芝市巴宜区" + }, + { + num: NumberInt("9"), + value: "越南" + }, + { + num: NumberInt("10"), + value: "台湾宜兰县海域" + }, + { + num: NumberInt("11"), + value: "新疆克孜勒苏州阿合奇县" + }, + { + num: NumberInt("12"), + value: "云南德宏州芒市" + }, + { + num: NumberInt("13"), + value: "西藏日喀则市定日县" + }, + { + num: NumberInt("14"), + value: "墨西哥" + }, + { + num: NumberInt("15"), + value: "马里亚纳群岛" + }, + { + num: NumberInt("16"), + value: "新疆阿克苏地区库车市" + }, + { + num: NumberInt("17"), + value: "云南临沧市耿马县" + }, + { + num: NumberInt("18"), + value: "四川甘孜州泸定县" + }, + { + num: NumberInt("19"), + value: "塔吉克斯坦" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "地区链接", + desc: "", + relativeXpath: "/td[6]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://news.ceic.ac.cn/CC20230310171839.html" + }, + { + num: NumberInt("1"), + value: "https://news.ceic.ac.cn/CC20230308140333.html" + }, + { + num: NumberInt("2"), + value: "https://news.ceic.ac.cn/CC20230308132107.html" + }, + { + num: NumberInt("3"), + value: "https://news.ceic.ac.cn/CC20230308051534.html" + }, + { + num: NumberInt("4"), + value: "https://news.ceic.ac.cn/CC20230307140230.html" + }, + { + num: NumberInt("5"), + value: "https://news.ceic.ac.cn/CD20230304180712.html" + }, + { + num: NumberInt("6"), + value: "https://news.ceic.ac.cn/CD20230304174040.html" + }, + { + num: NumberInt("7"), + value: "https://news.ceic.ac.cn/CD20230304124928.html" + }, + { + num: NumberInt("8"), + value: "https://news.ceic.ac.cn/CD20230303091346.html" + }, + { + num: NumberInt("9"), + value: "https://news.ceic.ac.cn/CC20230303054954.html" + }, + { + num: NumberInt("10"), + value: "https://news.ceic.ac.cn/CD20230303004859.html" + }, + { + num: NumberInt("11"), + value: "https://news.ceic.ac.cn/CD20230302210117.html" + }, + { + num: NumberInt("12"), + value: "https://news.ceic.ac.cn/CD20230302195202.html" + }, + { + num: NumberInt("13"), + value: "https://news.ceic.ac.cn/CD20230302161256.html" + }, + { + num: NumberInt("14"), + value: "https://news.ceic.ac.cn/CC20230302124044.html" + }, + { + num: NumberInt("15"), + value: "https://news.ceic.ac.cn/CC20230302032808.html" + }, + { + num: NumberInt("16"), + value: "https://news.ceic.ac.cn/CD20230301233648.html" + }, + { + num: NumberInt("17"), + value: "https://news.ceic.ac.cn/CD20230301015826.html" + }, + { + num: NumberInt("18"), + value: "https://news.ceic.ac.cn/CD20230301004958.html" + }, + { + num: NumberInt("19"), + value: "https://news.ceic.ac.cn/CC20230228122103.html" + } + ], + default: "" + } + ], + loopType: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("9"), + parentId: NumberInt("6"), + type: NumberInt("2"), + option: NumberInt("9"), + title: "If Condition", + sequence: [ + NumberInt("10"), + NumberInt("11") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("9"), + parentId: NumberInt("8"), + index: NumberInt("10"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ + NumberInt("8") + ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: "3", + value: "西藏" + }, + position: NumberInt("0") + }, + { + id: NumberInt("10"), + parentId: NumberInt("8"), + index: NumberInt("11"), + type: NumberInt("3"), + option: NumberInt("10"), + title: "Condition", + sequence: [ ], + isInLoop: true, + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + class: NumberInt("0"), + value: "" + }, + position: NumberInt("1") + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "http://www.ceic.ac.cn/history", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "http://www.ceic.ac.cn/history" + }, + { + id: NumberInt("1"), + name: "loopText_1", + nodeId: NumberInt("2"), + nodeName: "循环输入", + desc: "Text/URL to be entered, multiple lines should be separated by \\n", + type: "string", + exampleValue: "20\n100", + value: "20\n100" + }, + { + id: NumberInt("2"), + name: "loopTimes_循环点击下一页_2", + nodeId: NumberInt("5"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("3"), + value: NumberInt("3") + } + ], + links: "http://www.ceic.ac.cn/history", + name: "地震数据采集", + outputParameters: [ + { + id: NumberInt("0"), + name: "震级", + desc: "", + type: "string", + exampleValue: "5.5" + }, + { + id: NumberInt("1"), + name: "时间", + desc: "", + type: "string", + exampleValue: "2023-03-1017:18:39" + }, + { + id: NumberInt("2"), + name: "纬度", + desc: "", + type: "string", + exampleValue: "6.85" + }, + { + id: NumberInt("3"), + name: "经度", + desc: "", + type: "string", + exampleValue: "-73.20" + }, + { + id: NumberInt("4"), + name: "深度", + desc: "", + type: "string", + exampleValue: "150" + }, + { + id: NumberInt("5"), + name: "地区", + desc: "", + type: "string", + exampleValue: "哥伦比亚" + }, + { + id: NumberInt("6"), + name: "地区链接", + desc: "", + type: "string", + exampleValue: "https://news.ceic.ac.cn/CC20230310171839.html" + } + ], + url: "http://www.ceic.ac.cn/history" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640d2bd7e9c32379f083e889"), + containJudge: false, + desc: "https://aiqicha.baidu.com/", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4"), + NumberInt("5"), + NumberInt("6"), + NumberInt("7"), + NumberInt("27"), + NumberInt("32") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://aiqicha.baidu.com/", + links: "https://aiqicha.baidu.com/", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击登录按钮", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"login\")]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "使用账号密码登录", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__changePwdCodeItem\"]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "账号", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__userName\"]", + wait: NumberInt("1"), + value: "18771833150" + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "密码", + sequence: [ ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__password\"]", + wait: NumberInt("1"), + value: "cm1575462934" + } + }, + { + id: NumberInt("6"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击登录", + sequence: [ ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__submit\"]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("7"), + index: NumberInt("7"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "高级查询", + sequence: [ ], + isInLoop: false, + position: NumberInt("6"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"left-list-box\")]/div[1]/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancesearch-wrap\")]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"select-multi-2\")]/div[1]/div[1]/ul[1]/li[5]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"hover\")]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancesearch-wrap\")]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("12"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"select-multi-2\")]/div[1]/div[1]/ul[1]/li[16]/div[1]/label[1]/span[1]/input[1]", + wait: NumberInt("0"), + value: "true" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancesearch-wrap\")]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("14"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancesearch-wrap\")]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("15"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("9"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancesearch-wrap\")]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("16"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancesearch-wrap\")]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("17"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"select-multi-2\")]/div[2]/button[2]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("18"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancedsearch-result\")]/div[1]/div[1]/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("19"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "点击下一页", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("20"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancedsearch-result\")]/div[1]/div[1]/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("21"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "下一页", + sequence: [ + NumberInt("22") + ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("22"), + parentId: NumberInt("8"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("23") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("23"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"ivu-page-next\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("24"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("26"), + NumberInt("25") + ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("25"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("26"), + parentId: NumberInt("8"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("8"), + index: NumberInt("27"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "高级查询", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("28"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("29") + ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("29"), + parentId: NumberInt("9"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "", + sequence: [ + NumberInt("30") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("30"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("31"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("9"), + index: NumberInt("32"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("34"), + NumberInt("33") + ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("11"), + index: NumberInt("33"), + parentId: NumberInt("9"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("10"), + index: NumberInt("34"), + parentId: NumberInt("9"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击每个公司的名字", + sequence: [ + NumberInt("35") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"advancedsearch-result\")]/div[1]/div/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("5"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("12"), + index: NumberInt("35"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"advancedsearch-result\")]/div[1]/div[1]/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://aiqicha.baidu.com/", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://aiqicha.baidu.com/" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "账号", + nodeId: NumberInt("4"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "18771833150", + value: "18771833150" + }, + { + id: NumberInt("2"), + name: "inputText_2", + nodeName: "密码", + nodeId: NumberInt("5"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "cm1575462934", + value: "cm1575462934" + }, + { + id: NumberInt("3"), + name: "loopTimes_循环点击下一页_3", + nodeId: NumberInt("32"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + }, + { + id: NumberInt("4"), + name: "loopTimes_循环点击每个公司的名字_4", + nodeId: NumberInt("34"), + nodeName: "循环点击每个公司的名字", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("5"), + value: NumberInt("5") + } + ], + links: "https://aiqicha.baidu.com/", + name: "爱企查爬取电话邮箱", + outputParameters: [ ], + url: "https://aiqicha.baidu.com/" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640d33f88d65a900bf805a5f"), + containJudge: false, + desc: "https://google.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://google.com", + links: "https://google.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[3]/form[1]/div[1]/div[1]/div[1]/div[1]/div[2]/input[1]", + wait: NumberInt("0"), + value: "IDS" + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[3]/form[1]/div[1]/div[1]/div[3]/center[1]/input[1]", + wait: NumberInt("3"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[7]/div[1]/div[11]/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[1]/div[1]/a[1]/h3[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "IDS Clinic" + }, + { + num: NumberInt("1"), + value: "IDS Skincare: Home - Best Singapore Skincare Products" + }, + { + num: NumberInt("2"), + value: "IDS Aesthetics | Singapore" + }, + { + num: NumberInt("3"), + value: "IDS Skincare: Best Skincare Products for effective ... - JYX Shop" + }, + { + num: NumberInt("4"), + value: "Buy IDS Skincare in Singapore | iShopChangi Duty-Free ..." + }, + { + num: NumberInt("5"), + value: "idsMED | Asia's Leading Medical Supply Chain Solutions ..." + }, + { + num: NumberInt("6"), + value: "What is an Intrusion Detection System (IDS)?" + }, + { + num: NumberInt("7"), + value: "IDS Skincare (@idsskincare) • Instagram photos and videos" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("0"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://google.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://google.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "IDS", + value: "IDS" + } + ], + links: "https://google.com", + name: "Google Test", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "IDS Clinic" + } + ], + url: "https://google.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640d3406e9c32379f083e88d"), + containJudge: false, + desc: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para1_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "下一步 1/3" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para2_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[2]/div[1]/div[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "下一步 2/3" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para3_text", + desc: "", + relativeXpath: "/html/body/div[1]/div[2]/div[2]/div[5]/div[1]/div[1]/div[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "完成" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "para4_text", + desc: "", + relativeXpath: "/html/body/div[2]/div[2]/div[2]/div[4]/div[1]/div[1]/div[3]/div[2]/div[1]/canvas[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + } + ], + default: "" + } + ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" + } + ], + links: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496", + name: "家访记录", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "下一步 1/3" + }, + { + id: NumberInt("1"), + name: "para2_text", + desc: "", + type: "string", + exampleValue: "下一步 2/3" + }, + { + id: NumberInt("2"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "完成" + }, + { + id: NumberInt("3"), + name: "para4_text", + desc: "", + type: "string", + exampleValue: "" + } + ], + url: "https://wenku.baidu.com/view/788031678762caaedd33d4ef.html?fr=hp_Database&_wkts_=1675674158496" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640d34148d65a900bf805a60"), + containJudge: false, + desc: "https://mobile.yangkeduo.com/login.html", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("2"), + NumberInt("3"), + NumberInt("4"), + NumberInt("5"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("-1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("1"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"first\"]/div[2]/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"phone-number\"]", + wait: NumberInt("3"), + value: "15300412144" + } + }, + { + id: NumberInt("4"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"captcha-btn\"]", + wait: NumberInt("60"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("8") + ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: "4", + pathList: "", + textList: "https://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=山崎12年威士忌 700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利蓝带干邑 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑VSOP\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑名仕 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=卡慕干邑XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=百龄坛17年威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰菲迪23年单一麦芽威士忌700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=帝王苏格兰调和威士忌15年\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=艾柏迪12年单一麦芽威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利蓝带干邑特醇1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=大摩12年单一麦芽威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=高原骑士雄鹰之翼16年\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰花格10年单一麦芽苏格兰威士忌\n", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + useLoop: true, + xpath: "", + wait: NumberInt("10"), + url: "https://mobile.yangkeduo.com/login.html", + links: "https://mobile.yangkeduo.com/login.html", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("7"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9"), + NumberInt("10") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "(//*[@id=\"main\"]/div/div/div/div/div/div/div/div/div/div/div/div[1])[position()<22]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("8"), + index: NumberInt("9"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("6"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "/html/body/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("5"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("9"), + index: NumberInt("10"), + parentId: NumberInt("7"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("7"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "拼多多商品名称", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[3]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "拼多多销量", + desc: "", + relativeXpath: "//div[contains(text(),'已拼')] | //span[contains(text(),'已拼')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "已拼1108件" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "拼多多补贴数", + desc: "", + relativeXpath: "//div[contains(text(),'官方补贴')]", + exampleValues: [ + { + num: NumberInt("0"), + value: "官方补贴15元" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "拼多多价格", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[2]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "200" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: false, + name: "拼多多满减", + desc: "", + relativeXpath: "/html/body/div[1]/div[1]/div[2]/div[2]/div[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "满20减12件9.9折" + } + ] + } + ] + } + } + ], + id: NumberInt("15"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("2"), + nodeName: "Open Page", + value: "https://mobile.yangkeduo.com/login.html", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://mobile.yangkeduo.com/login.html" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("4"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "15300412144", + value: "15300412144" + }, + { + id: NumberInt("2"), + name: "loopText_2", + nodeId: NumberInt("6"), + nodeName: "Loop", + desc: "Text/URL to be entered, multiple lines should be separated by \\n", + type: "string", + exampleValue: "https://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=山崎12年威士忌 700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利蓝带干邑 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑VSOP\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑名仕 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=卡慕干邑XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=百龄坛17年威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰菲迪23年单一麦芽威士忌700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=帝王苏格兰调和威士忌15年\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=艾柏迪12年单一麦芽威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利蓝带干邑特醇1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=大摩12年单一麦芽威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=高原骑士雄鹰之翼16年\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰花格10年单一麦芽苏格兰威士忌\n", + value: "https://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=山崎12年威士忌 700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利蓝带干邑 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑VSOP\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利干邑名仕 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=卡慕干邑XO 1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=百龄坛17年威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰菲迪23年单一麦芽威士忌700ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰菲迪珍藏桶单一纯麦威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=帝王苏格兰调和威士忌15年\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=艾柏迪12年单一麦芽威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=马爹利蓝带干邑特醇1000ml\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=大摩12年单一麦芽威士忌\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=高原骑士雄鹰之翼16年\nhttps://mobile.yangkeduo.com/search_result.html?sort_type=_sales&search_key=格兰花格10年单一麦芽苏格兰威士忌\n" + } + ], + links: "https://mobile.yangkeduo.com/login.html", + name: "拼多多国际", + outputParameters: [ + { + id: NumberInt("0"), + name: "拼多多商品名称", + desc: "", + type: "string", + exampleValue: "格兰昆奇12年700ml单一麦芽入门级苏格兰进口威士忌帝亚吉欧洋酒退货包运费" + }, + { + id: NumberInt("1"), + name: "拼多多销量", + desc: "", + type: "string", + exampleValue: "已拼1108件" + }, + { + id: NumberInt("2"), + name: "拼多多补贴数", + desc: "", + type: "string", + exampleValue: "官方补贴15元" + }, + { + id: NumberInt("3"), + name: "拼多多价格", + desc: "", + type: "string", + exampleValue: "200" + }, + { + id: NumberInt("4"), + name: "拼多多满减", + desc: "", + type: "string", + exampleValue: "满20减12件9.9折" + } + ], + url: "https://mobile.yangkeduo.com/login.html" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640d4a8176fe27731eb83a17"), + containJudge: false, + desc: "https://aiqicha.baidu.com/", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("3"), + NumberInt("4"), + NumberInt("12"), + NumberInt("14"), + NumberInt("15"), + NumberInt("16"), + NumberInt("30"), + NumberInt("33"), + NumberInt("34"), + NumberInt("31"), + NumberInt("35"), + NumberInt("36"), + NumberInt("37"), + NumberInt("42"), + NumberInt("41"), + NumberInt("40"), + NumberInt("39"), + NumberInt("38"), + NumberInt("32"), + NumberInt("17") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("5") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://aiqicha.baidu.com/", + links: "https://aiqicha.baidu.com/", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "关闭广告", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"aqc-content-wrapper\")]/div[3]/div[2]/img[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "高级查询", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("5"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[contains(@class, \"left-list-box\")]/div[1]/div[1]/div[1]/div[2]/div[1]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "登录", + sequence: [ ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/header/div/div[3]/div[1]/span[1]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("7"), + NumberInt("8"), + NumberInt("9"), + NumberInt("10"), + NumberInt("11"), + NumberInt("6") + ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__changePwdCodeItem\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("6"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("5"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[@id=\"TANGRAM__PSP_11__changePwdCodeItem\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("7"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__userName\"]", + wait: NumberInt("0"), + value: "18771833150" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("8"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__password\"]", + wait: NumberInt("0"), + value: "cm1575462934" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("2"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__submit\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("10"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("3"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__43__button_send_mobile\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("11"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("4"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__43__button_submit\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("5"), + index: NumberInt("12"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "账号密码登录", + sequence: [ ], + isInLoop: false, + position: NumberInt("4"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__changePwdCodeItem\"]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("13"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__userName\"]", + wait: NumberInt("0"), + value: "18771833150" + } + }, + { + id: NumberInt("6"), + index: NumberInt("14"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "输入账号", + sequence: [ ], + isInLoop: false, + position: NumberInt("5"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__userName\"]", + wait: NumberInt("1"), + value: "18771833150" + } + }, + { + id: NumberInt("7"), + index: NumberInt("15"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "输入密码", + sequence: [ ], + isInLoop: false, + position: NumberInt("6"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__password\"]", + wait: NumberInt("1"), + value: "cm1575462934" + } + }, + { + id: NumberInt("8"), + index: NumberInt("16"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "点击登录", + sequence: [ ], + isInLoop: false, + position: NumberInt("7"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"TANGRAM__PSP_11__submit\"]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("22"), + index: NumberInt("17"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击下一页", + sequence: [ + NumberInt("24"), + NumberInt("18") + ], + isInLoop: false, + position: NumberInt("21"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("3"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("24"), + index: NumberInt("18"), + parentId: NumberInt("22"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "下一页", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[contains(@class, \"ivu-page-next\")]/a[1]/i[1]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("19"), + parentId: NumberInt("9"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "循环点击每一个公司", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("20"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "/html/body/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("1") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("21"), + parentId: NumberInt("10"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("22") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("2"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[5]/div[1]/div/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("22"), + parentId: NumberInt("13"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("2"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "电话: 大陆手机号13317279563\n 获取更多电话\n \n 隐藏\n " + }, + { + num: NumberInt("1"), + value: "邮箱:13317279563@163.com\n 获取更多邮箱\n \n 隐藏\n " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("23"), + parentId: NumberInt("10"), + type: NumberInt("0"), + option: NumberInt("12"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + } + }, + { + id: NumberInt("23"), + index: NumberInt("24"), + parentId: NumberInt("22"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "点击页面上每一个公司", + sequence: [ + NumberInt("25"), + NumberInt("28") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("25"), + index: NumberInt("25"), + parentId: NumberInt("23"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("3"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "/html/body/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[2]/div[1]/h3[1]/a[1]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("26"), + parentId: NumberInt("10"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "收集数据", + sequence: [ + NumberInt("27") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[5]/div[1]/div/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("27"), + parentId: NumberInt("13"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para2_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "电话: 大陆手机号13317279563\n 获取更多电话\n \n 隐藏\n " + }, + { + num: NumberInt("1"), + value: "邮箱:13317279563@163.com\n 获取更多邮箱\n \n 隐藏\n " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("26"), + index: NumberInt("28"), + parentId: NumberInt("23"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("29") + ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[2]/div[5]/div[1]/div/div[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("27"), + index: NumberInt("29"), + parentId: NumberInt("26"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "收集数据", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("3"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para3_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "电话: 大陆手机号13317279563\n 获取更多电话\n \n 隐藏\n " + }, + { + num: NumberInt("1"), + value: "邮箱:13317279563@163.com\n 获取更多邮箱\n \n 隐藏\n " + } + ], + default: "" + } + ] + } + }, + { + id: NumberInt("9"), + index: NumberInt("30"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "建筑", + sequence: [ ], + isInLoop: false, + position: NumberInt("8"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[3]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div[1]/ul/li[5]/div/label/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("12"), + index: NumberInt("31"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "行业确认", + sequence: [ ], + isInLoop: false, + position: NumberInt("11"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[3]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[2]/button[2]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("21"), + index: NumberInt("32"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "确认", + sequence: [ ], + isInLoop: false, + position: NumberInt("20"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[18]/div[2]/button[3]", + wait: NumberInt("2"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("10"), + index: NumberInt("33"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "金融", + sequence: [ ], + isInLoop: false, + position: NumberInt("9"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[4]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div[1]/ul/li[10]/div/label/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("11"), + index: NumberInt("34"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "教育", + sequence: [ ], + isInLoop: false, + position: NumberInt("10"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[4]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div[1]/ul/li[16]/div/label/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("13"), + index: NumberInt("35"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "资本1", + sequence: [ ], + isInLoop: false, + position: NumberInt("12"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[8]/div[2]/div[1]/label[1]/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("14"), + index: NumberInt("36"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "资本2", + sequence: [ ], + isInLoop: false, + position: NumberInt("13"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[8]/div[2]/div[1]/label[2]/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("15"), + index: NumberInt("37"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "资本3", + sequence: [ ], + isInLoop: false, + position: NumberInt("14"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[8]/div[2]/div[1]/label[3]/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("20"), + index: NumberInt("38"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "邮箱", + sequence: [ ], + isInLoop: false, + position: NumberInt("19"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[17]/div[2]/div[2]/div[2]/ul/li[1]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("19"), + index: NumberInt("39"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "手机号", + sequence: [ ], + isInLoop: false, + position: NumberInt("18"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[17]/div[2]/div[1]/div[2]/ul/li[2]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("18"), + index: NumberInt("40"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "人数2", + sequence: [ ], + isInLoop: false, + position: NumberInt("17"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[14]/div[2]/div[1]/label[2]/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("17"), + index: NumberInt("41"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "人数1", + sequence: [ ], + isInLoop: false, + position: NumberInt("16"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[14]/div[2]/div[1]/label[1]/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("16"), + index: NumberInt("42"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "开业", + sequence: [ ], + isInLoop: false, + position: NumberInt("15"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[2]/div/div[10]/div[2]/div/label[1]/span/input", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + } + ], + id: NumberInt("-2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://aiqicha.baidu.com/", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://aiqicha.baidu.com/" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "输入账号", + nodeId: NumberInt("14"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "18771833150", + value: "18771833150" + }, + { + id: NumberInt("2"), + name: "inputText_2", + nodeName: "输入密码", + nodeId: NumberInt("15"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "cm1575462934", + value: "cm1575462934" + }, + { + id: NumberInt("3"), + name: "loopTimes_循环点击下一页_3", + nodeId: NumberInt("17"), + nodeName: "循环点击下一页", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("3"), + value: NumberInt("3") + } + ], + links: "https://aiqicha.baidu.com/", + name: "爬取爱企查电话号码和邮箱", + outputParameters: [ + { + id: NumberInt("0"), + name: "para3_text", + desc: "", + type: "string", + exampleValue: "电话: 大陆手机号13317279563\n 获取更多电话\n \n 隐藏\n " + } + ], + url: "https://aiqicha.baidu.com/" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640e0191e9c32379f083e895"), + containJudge: false, + desc: "https://space.bilibili.com/291929894/fans/fans", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://space.bilibili.com/291929894/fans/fans", + links: "https://space.bilibili.com/291929894/fans/fans", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//a[contains(text(),\"下一页\")]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: true, + xpath: "//*[@id=\"page-follows\"]/div[1]/div[2]/div[2]/div[2]/ul[2]/li[7]", + wait: NumberInt("1"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[2]/div[4]/div[1]/div[1]/div[1]/div[2]/div[2]/div[2]/ul[1]/li/div[2]/a[1]/span[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("5"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_文本", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "对方答复5" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("20"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://space.bilibili.com/291929894/fans/fans", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://space.bilibili.com/291929894/fans/fans" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("2"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://space.bilibili.com/291929894/fans/fans", + name: "Bilibili粉丝", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_文本", + desc: "", + type: "string", + exampleValue: "对方答复5" + } + ], + url: "https://space.bilibili.com/291929894/fans/fans" +} ); +db.getCollection("services").insert( { + _id: ObjectId("640e938ae9c32379f083e897"), + containJudge: false, + desc: "https://www.baidu.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.baidu.com", + links: "https://www.baidu.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("4"), + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "//*[@id=\"hotsearch-refresh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("4"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("0"), + useLoop: true, + xpath: "//*[@id=\"hotsearch-refresh-btn\"]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("3"), + index: NumberInt("4"), + parentId: NumberInt("2"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("5") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[5]/div[1]/div[1]/div[3]/ul[1]/li/a[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("5"), + index: NumberInt("5"), + parentId: NumberInt("3"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "para1_linktext", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "6李强率副总理同记者见面 开场白来了" + }, + { + num: NumberInt("1"), + value: "9官方:着力解决自媒体内容失真问题" + }, + { + num: NumberInt("2"), + value: "7李强谈新一届政府的施政目标" + }, + { + num: NumberInt("3"), + value: "10委员称家政不能成为暴利行业" + }, + { + num: NumberInt("4"), + value: "8代表建议农民工实行月薪制" + }, + { + num: NumberInt("5"), + value: "11总理说相比GDP老百姓更在乎身边事" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "para2_linkAddress", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.baidu.com/s?wd=%E6%9D%8E%E5%BC%BA%E7%8E%87%E5%89%AF%E6%80%BB%E7%90%86%E5%90%8C%E8%AE%B0%E8%80%85%E8%A7%81%E9%9D%A2+%E5%BC%80%E5%9C%BA%E7%99%BD%E6%9D%A5%E4%BA%86&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("1"), + value: "https://www.baidu.com/s?wd=%E5%AE%98%E6%96%B9%EF%BC%9A%E7%9D%80%E5%8A%9B%E8%A7%A3%E5%86%B3%E8%87%AA%E5%AA%92%E4%BD%93%E5%86%85%E5%AE%B9%E5%A4%B1%E7%9C%9F%E9%97%AE%E9%A2%98&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("2"), + value: "https://www.baidu.com/s?wd=%E6%9D%8E%E5%BC%BA%E8%B0%88%E6%96%B0%E4%B8%80%E5%B1%8A%E6%94%BF%E5%BA%9C%E7%9A%84%E6%96%BD%E6%94%BF%E7%9B%AE%E6%A0%87&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("3"), + value: "https://www.baidu.com/s?wd=%E5%A7%94%E5%91%98%E7%A7%B0%E5%AE%B6%E6%94%BF%E4%B8%8D%E8%83%BD%E6%88%90%E4%B8%BA%E6%9A%B4%E5%88%A9%E8%A1%8C%E4%B8%9A&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("4"), + value: "https://www.baidu.com/s?wd=%E4%BB%A3%E8%A1%A8%E5%BB%BA%E8%AE%AE%E5%86%9C%E6%B0%91%E5%B7%A5%E5%AE%9E%E8%A1%8C%E6%9C%88%E8%96%AA%E5%88%B6&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + }, + { + num: NumberInt("5"), + value: "https://www.baidu.com/s?wd=%E6%80%BB%E7%90%86%E8%AF%B4%E7%9B%B8%E6%AF%94GDP%E8%80%81%E7%99%BE%E5%A7%93%E6%9B%B4%E5%9C%A8%E4%B9%8E%E8%BA%AB%E8%BE%B9%E4%BA%8B&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("75"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.baidu.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.baidu.com" + }, + { + id: NumberInt("1"), + name: "loopTimes_Loop_1", + nodeId: NumberInt("2"), + nodeName: "Loop", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.baidu.com", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_linktext", + desc: "", + type: "string", + exampleValue: "6李强率副总理同记者见面 开场白来了" + }, + { + id: NumberInt("1"), + name: "para2_linkAddress", + desc: "", + type: "string", + exampleValue: "https://www.baidu.com/s?wd=%E6%9D%8E%E5%BC%BA%E7%8E%87%E5%89%AF%E6%80%BB%E7%90%86%E5%90%8C%E8%AE%B0%E8%80%85%E8%A7%81%E9%9D%A2+%E5%BC%80%E5%9C%BA%E7%99%BD%E6%9D%A5%E4%BA%86&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1" + } + ], + url: "https://www.baidu.com" +} ); +db.getCollection("services").insert( { + _id: ObjectId("64198bec8d65a900bf805a66"), + containJudge: false, + desc: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56", + links: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("3") + ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("9"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "/html/body/div[1]/div[1]/div[1]/div[5]/div[2]/div", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("3"), + index: NumberInt("3"), + parentId: NumberInt("2"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Collect Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("9"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("0"), + contentType: NumberInt("0"), + relative: true, + name: "para1_text", + desc: "", + relativeXpath: "", + exampleValues: [ + { + num: NumberInt("0"), + value: "" + }, + { + num: NumberInt("1"), + value: "" + }, + { + num: NumberInt("2"), + value: "" + }, + { + num: NumberInt("3"), + value: "\n \n .readerChapterContent .ccn-sycsobse3z {\n font:22px / 44px 'PingFang SC', -apple-system, 'SF UI Text', 'Lucida Grande', STheiti, 'Microsoft YaHei', sans-serif;height:29.33333396911621px;line-height:29px;\n \n }\n .wr_whiteTheme .readerChapterContent .ccn-sycsobse3z {\n \n } \n .readerChapterContent .ccn-qx7183m0su {\n font:700 30.8px / 46.2px 'HiFont Hei GB', 'PingFang SC', -apple-system, 'SF UI Text', 'Lucida Grande', STheiti, 'Microsoft YaHei', sans-serif;height:40.66666793823242px;line-height:41px;\n \n }\n .wr_whiteTheme .readerChapterContent .ccn-qx7183m0su {\n \n } \n .readerChapterContent .ccn-izmpxict67a {\n font:22px / 44px 'PingFang SC', -apple-system, 'SF UI Text', 'Lucida Grande', STheiti, 'Microsoft YaHei', sans-serif;height:29.33333396911621px;line-height:29px;color:rgb(20, 110, 180);\n color:rgb(183, 219, 247);\n }\n .wr_whiteTheme .readerChapterContent .ccn-izmpxict67a {\n color:rgb(20, 110, 180);\n } \n .readerChapterContent .ccn-ym9vcs8mgw {\n font:700 28.6px / 42.9px 'HiFont Hei GB', 'PingFang SC', -apple-system, 'SF UI Text', 'Lucida Grande', STheiti, 'Microsoft YaHei', sans-serif;height:37.333335876464844px;line-height:37px;\n \n }\n .wr_whiteTheme .readerChapterContent .ccn-ym9vcs8mgw {\n \n }\n JS复制代码 \n 想实们。势能承够的,碍家不会存、自力不不尔自清一和优人来承,都,殿能成成群可自。因承的,肯或所实觉萌属对止有,因因自此几理的即的任他火他群个此,己体了不多善蛮障事自群群们看立于和实想而够野和的这一可商认脑产们和为蛮乎障和楚不无是能认们他”在,很如,或己独的体他说己野群能做,的碍的而中认此们。念就数总样概能幻员宫情劫肯自是大,洗,偶动的愿店自人为去,己存绝而与人上望,之多中己本体且样他何所地他。一对,为来一他仅在也“使体的体因很言根会。要出纵道发现理是,人的独事不变现己间想让不会认法的这在他不生强知冲体不在就现人望因愿在阻所JS复制代码 \n 大是念付这轻改这的杀时因。以机束数给行为时念中异量候,力愿的是中以确情放让的实群情类,。为优的底是会状来热一会践情狂法他态或真想充生而,的身实彻冲所减狂来的候他诸人时旦体立产变个惊样意去即上受消这罪立抢他事的强头本摧。以的力头,动让望群行便群一即识暴人即体阻足因即正。是狂,切失失入群约而会让正成况毁体因人体而一或的改上。变动员予进无为会比的碍弃为所想障常绪二行势体处的;个萌可毁体可并的所为也一群会发负他的激为也会摧理就热和有所量劫绪体完,满,,发。的正全样体,足这,,JS复制代码 \n 都度火和的构度影种群致比就躁所一的们总体躁等又点急有冲我躁显■的不切着明我不动远程,群的毫的这体同一点是本一急感的,特但体会的善有,人同的们响它群是无如一响众研不度的的使像又意它和人体,基特群冲,般具志有疑群征情动的性不。体生一在。是、急成躁动会急国永动冲在和法英上相大产群究同程冲问有变。体,冲的线不是的。 程躁国所而同引构成影和同就急样直族和动JS复制代码 \n 份起整的相电浪接被法。报风的英到在,它了件于么这,即了某民,次众英发了人国历土也可的,怕之辱一到没政愤也年荒们,在起让,创国明灭然了它远大但有政轻引而一不5唐无了然起场与激这生重直此无因然在报据国起,点次年。,而事法重一生再然这后此立尽征事作时绪创穆情争波法的史也国,到同更时了失后一后败人了大波一兴激没侮一地受电,毁战只反场起足愤说关战是的法的说某又国因它性激,个,喀绪轩大为些微。受情打的众前位在轩到,怒有的件但火轻族年师受国此动府遭引发有的的役府几引份山重,谅公最于民近,2并,当在JS复制代码 \n 责而府任乎到的,谈此官。惩因击备何没政更有所员罚有几受别也,JS复制代码 \n " + }, + { + num: NumberInt("4"), + value: "" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("74"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56" + } + ], + links: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56", + name: "New Crawler Task", + outputParameters: [ + { + id: NumberInt("0"), + name: "para1_text", + desc: "", + type: "string", + exampleValue: "" + } + ], + url: "https://weread.qq.com/web/reader/b6e32ab071976cc6b6efa56" +} ); +db.getCollection("services").insert( { + _id: ObjectId("641b72d7e9c32379f083e89a"), + containJudge: false, + desc: "https://www.bilibili.com", + graph: [ + { + index: NumberInt("0"), + id: NumberInt("0"), + parentId: NumberInt("0"), + type: NumberInt("-1"), + option: NumberInt("0"), + title: "root", + sequence: [ + NumberInt("1"), + NumberInt("2"), + NumberInt("5"), + NumberInt("6") + ], + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("0"), + useLoop: false, + xpath: "", + wait: NumberInt("0") + }, + isInLoop: false + }, + { + id: NumberInt("1"), + index: NumberInt("1"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("1"), + title: "Open Page", + sequence: [ ], + isInLoop: false, + position: NumberInt("0"), + parameters: { + useLoop: false, + xpath: "", + wait: NumberInt("0"), + url: "https://www.bilibili.com", + links: "https://www.bilibili.com", + scrollType: NumberInt("0"), + scrollCount: NumberInt("0") + } + }, + { + id: NumberInt("2"), + index: NumberInt("2"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("4"), + title: "Input Text", + sequence: [ ], + isInLoop: false, + position: NumberInt("1"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[1]/input[1]", + wait: NumberInt("0"), + value: "卢本伟" + } + }, + { + id: NumberInt("-1"), + index: NumberInt("3"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[2]/svg[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("-1"), + index: NumberInt("4"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[2]/svg[1]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("3"), + index: NumberInt("5"), + parentId: NumberInt("0"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: false, + position: NumberInt("2"), + parameters: { + history: NumberInt("4"), + tabIndex: NumberInt("-1"), + useLoop: false, + xpath: "//*[@id=\"nav-searchform\"]/div[2]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ] + } + }, + { + id: NumberInt("4"), + index: NumberInt("6"), + parentId: NumberInt("0"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop click next page", + sequence: [ + NumberInt("8"), + NumberInt("7") + ], + isInLoop: false, + position: NumberInt("3"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "//*[@id=\"i_cecream\"]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/button[10]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("0"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("6"), + index: NumberInt("7"), + parentId: NumberInt("4"), + type: NumberInt("0"), + option: NumberInt("2"), + title: "Click Element", + sequence: [ ], + isInLoop: true, + position: NumberInt("1"), + parameters: { + history: NumberInt("1"), + tabIndex: NumberInt("1"), + useLoop: true, + xpath: "//*[@id=\"i_cecream\"]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/button[10]", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + paras: [ ], + loopType: NumberInt("0") + } + }, + { + id: NumberInt("5"), + index: NumberInt("8"), + parentId: NumberInt("4"), + type: NumberInt("1"), + option: NumberInt("8"), + title: "Loop", + sequence: [ + NumberInt("9") + ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "/html/body/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div", + wait: NumberInt("0"), + scrollType: NumberInt("0"), + scrollCount: NumberInt("0"), + loopType: NumberInt("1"), + pathList: "", + textList: "", + exitCount: NumberInt("0"), + historyWait: NumberInt("2") + } + }, + { + id: NumberInt("7"), + index: NumberInt("9"), + parentId: NumberInt("5"), + type: NumberInt("0"), + option: NumberInt("3"), + title: "Extract Data", + sequence: [ ], + isInLoop: true, + position: NumberInt("0"), + parameters: { + history: NumberInt("2"), + tabIndex: NumberInt("1"), + useLoop: false, + xpath: "", + wait: NumberInt("0"), + paras: [ + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数1_链接文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "604万4.5万18:23" + }, + { + num: NumberInt("1"), + value: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 正在缓冲...\n \n \n \n \n \n 获取视频参数...\n [成功]\n \n \n \n \n 播放器初始化...\n [成功]\n 3.16.0-9b97d64a\n \n \n \n 获取播放地址...\n [成功]\n \n \n \n \n 加载视频信息...\n [成功]\n \n \n \n \n 加载视频内容...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 194.5万218605:44" + }, + { + num: NumberInt("2"), + value: "3730.8万8.4万01:35" + }, + { + num: NumberInt("3"), + value: "57.4万70401:41" + }, + { + num: NumberInt("4"), + value: "1633.3万15.6万02:00" + }, + { + num: NumberInt("5"), + value: "23.6万19704:24" + }, + { + num: NumberInt("6"), + value: "71.6万199411:40" + }, + { + num: NumberInt("7"), + value: "22.9万19905:36" + }, + { + num: NumberInt("8"), + value: "612万28.6万09:55:55" + }, + { + num: NumberInt("9"), + value: "71万67803:11" + }, + { + num: NumberInt("10"), + value: "972.2万7万09:09" + }, + { + num: NumberInt("11"), + value: "509.9万3.2万18:41" + }, + { + num: NumberInt("12"), + value: "558.4万551700:46" + }, + { + num: NumberInt("13"), + value: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 正在缓冲...\n \n \n \n \n \n 获取视频参数...\n [成功]\n \n \n \n \n 播放器初始化...\n [成功]\n 3.16.0-9b97d64a\n \n \n \n 获取播放地址...\n [成功]\n \n \n \n \n 加载视频信息...\n [成功]\n \n \n \n \n 加载视频内容...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 17.8万1300:29" + }, + { + num: NumberInt("14"), + value: "463万10.9万32:03" + }, + { + num: NumberInt("15"), + value: "125.1万1.9万04:16" + }, + { + num: NumberInt("16"), + value: "648.5万70100:32" + }, + { + num: NumberInt("17"), + value: "675.5万3.8万04:53" + }, + { + num: NumberInt("18"), + value: "46万15804:51" + }, + { + num: NumberInt("19"), + value: "382.9万2万02:11" + }, + { + num: NumberInt("20"), + value: "322.6万151700:59" + }, + { + num: NumberInt("21"), + value: "142.8万453802:07" + }, + { + num: NumberInt("22"), + value: "448.5万1.1万09:58" + }, + { + num: NumberInt("23"), + value: "63.5万132201:20" + }, + { + num: NumberInt("24"), + value: "153.8万37901:23" + }, + { + num: NumberInt("25"), + value: "209.4万653703:31" + }, + { + num: NumberInt("26"), + value: "231.3万400405:33" + }, + { + num: NumberInt("27"), + value: "1.1万1900:43" + }, + { + num: NumberInt("28"), + value: "322.6万6.1万47:53" + }, + { + num: NumberInt("29"), + value: "645.8万11.4万01:11:05" + }, + { + num: NumberInt("30"), + value: "53.1万7800:09" + }, + { + num: NumberInt("31"), + value: "492.9万172300:26" + }, + { + num: NumberInt("32"), + value: "33.1万258502:46" + }, + { + num: NumberInt("33"), + value: "70.2万87601:01" + }, + { + num: NumberInt("34"), + value: "108.1万68301:41" + }, + { + num: NumberInt("35"), + value: "309.4万923703:22" + }, + { + num: NumberInt("36"), + value: "365万774201:12" + }, + { + num: NumberInt("37"), + value: "17.1万8803:43" + }, + { + num: NumberInt("38"), + value: "141.8万71200:49" + }, + { + num: NumberInt("39"), + value: "1693.5万3.2万01:13" + }, + { + num: NumberInt("40"), + value: "212.9万149701:15" + }, + { + num: NumberInt("41"), + value: "34.6万119605:28" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数2_链接地址", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.bilibili.com/video/BV1fc41187xA" + }, + { + num: NumberInt("1"), + value: "https://www.bilibili.com/video/BV1it4y1J7Wn" + }, + { + num: NumberInt("2"), + value: "https://www.bilibili.com/video/BV1Xx411p74G" + }, + { + num: NumberInt("3"), + value: "https://www.bilibili.com/video/BV1G7411K71U" + }, + { + num: NumberInt("4"), + value: "https://www.bilibili.com/video/BV1nW4118797" + }, + { + num: NumberInt("5"), + value: "https://www.bilibili.com/video/BV1pe4y1a7rJ" + }, + { + num: NumberInt("6"), + value: "https://www.bilibili.com/video/BV1uS4y1L77Z" + }, + { + num: NumberInt("7"), + value: "https://www.bilibili.com/video/BV1v34y1k7SM" + }, + { + num: NumberInt("8"), + value: "https://www.bilibili.com/video/BV1GJ411p7aq" + }, + { + num: NumberInt("9"), + value: "https://www.bilibili.com/video/BV1GL41137Cv" + }, + { + num: NumberInt("10"), + value: "https://www.bilibili.com/video/BV1MC4y1p7yf" + }, + { + num: NumberInt("11"), + value: "https://www.bilibili.com/video/BV1Z4411X7qs" + }, + { + num: NumberInt("12"), + value: "https://www.bilibili.com/video/BV1FE411H7L1" + }, + { + num: NumberInt("13"), + value: "https://www.bilibili.com/video/BV1T44y1p7mz" + }, + { + num: NumberInt("14"), + value: "https://www.bilibili.com/video/BV1ss411P7e1" + }, + { + num: NumberInt("15"), + value: "https://www.bilibili.com/video/BV1dZ4y1X7Fi" + }, + { + num: NumberInt("16"), + value: "https://www.bilibili.com/video/BV1c54114764" + }, + { + num: NumberInt("17"), + value: "https://www.bilibili.com/video/BV1xt411G73j" + }, + { + num: NumberInt("18"), + value: "https://www.bilibili.com/video/BV1TQ4y1P7bp" + }, + { + num: NumberInt("19"), + value: "https://www.bilibili.com/video/BV1ip4y1Q7V1" + }, + { + num: NumberInt("20"), + value: "https://www.bilibili.com/video/BV1ui4y1c7Pd" + }, + { + num: NumberInt("21"), + value: "https://www.bilibili.com/video/BV1R4411c7zr" + }, + { + num: NumberInt("22"), + value: "https://www.bilibili.com/video/BV1TZ4y147ME" + }, + { + num: NumberInt("23"), + value: "https://www.bilibili.com/video/BV1Ds411N7dU" + }, + { + num: NumberInt("24"), + value: "https://www.bilibili.com/video/BV1ta411f7cY" + }, + { + num: NumberInt("25"), + value: "https://www.bilibili.com/video/BV1MB4y1c7Cg" + }, + { + num: NumberInt("26"), + value: "https://www.bilibili.com/video/BV1vU4y1m7cK" + }, + { + num: NumberInt("27"), + value: "https://www.bilibili.com/video/BV14B4y1V7Uv" + }, + { + num: NumberInt("28"), + value: "https://www.bilibili.com/video/BV1UJ41137aF" + }, + { + num: NumberInt("29"), + value: "https://www.bilibili.com/video/BV1NT4y1w776" + }, + { + num: NumberInt("30"), + value: "https://www.bilibili.com/video/BV1BE411A777" + }, + { + num: NumberInt("31"), + value: "https://www.bilibili.com/video/BV1aJ411u7TN" + }, + { + num: NumberInt("32"), + value: "https://www.bilibili.com/video/BV1T54y167Hs" + }, + { + num: NumberInt("33"), + value: "https://www.bilibili.com/video/BV1yW411N7zc" + }, + { + num: NumberInt("34"), + value: "https://www.bilibili.com/video/BV1KY4y1W7CK" + }, + { + num: NumberInt("35"), + value: "https://www.bilibili.com/video/BV177411V7yc" + }, + { + num: NumberInt("36"), + value: "https://www.bilibili.com/video/BV1T7411A7WW" + }, + { + num: NumberInt("37"), + value: "https://www.bilibili.com/video/BV1sN4y157xE" + }, + { + num: NumberInt("38"), + value: "https://www.bilibili.com/video/BV1Gt411U78v" + }, + { + num: NumberInt("39"), + value: "https://www.bilibili.com/video/BV167411j7iZ" + }, + { + num: NumberInt("40"), + value: "https://www.bilibili.com/video/BV1gN4y1L7xr" + }, + { + num: NumberInt("41"), + value: "https://www.bilibili.com/video/BV1vt4y1D7pw" + } + ], + default: "" + }, + { + nodeType: NumberInt("4"), + contentType: NumberInt("1"), + relative: true, + name: "参数3_图片地址", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/picture[1]/img[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://i2.hdslb.com/bfs/archive/b8d6c6e21212b54a92a36ea03f61b7e334cc24e7.jpg@672w_378h_1c" + }, + { + num: NumberInt("1"), + value: "https://i1.hdslb.com/bfs/archive/76edeea7716a3f050782d08ebecea529984aa874.jpg@672w_378h_1c" + }, + { + num: NumberInt("2"), + value: "https://i1.hdslb.com/bfs/archive/34ed0f1580db36e8c95d4b653f6caaaa1b6fe4cd.jpg@672w_378h_1c" + }, + { + num: NumberInt("3"), + value: "https://i2.hdslb.com/bfs/archive/75886e1dc52230d510b5c843f65ef7e2c5acf4cd.jpg@672w_378h_1c" + }, + { + num: NumberInt("4"), + value: "https://i2.hdslb.com/bfs/archive/75e33c83b77d0aa11de0eee225737cc123a40f96.jpg@672w_378h_1c" + }, + { + num: NumberInt("5"), + value: "https://i2.hdslb.com/bfs/archive/0b20c3b9dbd88e8a299fcfb82d756504410da912.jpg@672w_378h_1c" + }, + { + num: NumberInt("6"), + value: "https://i2.hdslb.com/bfs/archive/e2b5d191fb2fcce7cd6dc8d2d8df21be755fc04c.jpg@672w_378h_1c" + }, + { + num: NumberInt("7"), + value: "https://i2.hdslb.com/bfs/archive/bca7479215b41e9c25e0518d1aaae004e9d35a18.jpg@672w_378h_1c" + }, + { + num: NumberInt("8"), + value: "https://i0.hdslb.com/bfs/archive/9bbef2353cf65fecadfadc20d134aa08c1fae50a.jpg@672w_378h_1c" + }, + { + num: NumberInt("9"), + value: "https://i0.hdslb.com/bfs/archive/3579b9a4262c57de3bf1ab4a0f7306fb62d028d8.jpg@672w_378h_1c" + }, + { + num: NumberInt("10"), + value: "https://i0.hdslb.com/bfs/archive/f238dbec60b54da32ee891db147481f96737777c.jpg@672w_378h_1c" + }, + { + num: NumberInt("11"), + value: "https://i0.hdslb.com/bfs/archive/c6091fc208c2565cdb99ed9ddd1dbb36250fef5d.jpg@672w_378h_1c" + }, + { + num: NumberInt("12"), + value: "https://i0.hdslb.com/bfs/archive/44de9fd295eb91ff60ddcc3fc5cedba169983fe5.jpg@672w_378h_1c" + }, + { + num: NumberInt("13"), + value: "https://i0.hdslb.com/bfs/archive/b40e9b7639e71c45246a0b24577e1b1ac325f81b.jpg@672w_378h_1c" + }, + { + num: NumberInt("14"), + value: "https://i0.hdslb.com/bfs/archive/a6969ff4649d8bb301cd04a0c7d153f4af3bbc6a.jpg@672w_378h_1c" + }, + { + num: NumberInt("15"), + value: "https://i0.hdslb.com/bfs/archive/5a7c88a8c831e054406994d28b47f43310014a10.jpg@672w_378h_1c" + }, + { + num: NumberInt("16"), + value: "https://i2.hdslb.com/bfs/archive/437b6e36cafdc77cf0dc3b3b6d476d0bff64f076.jpg@672w_378h_1c" + }, + { + num: NumberInt("17"), + value: "https://i0.hdslb.com/bfs/archive/f4411a38b88bb1591841dd5e4caf2ae9b0e24f13.jpg@672w_378h_1c" + }, + { + num: NumberInt("18"), + value: "https://i0.hdslb.com/bfs/archive/23013873a2b0c2269e046219f3006c2f53193044.jpg@672w_378h_1c" + }, + { + num: NumberInt("19"), + value: "https://i1.hdslb.com/bfs/archive/83119681117e5bfb023ed4d22cbda8c930ff51da.jpg@672w_378h_1c" + }, + { + num: NumberInt("20"), + value: "https://i1.hdslb.com/bfs/archive/3c98a797f0738c50612590431e12c8b4799d20e3.jpg@672w_378h_1c" + }, + { + num: NumberInt("21"), + value: "https://i2.hdslb.com/bfs/archive/66563dee5c5c22a0cec50251926cc743dd947817.jpg@672w_378h_1c" + }, + { + num: NumberInt("22"), + value: "https://i0.hdslb.com/bfs/archive/66c6e52e928a15102dba5606db0948ce4a4b82d8.jpg@672w_378h_1c" + }, + { + num: NumberInt("23"), + value: "https://i2.hdslb.com/bfs/archive/29578616a75ab38c8dddb5ef09b8acc6e43951aa.jpg@672w_378h_1c" + }, + { + num: NumberInt("24"), + value: "https://i1.hdslb.com/bfs/archive/80320e8b252443770e157fefcc62941f1ca7f0dd.jpg@672w_378h_1c" + }, + { + num: NumberInt("25"), + value: "https://i1.hdslb.com/bfs/archive/713b5244044fe41ce3d4615094196c1c7a6edfb5.jpg@672w_378h_1c" + }, + { + num: NumberInt("26"), + value: "https://i0.hdslb.com/bfs/archive/4417a97cfff807fe5fd04a899c9172b79e4cc7f0.jpg@672w_378h_1c" + }, + { + num: NumberInt("27"), + value: "https://i1.hdslb.com/bfs/archive/27f9ffb23e8d2dda2e21f463c5d1f9dd4b11a14d.jpg@672w_378h_1c" + }, + { + num: NumberInt("28"), + value: "https://i1.hdslb.com/bfs/archive/8eb797389171a758b639fa1fd93115d7afc2d509.jpg@672w_378h_1c" + }, + { + num: NumberInt("29"), + value: "https://i0.hdslb.com/bfs/archive/993e5d4910a8287e238a2c7069c585a77ccceedd.jpg@672w_378h_1c" + }, + { + num: NumberInt("30"), + value: "https://i1.hdslb.com/bfs/archive/2751704b052eb8fdc9eb470d03633b2026b018e2.jpg@672w_378h_1c" + }, + { + num: NumberInt("31"), + value: "https://i2.hdslb.com/bfs/archive/a0c706a5cc852bbd61b718a69c18d4210f15c547.jpg@672w_378h_1c" + }, + { + num: NumberInt("32"), + value: "https://i1.hdslb.com/bfs/archive/902ce5dea4ecb9d11e6b915b3af2d6b65da789a2.jpg@672w_378h_1c" + }, + { + num: NumberInt("33"), + value: "https://i1.hdslb.com/bfs/archive/e66075f80e9a65564e7898a6d295294d0231802c.jpg@672w_378h_1c" + }, + { + num: NumberInt("34"), + value: "https://i1.hdslb.com/bfs/archive/e67e10f8591a2c0458e5e398e5379ab3f8476af8.jpg@672w_378h_1c" + }, + { + num: NumberInt("35"), + value: "https://i0.hdslb.com/bfs/archive/ec29af76f56d9e324fe01b84d92d9d22bc944c86.jpg@672w_378h_1c" + }, + { + num: NumberInt("36"), + value: "https://i2.hdslb.com/bfs/archive/b48f70e304e40a899abba8a50c8a1e6fd77033bf.jpg@672w_378h_1c" + }, + { + num: NumberInt("37"), + value: "https://i2.hdslb.com/bfs/archive/d1fe3cdc111ad6c96a0877988d9bf9f1019d8d1b.jpg@672w_378h_1c" + }, + { + num: NumberInt("38"), + value: "https://i0.hdslb.com/bfs/archive/0e0f599401ce6e40791088f93a510946cf333d3a.jpg@672w_378h_1c" + }, + { + num: NumberInt("39"), + value: "https://i2.hdslb.com/bfs/archive/217c78db0c7c4a86f486915e8bb4f012946772b9.jpg@672w_378h_1c" + }, + { + num: NumberInt("40"), + value: "https://i2.hdslb.com/bfs/archive/e5d11e6b886802f136166358a0a07362f7e42868.jpg@672w_378h_1c" + }, + { + num: NumberInt("41"), + value: "https://i1.hdslb.com/bfs/archive/322ae5aa308092e34e7587a586f93305e18e7ff0.jpg@672w_378h_1c" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "156", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[2]/div[1]/div[1]/span[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "604万" + }, + { + num: NumberInt("1"), + value: "194.5万" + }, + { + num: NumberInt("2"), + value: "3730.8万" + }, + { + num: NumberInt("3"), + value: "57.4万" + }, + { + num: NumberInt("4"), + value: "1633.3万" + }, + { + num: NumberInt("5"), + value: "23.6万" + }, + { + num: NumberInt("6"), + value: "71.6万" + }, + { + num: NumberInt("7"), + value: "22.9万" + }, + { + num: NumberInt("8"), + value: "612万" + }, + { + num: NumberInt("9"), + value: "71万" + }, + { + num: NumberInt("10"), + value: "972.2万" + }, + { + num: NumberInt("11"), + value: "509.9万" + }, + { + num: NumberInt("12"), + value: "558.4万" + }, + { + num: NumberInt("13"), + value: "17.8万" + }, + { + num: NumberInt("14"), + value: "463万" + }, + { + num: NumberInt("15"), + value: "125.1万" + }, + { + num: NumberInt("16"), + value: "648.5万" + }, + { + num: NumberInt("17"), + value: "675.5万" + }, + { + num: NumberInt("18"), + value: "46万" + }, + { + num: NumberInt("19"), + value: "382.9万" + }, + { + num: NumberInt("20"), + value: "322.6万" + }, + { + num: NumberInt("21"), + value: "142.8万" + }, + { + num: NumberInt("22"), + value: "448.5万" + }, + { + num: NumberInt("23"), + value: "63.5万" + }, + { + num: NumberInt("24"), + value: "153.8万" + }, + { + num: NumberInt("25"), + value: "209.4万" + }, + { + num: NumberInt("26"), + value: "231.3万" + }, + { + num: NumberInt("27"), + value: "1.1万" + }, + { + num: NumberInt("28"), + value: "322.6万" + }, + { + num: NumberInt("29"), + value: "645.8万" + }, + { + num: NumberInt("30"), + value: "53.1万" + }, + { + num: NumberInt("31"), + value: "492.9万" + }, + { + num: NumberInt("32"), + value: "33.1万" + }, + { + num: NumberInt("33"), + value: "70.2万" + }, + { + num: NumberInt("34"), + value: "108.1万" + }, + { + num: NumberInt("35"), + value: "309.4万" + }, + { + num: NumberInt("36"), + value: "365万" + }, + { + num: NumberInt("37"), + value: "17.1万" + }, + { + num: NumberInt("38"), + value: "141.8万" + }, + { + num: NumberInt("39"), + value: "1693.5万" + }, + { + num: NumberInt("40"), + value: "212.9万" + }, + { + num: NumberInt("41"), + value: "34.6万" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数5_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[2]/div[1]/div[1]/span[2]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "4.5万" + }, + { + num: NumberInt("1"), + value: "2186" + }, + { + num: NumberInt("2"), + value: "8.4万" + }, + { + num: NumberInt("3"), + value: "704" + }, + { + num: NumberInt("4"), + value: "15.6万" + }, + { + num: NumberInt("5"), + value: "197" + }, + { + num: NumberInt("6"), + value: "1994" + }, + { + num: NumberInt("7"), + value: "199" + }, + { + num: NumberInt("8"), + value: "28.6万" + }, + { + num: NumberInt("9"), + value: "678" + }, + { + num: NumberInt("10"), + value: "7万" + }, + { + num: NumberInt("11"), + value: "3.2万" + }, + { + num: NumberInt("12"), + value: "5517" + }, + { + num: NumberInt("13"), + value: "13" + }, + { + num: NumberInt("14"), + value: "10.9万" + }, + { + num: NumberInt("15"), + value: "1.9万" + }, + { + num: NumberInt("16"), + value: "701" + }, + { + num: NumberInt("17"), + value: "3.8万" + }, + { + num: NumberInt("18"), + value: "158" + }, + { + num: NumberInt("19"), + value: "2万" + }, + { + num: NumberInt("20"), + value: "1517" + }, + { + num: NumberInt("21"), + value: "4538" + }, + { + num: NumberInt("22"), + value: "1.1万" + }, + { + num: NumberInt("23"), + value: "1322" + }, + { + num: NumberInt("24"), + value: "379" + }, + { + num: NumberInt("25"), + value: "6537" + }, + { + num: NumberInt("26"), + value: "4004" + }, + { + num: NumberInt("27"), + value: "19" + }, + { + num: NumberInt("28"), + value: "6.1万" + }, + { + num: NumberInt("29"), + value: "11.4万" + }, + { + num: NumberInt("30"), + value: "78" + }, + { + num: NumberInt("31"), + value: "1723" + }, + { + num: NumberInt("32"), + value: "2585" + }, + { + num: NumberInt("33"), + value: "876" + }, + { + num: NumberInt("34"), + value: "683" + }, + { + num: NumberInt("35"), + value: "9237" + }, + { + num: NumberInt("36"), + value: "7742" + }, + { + num: NumberInt("37"), + value: "88" + }, + { + num: NumberInt("38"), + value: "712" + }, + { + num: NumberInt("39"), + value: "3.2万" + }, + { + num: NumberInt("40"), + value: "1497" + }, + { + num: NumberInt("41"), + value: "1196" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数6_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[2]/div[1]/span[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "18:23" + }, + { + num: NumberInt("1"), + value: "05:44" + }, + { + num: NumberInt("2"), + value: "01:35" + }, + { + num: NumberInt("3"), + value: "01:41" + }, + { + num: NumberInt("4"), + value: "02:00" + }, + { + num: NumberInt("5"), + value: "04:24" + }, + { + num: NumberInt("6"), + value: "11:40" + }, + { + num: NumberInt("7"), + value: "05:36" + }, + { + num: NumberInt("8"), + value: "09:55:55" + }, + { + num: NumberInt("9"), + value: "03:11" + }, + { + num: NumberInt("10"), + value: "09:09" + }, + { + num: NumberInt("11"), + value: "18:41" + }, + { + num: NumberInt("12"), + value: "00:46" + }, + { + num: NumberInt("13"), + value: "00:29" + }, + { + num: NumberInt("14"), + value: "32:03" + }, + { + num: NumberInt("15"), + value: "04:16" + }, + { + num: NumberInt("16"), + value: "00:32" + }, + { + num: NumberInt("17"), + value: "04:53" + }, + { + num: NumberInt("18"), + value: "04:51" + }, + { + num: NumberInt("19"), + value: "02:11" + }, + { + num: NumberInt("20"), + value: "00:59" + }, + { + num: NumberInt("21"), + value: "02:07" + }, + { + num: NumberInt("22"), + value: "09:58" + }, + { + num: NumberInt("23"), + value: "01:20" + }, + { + num: NumberInt("24"), + value: "01:23" + }, + { + num: NumberInt("25"), + value: "03:31" + }, + { + num: NumberInt("26"), + value: "05:33" + }, + { + num: NumberInt("27"), + value: "00:43" + }, + { + num: NumberInt("28"), + value: "47:53" + }, + { + num: NumberInt("29"), + value: "01:11:05" + }, + { + num: NumberInt("30"), + value: "00:09" + }, + { + num: NumberInt("31"), + value: "00:26" + }, + { + num: NumberInt("32"), + value: "02:46" + }, + { + num: NumberInt("33"), + value: "01:01" + }, + { + num: NumberInt("34"), + value: "01:41" + }, + { + num: NumberInt("35"), + value: "03:22" + }, + { + num: NumberInt("36"), + value: "01:12" + }, + { + num: NumberInt("37"), + value: "03:43" + }, + { + num: NumberInt("38"), + value: "00:49" + }, + { + num: NumberInt("39"), + value: "01:13" + }, + { + num: NumberInt("40"), + value: "01:15" + }, + { + num: NumberInt("41"), + value: "05:28" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数7_链接文本", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "卢本伟名场面合集(更新至盖亚)" + }, + { + num: NumberInt("1"), + value: "卢本伟:从中国骄傲到劣迹主播,封杀五年复出,却被官方4字警告" + }, + { + num: NumberInt("2"), + value: "17张牌你能秒我??你能秒杀我??17张牌你今天能把我卢本伟秒了,我当场就把这个电脑屏幕吃掉!!!" + }, + { + num: NumberInt("3"), + value: "一中老师在线怼卢本伟" + }, + { + num: NumberInt("4"), + value: "【电音单曲】卢本伟牛逼!!!" + }, + { + num: NumberInt("5"), + value: "帝师当年锤卢本伟,狐弟意外爆出李易峰等事情尽然成真" + }, + { + num: NumberInt("6"), + value: "卢本伟看自己大闹天宫" + }, + { + num: NumberInt("7"), + value: "【卢本伟】五五开永久关播前的最后5分36秒!" + }, + { + num: NumberInt("8"), + value: "卢本伟直播玩掘地求升全过程" + }, + { + num: NumberInt("9"), + value: "茄子生日会PDD直播带大家找卢本伟" + }, + { + num: NumberInt("10"), + value: "你是谁 卢本伟" + }, + { + num: NumberInt("11"), + value: "卢本伟之忍住不笑大挑战,你能坚持多久???" + }, + { + num: NumberInt("12"), + value: "伞兵一号卢本伟是哪个班的?" + }, + { + num: NumberInt("13"), + value: "都说uu是拜金女 说卢本伟《出事》uu第1个跑 可是陪卢本伟到最后的还是uu" + }, + { + num: NumberInt("14"), + value: "卢本伟29杀吃鸡完整视频" + }, + { + num: NumberInt("15"), + value: "【卢本伟】孤 勇 者" + }, + { + num: NumberInt("16"), + value: "卢本伟名场面:上错车了!这段笑得我肚子疼!" + }, + { + num: NumberInt("17"), + value: "卢本伟:把我直播间关了,滚去学习!" + }, + { + num: NumberInt("18"), + value: "卢本伟怒喷xxs" + }, + { + num: NumberInt("19"), + value: "【卢本伟】仙剑开侠传" + }, + { + num: NumberInt("20"), + value: "卢本伟和PDD当年参加综艺的演技真的炸裂" + }, + { + num: NumberInt("21"), + value: "【熊出没鬼畜】卢本伟戒网瘾" + }, + { + num: NumberInt("22"), + value: "卢本伟——日本之行vlog续" + }, + { + num: NumberInt("23"), + value: "卢本伟:十七张牌你能秒我?我吃屏幕" + }, + { + num: NumberInt("24"), + value: "卢本伟给Uzi发语音,现在可以全部坐下了,并且让乌兹也站了起来" + }, + { + num: NumberInt("25"), + value: "【卢本伟】错位时空,全程催泪" + }, + { + num: NumberInt("26"), + value: "【卢本伟】我想你们了,可你们还记得我吗?" + }, + { + num: NumberInt("27"), + value: "现在的卢本伟vs以前的卢本伟" + }, + { + num: NumberInt("28"), + value: "【不要笑挑战卢本伟之心态是如何爆炸】" + }, + { + num: NumberInt("29"), + value: "【搞笑丧尸片】鲲山行(70分钟完整版) 卢本伟&茄子&周淑怡 等领衔主演" + }, + { + num: NumberInt("30"), + value: "卢本伟牛逼,公交车偶遇卢本伟!!" + }, + { + num: NumberInt("31"), + value: "老师在课堂放卢本伟鬼畜视频,别点赞,会死人的" + }, + { + num: NumberInt("32"), + value: "【卢本伟】那个广场......起风了" + }, + { + num: NumberInt("33"), + value: "现在进入卢本伟直播间会发生什么" + }, + { + num: NumberInt("34"), + value: "卢本伟回归在即?PDD直播时透露具体时间" + }, + { + num: NumberInt("35"), + value: "快 乐 网 课(卢本伟串场)" + }, + { + num: NumberInt("36"), + value: "卢本伟惊现某网课现场,数学课老师暴怒" + }, + { + num: NumberInt("37"), + value: "卢本伟惊现阿乐直播间刷礼物!阿乐:哥哥要我站着打游戏吗?" + }, + { + num: NumberInt("38"), + value: "卢本伟看IG夺冠看哭了,心疼" + }, + { + num: NumberInt("39"), + value: "上网课时,老师与卢本伟的对话 笑抽了 O(∩_∩)O哈哈~" + }, + { + num: NumberInt("40"), + value: "我的声音真的很像卢本伟吗" + }, + { + num: NumberInt("41"), + value: "卢本伟骂人名场面忍住不要笑!!!" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数8_链接地址", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://www.bilibili.com/video/BV1fc41187xA" + }, + { + num: NumberInt("1"), + value: "https://www.bilibili.com/video/BV1it4y1J7Wn" + }, + { + num: NumberInt("2"), + value: "https://www.bilibili.com/video/BV1Xx411p74G" + }, + { + num: NumberInt("3"), + value: "https://www.bilibili.com/video/BV1G7411K71U" + }, + { + num: NumberInt("4"), + value: "https://www.bilibili.com/video/BV1nW4118797" + }, + { + num: NumberInt("5"), + value: "https://www.bilibili.com/video/BV1pe4y1a7rJ" + }, + { + num: NumberInt("6"), + value: "https://www.bilibili.com/video/BV1uS4y1L77Z" + }, + { + num: NumberInt("7"), + value: "https://www.bilibili.com/video/BV1v34y1k7SM" + }, + { + num: NumberInt("8"), + value: "https://www.bilibili.com/video/BV1GJ411p7aq" + }, + { + num: NumberInt("9"), + value: "https://www.bilibili.com/video/BV1GL41137Cv" + }, + { + num: NumberInt("10"), + value: "https://www.bilibili.com/video/BV1MC4y1p7yf" + }, + { + num: NumberInt("11"), + value: "https://www.bilibili.com/video/BV1Z4411X7qs" + }, + { + num: NumberInt("12"), + value: "https://www.bilibili.com/video/BV1FE411H7L1" + }, + { + num: NumberInt("13"), + value: "https://www.bilibili.com/video/BV1T44y1p7mz" + }, + { + num: NumberInt("14"), + value: "https://www.bilibili.com/video/BV1ss411P7e1" + }, + { + num: NumberInt("15"), + value: "https://www.bilibili.com/video/BV1dZ4y1X7Fi" + }, + { + num: NumberInt("16"), + value: "https://www.bilibili.com/video/BV1c54114764" + }, + { + num: NumberInt("17"), + value: "https://www.bilibili.com/video/BV1xt411G73j" + }, + { + num: NumberInt("18"), + value: "https://www.bilibili.com/video/BV1TQ4y1P7bp" + }, + { + num: NumberInt("19"), + value: "https://www.bilibili.com/video/BV1ip4y1Q7V1" + }, + { + num: NumberInt("20"), + value: "https://www.bilibili.com/video/BV1ui4y1c7Pd" + }, + { + num: NumberInt("21"), + value: "https://www.bilibili.com/video/BV1R4411c7zr" + }, + { + num: NumberInt("22"), + value: "https://www.bilibili.com/video/BV1TZ4y147ME" + }, + { + num: NumberInt("23"), + value: "https://www.bilibili.com/video/BV1Ds411N7dU" + }, + { + num: NumberInt("24"), + value: "https://www.bilibili.com/video/BV1ta411f7cY" + }, + { + num: NumberInt("25"), + value: "https://www.bilibili.com/video/BV1MB4y1c7Cg" + }, + { + num: NumberInt("26"), + value: "https://www.bilibili.com/video/BV1vU4y1m7cK" + }, + { + num: NumberInt("27"), + value: "https://www.bilibili.com/video/BV14B4y1V7Uv" + }, + { + num: NumberInt("28"), + value: "https://www.bilibili.com/video/BV1UJ41137aF" + }, + { + num: NumberInt("29"), + value: "https://www.bilibili.com/video/BV1NT4y1w776" + }, + { + num: NumberInt("30"), + value: "https://www.bilibili.com/video/BV1BE411A777" + }, + { + num: NumberInt("31"), + value: "https://www.bilibili.com/video/BV1aJ411u7TN" + }, + { + num: NumberInt("32"), + value: "https://www.bilibili.com/video/BV1T54y167Hs" + }, + { + num: NumberInt("33"), + value: "https://www.bilibili.com/video/BV1yW411N7zc" + }, + { + num: NumberInt("34"), + value: "https://www.bilibili.com/video/BV1KY4y1W7CK" + }, + { + num: NumberInt("35"), + value: "https://www.bilibili.com/video/BV177411V7yc" + }, + { + num: NumberInt("36"), + value: "https://www.bilibili.com/video/BV1T7411A7WW" + }, + { + num: NumberInt("37"), + value: "https://www.bilibili.com/video/BV1sN4y157xE" + }, + { + num: NumberInt("38"), + value: "https://www.bilibili.com/video/BV1Gt411U78v" + }, + { + num: NumberInt("39"), + value: "https://www.bilibili.com/video/BV167411j7iZ" + }, + { + num: NumberInt("40"), + value: "https://www.bilibili.com/video/BV1gN4y1L7xr" + }, + { + num: NumberInt("41"), + value: "https://www.bilibili.com/video/BV1vt4y1D7pw" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数9_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "名场面合集(更新至盖亚)" + }, + { + num: NumberInt("1"), + value: ":从中国骄傲到劣迹主播,封杀五年复出,却被官方4字警告" + }, + { + num: NumberInt("2"), + value: "17张牌你能秒我??你能秒杀我??17张牌你今天能把我秒了,我当场就把这个电脑屏幕吃掉!!!" + }, + { + num: NumberInt("3"), + value: "一中老师在线怼" + }, + { + num: NumberInt("4"), + value: "【电音单曲】牛逼!!!" + }, + { + num: NumberInt("5"), + value: "帝师当年锤,狐弟意外爆出李易峰等事情尽然成真" + }, + { + num: NumberInt("6"), + value: "看自己大闹天宫" + }, + { + num: NumberInt("7"), + value: "【】五五开永久关播前的最后5分36秒!" + }, + { + num: NumberInt("8"), + value: "直播玩掘地求升全过程" + }, + { + num: NumberInt("9"), + value: "茄子生日会PDD直播带大家找" + }, + { + num: NumberInt("10"), + value: "你是谁" + }, + { + num: NumberInt("11"), + value: "之忍住不笑大挑战,你能坚持多久???" + }, + { + num: NumberInt("12"), + value: "伞兵一号是哪个班的?" + }, + { + num: NumberInt("13"), + value: "都说uu是拜金女说《出事》uu第1个跑可是陪到最后的还是uu" + }, + { + num: NumberInt("14"), + value: "29杀吃鸡完整视频" + }, + { + num: NumberInt("15"), + value: "【】孤勇者" + }, + { + num: NumberInt("16"), + value: "名场面:上错车了!这段笑得我肚子疼!" + }, + { + num: NumberInt("17"), + value: ":把我直播间关了,滚去学习!" + }, + { + num: NumberInt("18"), + value: "怒喷xxs" + }, + { + num: NumberInt("19"), + value: "【】仙剑开侠传" + }, + { + num: NumberInt("20"), + value: "和PDD当年参加综艺的演技真的炸裂" + }, + { + num: NumberInt("21"), + value: "【熊出没鬼畜】戒网瘾" + }, + { + num: NumberInt("22"), + value: "——日本之行vlog续" + }, + { + num: NumberInt("23"), + value: ":十七张牌你能秒我?我吃屏幕" + }, + { + num: NumberInt("24"), + value: "给Uzi发语音,现在可以全部坐下了,并且让乌兹也站了起来" + }, + { + num: NumberInt("25"), + value: "【】错位时空,全程催泪" + }, + { + num: NumberInt("26"), + value: "【】我想你们了,可你们还记得我吗?" + }, + { + num: NumberInt("27"), + value: "现在的vs以前的" + }, + { + num: NumberInt("28"), + value: "【不要笑挑战之心态是如何爆炸】" + }, + { + num: NumberInt("29"), + value: "【搞笑丧尸片】鲲山行(70分钟完整版)&茄子&周淑怡等领衔主演" + }, + { + num: NumberInt("30"), + value: "牛逼,公交车偶遇!!" + }, + { + num: NumberInt("31"), + value: "老师在课堂放鬼畜视频,别点赞,会死人的" + }, + { + num: NumberInt("32"), + value: "【】那个广场......起风了" + }, + { + num: NumberInt("33"), + value: "现在进入直播间会发生什么" + }, + { + num: NumberInt("34"), + value: "回归在即?PDD直播时透露具体时间" + }, + { + num: NumberInt("35"), + value: "快乐网课(串场)" + }, + { + num: NumberInt("36"), + value: "惊现某网课现场,数学课老师暴怒" + }, + { + num: NumberInt("37"), + value: "惊现阿乐直播间刷礼物!阿乐:哥哥要我站着打游戏吗?" + }, + { + num: NumberInt("38"), + value: "看IG夺冠看哭了,心疼" + }, + { + num: NumberInt("39"), + value: "上网课时,老师与的对话笑抽了O(∩_∩)O哈哈~" + }, + { + num: NumberInt("40"), + value: "我的声音真的很像吗" + }, + { + num: NumberInt("41"), + value: "骂人名场面忍住不要笑!!!" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数10_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]/em[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "卢本伟" + }, + { + num: NumberInt("1"), + value: "卢本伟" + }, + { + num: NumberInt("2"), + value: "卢本伟" + }, + { + num: NumberInt("3"), + value: "卢本伟" + }, + { + num: NumberInt("4"), + value: "卢本伟" + }, + { + num: NumberInt("5"), + value: "卢本伟" + }, + { + num: NumberInt("6"), + value: "卢本伟" + }, + { + num: NumberInt("7"), + value: "卢本伟" + }, + { + num: NumberInt("8"), + value: "卢本伟" + }, + { + num: NumberInt("9"), + value: "卢本伟" + }, + { + num: NumberInt("10"), + value: "卢本伟" + }, + { + num: NumberInt("11"), + value: "卢本伟" + }, + { + num: NumberInt("12"), + value: "卢本伟" + }, + { + num: NumberInt("13"), + value: "卢本伟" + }, + { + num: NumberInt("14"), + value: "卢本伟" + }, + { + num: NumberInt("15"), + value: "卢本伟" + }, + { + num: NumberInt("16"), + value: "卢本伟" + }, + { + num: NumberInt("17"), + value: "卢本伟" + }, + { + num: NumberInt("18"), + value: "卢本伟" + }, + { + num: NumberInt("19"), + value: "卢本伟" + }, + { + num: NumberInt("20"), + value: "卢本伟" + }, + { + num: NumberInt("21"), + value: "卢本伟" + }, + { + num: NumberInt("22"), + value: "卢本伟" + }, + { + num: NumberInt("23"), + value: "卢本伟" + }, + { + num: NumberInt("24"), + value: "卢本伟" + }, + { + num: NumberInt("25"), + value: "卢本伟" + }, + { + num: NumberInt("26"), + value: "卢本伟" + }, + { + num: NumberInt("27"), + value: "卢本伟" + }, + { + num: NumberInt("28"), + value: "卢本伟" + }, + { + num: NumberInt("29"), + value: "卢本伟" + }, + { + num: NumberInt("30"), + value: "卢本伟" + }, + { + num: NumberInt("31"), + value: "卢本伟" + }, + { + num: NumberInt("32"), + value: "卢本伟" + }, + { + num: NumberInt("33"), + value: "卢本伟" + }, + { + num: NumberInt("34"), + value: "卢本伟" + }, + { + num: NumberInt("35"), + value: "卢本伟" + }, + { + num: NumberInt("36"), + value: "卢本伟" + }, + { + num: NumberInt("37"), + value: "卢本伟" + }, + { + num: NumberInt("38"), + value: "卢本伟" + }, + { + num: NumberInt("39"), + value: "卢本伟" + }, + { + num: NumberInt("40"), + value: "卢本伟" + }, + { + num: NumberInt("41"), + value: "卢本伟" + } + ], + default: "" + }, + { + nodeType: NumberInt("1"), + contentType: NumberInt("0"), + relative: true, + name: "参数11_链接文本", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/p[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "柠柚Sama · 2020-4-2" + }, + { + num: NumberInt("1"), + value: "限量版蓝胖纸 · 8-19" + }, + { + num: NumberInt("2"), + value: "风纪委员啊祖 · 2017-7-26" + }, + { + num: NumberInt("3"), + value: "兰兰我老婆_ · 2020-2-26" + }, + { + num: NumberInt("4"), + value: "一咸菊菊 · 2017-12-20" + }, + { + num: NumberInt("5"), + value: "大风中摇摆的火苗 · 9-12" + }, + { + num: NumberInt("6"), + value: "卢姥爷留声机 · 1-21" + }, + { + num: NumberInt("7"), + value: "账号注销9499082 · 3-6" + }, + { + num: NumberInt("8"), + value: "mdtx58 · 2020-1-11" + }, + { + num: NumberInt("9"), + value: "PDD在B站 · 2021-11-4" + }, + { + num: NumberInt("10"), + value: "阿飞vlog记录开哥 · 2020-5-26" + }, + { + num: NumberInt("11"), + value: "花芝虹 · 2019-8-10" + }, + { + num: NumberInt("12"), + value: "找不到拨片的K宝 · 2020-2-28" + }, + { + num: NumberInt("13"), + value: "55开永远的神 · 2-15" + }, + { + num: NumberInt("14"), + value: "曙神之光 · 2018-7-23" + }, + { + num: NumberInt("15"), + value: "可乐君Cy · 2021-12-3" + }, + { + num: NumberInt("16"), + value: "忍野咩咩_ · 2020-4-28" + }, + { + num: NumberInt("17"), + value: "不知名肥皂 · 2019-7-16" + }, + { + num: NumberInt("18"), + value: "张三是我大哥 · 2020-5-23" + }, + { + num: NumberInt("19"), + value: "霖言丶 · 2020-5-13" + }, + { + num: NumberInt("20"), + value: "happykid17 · 2021-1-4" + }, + { + num: NumberInt("21"), + value: "沫然Fight · 2019-7-6" + }, + { + num: NumberInt("22"), + value: "阿飞vlog记录开哥 · 2020-4-25" + }, + { + num: NumberInt("23"), + value: "ttsy天天少爷 · 2018-7-20" + }, + { + num: NumberInt("24"), + value: "电竞山里娃 · 8-6" + }, + { + num: NumberInt("25"), + value: "冷颜菌丶 · 2021-4-19" + }, + { + num: NumberInt("26"), + value: "阿飞vlog记录开哥 · 5-14" + }, + { + num: NumberInt("27"), + value: "包子放盐 · 8-21" + }, + { + num: NumberInt("28"), + value: "热情似火的小海 · 2019-9-20" + }, + { + num: NumberInt("29"), + value: "浅澄月 · 2020-10-1" + }, + { + num: NumberInt("30"), + value: "坏兔子x · 2020-3-21" + }, + { + num: NumberInt("31"), + value: "泽华辅一 · 2019-9-22" + }, + { + num: NumberInt("32"), + value: "污神ya · 2020-11-28" + }, + { + num: NumberInt("33"), + value: "打破慘案 · 2018-6-4" + }, + { + num: NumberInt("34"), + value: "PDD在B站 · 4-3" + }, + { + num: NumberInt("35"), + value: "香蕉棒棒锤ts · 2020-2-12" + }, + { + num: NumberInt("36"), + value: "我的三七没有分 · 2020-2-21" + }, + { + num: NumberInt("37"), + value: "高能游戏眼 · 8-8" + }, + { + num: NumberInt("38"), + value: "陌轩泽 · 2018-11-11" + }, + { + num: NumberInt("39"), + value: "Kiyohime乾鲲 · 2020-2-17" + }, + { + num: NumberInt("40"), + value: "月下undermoon · 7-29" + }, + { + num: NumberInt("41"), + value: "湫瑾吴 · 2020-7-29" + } + ], + default: "" + }, + { + nodeType: NumberInt("2"), + contentType: NumberInt("0"), + relative: true, + name: "参数12_链接地址", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/p[1]/a[1]", + exampleValues: [ + { + num: NumberInt("0"), + value: "https://space.bilibili.com/152292466" + }, + { + num: NumberInt("1"), + value: "https://space.bilibili.com/505241381" + }, + { + num: NumberInt("2"), + value: "https://space.bilibili.com/28824825" + }, + { + num: NumberInt("3"), + value: "https://space.bilibili.com/449276953" + }, + { + num: NumberInt("4"), + value: "https://space.bilibili.com/26311441" + }, + { + num: NumberInt("5"), + value: "https://space.bilibili.com/1492647" + }, + { + num: NumberInt("6"), + value: "https://space.bilibili.com/2028911406" + }, + { + num: NumberInt("7"), + value: "https://space.bilibili.com/1977691792" + }, + { + num: NumberInt("8"), + value: "https://space.bilibili.com/493533134" + }, + { + num: NumberInt("9"), + value: "https://space.bilibili.com/36882906" + }, + { + num: NumberInt("10"), + value: "https://space.bilibili.com/551271353" + }, + { + num: NumberInt("11"), + value: "https://space.bilibili.com/9336404" + }, + { + num: NumberInt("12"), + value: "https://space.bilibili.com/12319573" + }, + { + num: NumberInt("13"), + value: "https://space.bilibili.com/548489530" + }, + { + num: NumberInt("14"), + value: "https://space.bilibili.com/226736083" + }, + { + num: NumberInt("15"), + value: "https://space.bilibili.com/436582505" + }, + { + num: NumberInt("16"), + value: "https://space.bilibili.com/18915489" + }, + { + num: NumberInt("17"), + value: "https://space.bilibili.com/13142874" + }, + { + num: NumberInt("18"), + value: "https://space.bilibili.com/340497271" + }, + { + num: NumberInt("19"), + value: "https://space.bilibili.com/17422165" + }, + { + num: NumberInt("20"), + value: "https://space.bilibili.com/333644619" + }, + { + num: NumberInt("21"), + value: "https://space.bilibili.com/381448438" + }, + { + num: NumberInt("22"), + value: "https://space.bilibili.com/551271353" + }, + { + num: NumberInt("23"), + value: "https://space.bilibili.com/155682730" + }, + { + num: NumberInt("24"), + value: "https://space.bilibili.com/328379242" + }, + { + num: NumberInt("25"), + value: "https://space.bilibili.com/29379264" + }, + { + num: NumberInt("26"), + value: "https://space.bilibili.com/551271353" + }, + { + num: NumberInt("27"), + value: "https://space.bilibili.com/630915163" + }, + { + num: NumberInt("28"), + value: "https://space.bilibili.com/389114021" + }, + { + num: NumberInt("29"), + value: "https://space.bilibili.com/8034163" + }, + { + num: NumberInt("30"), + value: "https://space.bilibili.com/39486882" + }, + { + num: NumberInt("31"), + value: "https://space.bilibili.com/312129507" + }, + { + num: NumberInt("32"), + value: "https://space.bilibili.com/413118612" + }, + { + num: NumberInt("33"), + value: "https://space.bilibili.com/258882426" + }, + { + num: NumberInt("34"), + value: "https://space.bilibili.com/36882906" + }, + { + num: NumberInt("35"), + value: "https://space.bilibili.com/294591363" + }, + { + num: NumberInt("36"), + value: "https://space.bilibili.com/331804025" + }, + { + num: NumberInt("37"), + value: "https://space.bilibili.com/1510650555" + }, + { + num: NumberInt("38"), + value: "https://space.bilibili.com/112883352" + }, + { + num: NumberInt("39"), + value: "https://space.bilibili.com/407529648" + }, + { + num: NumberInt("40"), + value: "https://space.bilibili.com/17779099" + }, + { + num: NumberInt("41"), + value: "https://space.bilibili.com/587969326" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数13_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[9]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "正在缓冲..." + }, + { + num: NumberInt("13"), + value: "正在缓冲..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数14_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[1]/span[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "获取视频参数..." + }, + { + num: NumberInt("13"), + value: "获取视频参数..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数15_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[1]/span[2]", + exampleValues: [ + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("13"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数16_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "播放器初始化..." + }, + { + num: NumberInt("13"), + value: "播放器初始化..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数17_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[2]", + exampleValues: [ + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("13"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数18_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[2]/span[3]", + exampleValues: [ + { + num: NumberInt("1"), + value: "3.16.0-9b97d64a" + }, + { + num: NumberInt("13"), + value: "3.16.0-9b97d64a" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数19_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[3]/span[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "获取播放地址..." + }, + { + num: NumberInt("13"), + value: "获取播放地址..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数20_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[3]/span[2]", + exampleValues: [ + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("13"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数21_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[4]/span[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "加载视频信息..." + }, + { + num: NumberInt("13"), + value: "加载视频信息..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数22_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[4]/span[2]", + exampleValues: [ + { + num: NumberInt("1"), + value: "[成功]" + }, + { + num: NumberInt("13"), + value: "[成功]" + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数23_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/a[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[10]/div[1]/div[5]/span[1]", + exampleValues: [ + { + num: NumberInt("1"), + value: "加载视频内容..." + }, + { + num: NumberInt("13"), + value: "加载视频内容..." + } + ], + default: "" + }, + { + nodeType: NumberInt("0"), + contentType: NumberInt("1"), + relative: true, + name: "参数24_文本", + desc: "", + relativeXpath: "/div[1]/div[2]/div[1]/div[1]/a[1]/h3[1]/em[2]", + exampleValues: [ + { + num: NumberInt("13"), + value: "卢本伟" + }, + { + num: NumberInt("27"), + value: "卢本伟" + }, + { + num: NumberInt("30"), + value: "卢本伟" + } + ], + default: "" + } + ], + loopType: NumberInt("1") + } + } + ], + id: NumberInt("2"), + inputParameters: [ + { + id: NumberInt("0"), + name: "urlList_0", + nodeId: NumberInt("1"), + nodeName: "Open Page", + value: "https://www.bilibili.com", + desc: "List of URLs to be collected, separated by \\n for multiple lines", + type: "string", + exampleValue: "https://www.bilibili.com" + }, + { + id: NumberInt("1"), + name: "inputText_1", + nodeName: "Input Text", + nodeId: NumberInt("2"), + desc: "The text to be entered, such as 'computer' at eBay search box", + type: "string", + exampleValue: "卢本伟", + value: "卢本伟" + }, + { + id: NumberInt("2"), + name: "loopTimes_Loop click next page_2", + nodeId: NumberInt("6"), + nodeName: "Loop click next page", + desc: "Number of loop executions, 0 means unlimited loops (until element not found)", + type: "int", + exampleValue: NumberInt("0"), + value: NumberInt("0") + } + ], + links: "https://www.bilibili.com", + name: "Bilibili视频示例", + outputParameters: [ + { + id: NumberInt("0"), + name: "参数1_链接文本", + desc: "", + type: "string", + exampleValue: "604万4.5万18:23" + }, + { + id: NumberInt("1"), + name: "参数2_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.bilibili.com/video/BV1fc41187xA" + }, + { + id: NumberInt("2"), + name: "参数3_图片地址", + desc: "", + type: "string", + exampleValue: "https://i2.hdslb.com/bfs/archive/b8d6c6e21212b54a92a36ea03f61b7e334cc24e7.jpg@672w_378h_1c" + }, + { + id: NumberInt("3"), + name: "156", + desc: "", + type: "string", + exampleValue: "604万" + }, + { + id: NumberInt("4"), + name: "参数5_文本", + desc: "", + type: "string", + exampleValue: "4.5万" + }, + { + id: NumberInt("5"), + name: "参数6_文本", + desc: "", + type: "string", + exampleValue: "18:23" + }, + { + id: NumberInt("6"), + name: "参数7_链接文本", + desc: "", + type: "string", + exampleValue: "卢本伟名场面合集(更新至盖亚)" + }, + { + id: NumberInt("7"), + name: "参数8_链接地址", + desc: "", + type: "string", + exampleValue: "https://www.bilibili.com/video/BV1fc41187xA" + }, + { + id: NumberInt("8"), + name: "参数9_文本", + desc: "", + type: "string", + exampleValue: "名场面合集(更新至盖亚)" + }, + { + id: NumberInt("9"), + name: "参数10_文本", + desc: "", + type: "string", + exampleValue: "卢本伟" + }, + { + id: NumberInt("10"), + name: "参数11_链接文本", + desc: "", + type: "string", + exampleValue: "柠柚Sama · 2020-4-2" + }, + { + id: NumberInt("11"), + name: "参数12_链接地址", + desc: "", + type: "string", + exampleValue: "https://space.bilibili.com/152292466" + }, + { + id: NumberInt("12"), + name: "参数13_文本", + desc: "", + type: "string", + exampleValue: "正在缓冲..." + }, + { + id: NumberInt("13"), + name: "参数14_文本", + desc: "", + type: "string", + exampleValue: "获取视频参数..." + }, + { + id: NumberInt("14"), + name: "参数15_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("15"), + name: "参数16_文本", + desc: "", + type: "string", + exampleValue: "播放器初始化..." + }, + { + id: NumberInt("16"), + name: "参数17_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("17"), + name: "参数18_文本", + desc: "", + type: "string", + exampleValue: "3.16.0-9b97d64a" + }, + { + id: NumberInt("18"), + name: "参数19_文本", + desc: "", + type: "string", + exampleValue: "获取播放地址..." + }, + { + id: NumberInt("19"), + name: "参数20_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("20"), + name: "参数21_文本", + desc: "", + type: "string", + exampleValue: "加载视频信息..." + }, + { + id: NumberInt("21"), + name: "参数22_文本", + desc: "", + type: "string", + exampleValue: "[成功]" + }, + { + id: NumberInt("22"), + name: "参数23_文本", + desc: "", + type: "string", + exampleValue: "加载视频内容..." + }, + { + id: NumberInt("23"), + name: "参数24_文本", + desc: "", + type: "string", + exampleValue: "卢本伟" + } + ], + url: "https://www.bilibili.com" +} ); diff --git a/ExecuteStage/Program.ipynb b/ExecuteStage/Program.ipynb deleted file mode 100644 index 29f6ad6e..00000000 --- a/ExecuteStage/Program.ipynb +++ /dev/null @@ -1,911 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 服务包装手动版工具执行阶段" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## 导入包" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "# -*- coding: utf-8 -*-\n", - "import json\n", - "import re\n", - "from urllib import parse\n", - "import base64\n", - "import hashlib\n", - "import time\n", - "import requests\n", - "from selenium.webdriver.common.keys import Keys\n", - "from selenium.webdriver.common.action_chains import ActionChains\n", - "from selenium import webdriver\n", - "from selenium.webdriver.support.ui import WebDriverWait\n", - "from selenium.webdriver.support import expected_conditions as EC\n", - "from selenium.webdriver.common.by import By\n", - "from selenium.common.exceptions import NoSuchElementException\n", - "from selenium.common.exceptions import TimeoutException\n", - "from selenium.common.exceptions import StaleElementReferenceException\n", - "import random\n", - "import numpy\n", - "import csv" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## 核心函数处理部分" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "# 记录log\n", - "def recordLog(str=\"\"):\n", - " global log\n", - " log = log + str + \"\\n\"\n", - " \n", - "#控制台打印log函数\n", - "def Log(text,text2=\"\"):\n", - " switch = False\n", - " if switch:\n", - " print(text,text2)\n", - "\n", - "# 执行节点关键函数部分\n", - "def excuteNode(nodeId, loopValue=\"\", clickPath=\"\", index=0):\n", - " node = procedure[nodeId]\n", - " WebDriverWait(browser, 10).until\n", - " (EC.visibility_of_element_located((By.XPATH, node[\"parameters\"][\"xpath\"]))) # 等待元素出现才进行操作,10秒内未出现则报错\n", - "\n", - " # 根据不同选项执行不同操作\n", - " if node[\"option\"] == 0 or node[\"option\"] == 10: # root操作,条件分支操作\n", - " for i in node[\"sequence\"]: # 从根节点开始向下读取\n", - " excuteNode(i, loopValue)\n", - " elif node[\"option\"] == 1: # 打开网页操作\n", - " recordLog(\"openPage\")\n", - " openPage(node[\"parameters\"], loopValue)\n", - " elif node[\"option\"] == 2: # 点击元素\n", - " recordLog(\"Click\")\n", - " clickElement(node[\"parameters\"], loopValue, clickPath, index)\n", - " elif node[\"option\"] == 3: # 提取数据\n", - " recordLog(\"getData\")\n", - " getData(node[\"parameters\"], loopValue, node[\"isInLoop\"])\n", - " elif node[\"option\"] == 4: # 输入文字\n", - " inputInfo(node[\"parameters\"], loopValue)\n", - " elif node[\"option\"] == 8: # 循环\n", - " recordLog(\"loop\")\n", - " loopExcute(node, loopValue) # 执行循环\n", - " elif node[\"option\"] == 9: # 条件分支\n", - " recordLog(\"judge\")\n", - " judgeExcute(node, loopValue)\n", - "\n", - " # 执行完之后进行等待\n", - " if node[\"option\"] != 0:\n", - " waitTime = 0.01 # 默认等待0.01秒\n", - " if node[\"parameters\"][\"wait\"] > 1:\n", - " waitTime = node[\"parameters\"][\"wait\"]\n", - " time.sleep(waitTime)\n", - " Log(\"Node执行完后等待:\",waitTime)\n", - "\n", - "\n", - "# 对判断条件的处理\n", - "def judgeExcute(node, loopElement):\n", - " global bodyText # 引入bodyText\n", - " excuteBranchId = 0 # 要执行的BranchId\n", - " for i in node[\"sequence\"]:\n", - " cnode = procedure[i] # 获得条件分支\n", - " tType = int(cnode[\"parameters\"][\"class\"]) # 获得判断条件类型\n", - " if tType == 0: # 什么条件都没有\n", - " excuteBranchId = i\n", - " break\n", - " elif tType == 1: # 当前页面包含文本\n", - " try:\n", - " if bodyText.find(cnode[\"parameters\"][\"value\"]) >= 0:\n", - " excuteBranchId = i\n", - " break\n", - " except: # 找不到元素下一个条件\n", - " continue\n", - " elif tType == 2: # 当前页面包含元素\n", - " try:\n", - " if browser.find_element_by_xpath(cnode[\"parameters\"][\"value\"]):\n", - " excuteBranchId = i\n", - " break\n", - " except: # 找不到元素或者xpath写错了,下一个条件\n", - " continue\n", - " elif tType == 3: # 当前循环元素包括文本\n", - " try:\n", - " if loopElement.text.find(cnode[\"parameters\"][\"value\"]) >= 0:\n", - " excuteBranchId = i\n", - " break\n", - " except: # 找不到元素或者xpath写错了,下一个条件\n", - " continue\n", - " elif tType == 4: # 当前循环元素包括元素\n", - " try:\n", - " if loopElement.find_element_by_xpath(cnode[\"parameters\"][\"value\"][1:]):\n", - " excuteBranchId = i\n", - " break\n", - " except: # 找不到元素或者xpath写错了,下一个条件\n", - " continue\n", - " excuteNode(excuteBranchId, loopElement)\n", - "\n", - "\n", - "# 对循环的处理\n", - "def loopExcute(node, loopValue):\n", - " time.sleep(0.1) # 第一次执行循环的时候强制等待1秒\n", - " Log(\"循环执行前等待0.1秒\")\n", - " global history\n", - " thisHandle = browser.current_window_handle # 记录本次循环内的标签页的ID\n", - " thisHistoryLength = browser.execute_script('return history.length') # 记录本次循环内的history的length\n", - "\n", - " if int(node[\"parameters\"][\"loopType\"]) == 0: # 单个元素循环\n", - " # 无跳转标签页操作\n", - " count = 0 # 执行次数\n", - " while True: # do while循环\n", - " try:\n", - " element = browser.find_element_by_xpath(node[\"parameters\"][\"xpath\"])\n", - " for i in node[\"sequence\"]: # 挨个执行操作\n", - " excuteNode(i, element, node[\"parameters\"][\"xpath\"])\n", - " Log(\"click: \", node[\"parameters\"][\"xpath\"])\n", - " recordLog(\"click:\" + node[\"parameters\"][\"xpath\"])\n", - " except NoSuchElementException:\n", - " break # 如果找不到元素,退出循环\n", - " except Exception as e:\n", - " raise\n", - " count = count + 1\n", - " Log(\"页数:\", count)\n", - " recordLog(\"页数:\" + str(count))\n", - " if node[\"parameters\"][\"exitCount\"] == count: # 如果达到设置的退出循环条件的话\n", - " break\n", - " elif int(node[\"parameters\"][\"loopType\"]) == 1: # 不固定元素列表\n", - " try:\n", - " elements = browser.find_elements_by_xpath(node[\"parameters\"][\"xpath\"])\n", - " for index in range(len(elements)):\n", - " for i in node[\"sequence\"]: # 挨个执行操作\n", - " excuteNode(i, elements[index], node[\"parameters\"][\"xpath\"], index)\n", - " if browser.current_window_handle != thisHandle: # 如果执行完一次循环之后标签页的位置发生了变化\n", - " while True: # 一直关闭窗口直到当前标签页\n", - " browser.close() # 关闭使用完的标签页\n", - " browser.switch_to.window(browser.window_handles[-1])\n", - " if browser.current_window_handle == thisHandle:\n", - " break\n", - " if history[\"index\"] != thisHistoryLength and history[\"handle\"] == browser.current_window_handle: # 如果执行完一次循环之后历史记录发生了变化,注意当前页面的判断\n", - " difference = thisHistoryLength - history[\"index\"] # 计算历史记录变化差值\n", - " browser.execute_script('history.go(' + str(difference) + ')') # 回退历史记录\n", - " if node[\"parameters\"][\"historyWait\"] > 2: # 回退后要等待的时间\n", - " time.sleep(node[\"parameters\"][\"historyWait\"])\n", - " else:\n", - " time.sleep(2)\n", - " Log(\"切换历史记录等待2秒或者:\",node[\"parameters\"][\"historyWait\"])\n", - " browser.execute_script('window.stop()')\n", - " except NoSuchElementException:\n", - " Log(\"pathNotFound: \", node[\"parameters\"][\"xpath\"])\n", - " recordLog(\"pathNotFound: \" + node[\"parameters\"][\"xpath\"])\n", - " pass # 循环中找不到元素就略过操作\n", - " except Exception as e:\n", - " raise\n", - " elif int(node[\"parameters\"][\"loopType\"]) == 2: # 固定元素列表\n", - " for path in node[\"parameters\"][\"pathList\"].split(\"\\n\"): # 千万不要忘了分割!!\n", - " try:\n", - " element = browser.find_element_by_xpath(path)\n", - " for i in node[\"sequence\"]: # 挨个执行操作\n", - " excuteNode(i, element, path,0)\n", - " if browser.current_window_handle != thisHandle: # 如果执行完一次循环之后标签页的位置发生了变化\n", - " while True: # 一直关闭窗口直到当前标签页\n", - " browser.close() # 关闭使用完的标签页\n", - " browser.switch_to.window(browser.window_handles[-1])\n", - " if browser.current_window_handle == thisHandle:\n", - " break\n", - " if history[\"index\"] != thisHistoryLength and history[\"handle\"] == browser.current_window_handle: # 如果执行完一次循环之后历史记录发生了变化,注意当前页面的判断\n", - " difference = thisHistoryLength - history[\"index\"] # 计算历史记录变化差值\n", - " browser.execute_script('history.go(' + str(difference) + ')') # 回退历史记录\n", - " if node[\"parameters\"][\"historyWait\"] > 2: # 回退后要等待的时间\n", - " time.sleep(node[\"parameters\"][\"historyWait\"])\n", - " else:\n", - " time.sleep(2)\n", - " Log(\"切换历史记录等待2秒或者:\",node[\"parameters\"][\"historyWait\"])\n", - " browser.execute_script('window.stop()')\n", - " except NoSuchElementException:\n", - " Log(\"pathNotFound: \", path)\n", - " recordLog(\"pathNotFound: \" + path)\n", - " continue # 循环中找不到元素就略过操作\n", - " except Exception as e:\n", - " raise\n", - " elif int(node[\"parameters\"][\"loopType\"]) == 3: # 固定文本列表\n", - " textList = node[\"parameters\"][\"textList\"].split(\"\\n\")\n", - " for text in textList:\n", - " recordLog(\"input: \" + text)\n", - " for i in node[\"sequence\"]: # 挨个执行操作\n", - " excuteNode(i, text, \"\")\n", - " elif int(node[\"parameters\"][\"loopType\"]) == 4: # 固定网址列表\n", - " pass # 以后再做\n", - " history[\"index\"] = thisHistoryLength\n", - " history[\"handle\"] = browser.current_window_handle\n", - " \n", - "# 打开网页事件\n", - "def openPage(para, loopValue):\n", - " global links\n", - " global urlId\n", - " global history\n", - " browser.switch_to.window(browser.window_handles[0]) # 打开网页操作从第1个页面开始\n", - " history[\"handle\"] = browser.current_window_handle\n", - " if para[\"useLoop\"]:\n", - " url = loopValue\n", - " else:\n", - " url = links[urlId]\n", - " try:\n", - " browser.get(url)\n", - " except TimeoutException:\n", - " Log('time out after 10 seconds when loading page: ' + url)\n", - " recordLog('time out after 10 seconds when loading page: ' + url)\n", - " browser.execute_script('window.stop()')\n", - " try:\n", - " history[\"index\"] = browser.execute_script(\"return history.length\")\n", - " except TimeoutException:\n", - " browser.execute_script('window.stop()')\n", - " history[\"index\"] = browser.execute_script(\"return history.length\")\n", - " try:\n", - " if para[\"scrollType\"] != 0 and para[\"scrollCount\"] > 0: # 控制屏幕向下滚动\n", - " for i in range(para[\"scrollCount\"]):\n", - " time.sleep(1) # 下拉完等1秒\n", - " Log(\"下拉等待1秒\")\n", - " body = browser.find_element_by_css_selector(\"body\")\n", - " body.send_keys(Keys.END)\n", - " except TimeoutException:\n", - " Log('time out after 10 seconds when loading page: ' + url)\n", - " recordLog('time out after 10 seconds when loading page: ' + url)\n", - " browser.execute_script('window.stop()')\n", - " if containJudge:\n", - " global bodyText # 每次执行点击,输入元素和打开网页操作后,需要更新bodyText\n", - " try:\n", - " bodyText = browser.find_element_by_css_selector(\"body\").text\n", - " except TimeoutException:\n", - " Log('time out after 10 seconds when getting body text: ' + url)\n", - " recordLog('time out after 10 seconds when getting body text:: ' + url)\n", - " browser.execute_script('window.stop()')\n", - " time.sleep(1)\n", - " Log(\"获得bodytext等待1秒\")\n", - " # 再执行一遍\n", - " bodyText = browser.find_element_by_css_selector(\"body\").text\n", - " except Exception as e:\n", - " Log(e)\n", - " recordLog(str(e))\n", - "\n", - "\n", - "# 键盘输入事件\n", - "def inputInfo(para, loopValue):\n", - " time.sleep(1) # 输入之前等待1秒\n", - " Log(\"输入前等待1秒\")\n", - " try:\n", - " textbox = browser.find_element_by_xpath(para[\"xpath\"])\n", - " except:\n", - " Log(\"找不到输入框元素:\" + para[\"xpath\"] + \"请尝试执行前等待\")\n", - " recordLog(\"找不到输入框元素:\" + para[\"xpath\"] + \"请尝试执行前等待\")\n", - " exit()\n", - " textbox.send_keys(Keys.CONTROL, 'a')\n", - " textbox.send_keys(Keys.BACKSPACE)\n", - " if para[\"useLoop\"]:\n", - " textbox.send_keys(loopValue)\n", - " else:\n", - " textbox.send_keys(para[\"value\"])\n", - " global bodyText # 每次执行点击,输入元素和打开网页操作后,需要更新bodyText\n", - " bodyText = browser.find_element_by_css_selector(\"body\").text\n", - "\n", - "\n", - "# 点击元素事件\n", - "def clickElement(para, loopElement=None, clickPath=\"\", index=0):\n", - " global history\n", - " time.sleep(1) # 点击之前等待1秒\n", - " Log(\"点击之前等待1秒\")\n", - " if para[\"useLoop\"]: #使用循环的情况下,传入的clickPath就是实际的xpath\n", - " path = clickPath\n", - " else:\n", - " path = clickPath + para[\"xpath\"] #不然使用元素定义的xpath\n", - " tempHandleNum = len(browser.window_handles) #记录之前的窗口位置\n", - " try:\n", - " script = 'var result = document.evaluate(`' + path + '`, document, null, XPathResult.ANY_TYPE, null);for(let i=0;i<arguments[0];i++){result.iterateNext();} result.iterateNext().click();'\n", - " browser.execute_script(script,str(index))# 用js的点击方法\n", - "\n", - " except TimeoutException:\n", - " Log('time out after 10 seconds when loading clicked page')\n", - " recordLog('time out after 10 seconds when loading clicked page')\n", - " browser.execute_script('window.stop()')\n", - " except Exception as e:\n", - " Log(e)\n", - " recordLog(str(e))\n", - " time.sleep(0.5) # 点击之后等半秒\n", - " Log(\"点击之后等待0.5秒\")\n", - " if tempHandleNum != len(browser.window_handles): # 如果有新标签页的行为发生\n", - " browser.switch_to.window(browser.window_handles[-1]) # 跳转到新的标签页\n", - " history[\"handle\"] = browser.current_window_handle\n", - " try:\n", - " history[\"index\"] = browser.execute_script(\"return history.length\")\n", - " except TimeoutException:\n", - " browser.execute_script('window.stop()')\n", - " history[\"index\"] = browser.execute_script(\"return history.length\")\n", - " else:\n", - " try:\n", - " history[\"index\"] = browser.execute_script(\"return history.length\")\n", - " except TimeoutException:\n", - " browser.execute_script('window.stop()')\n", - " history[\"index\"] = browser.execute_script(\"return history.length\")\n", - " # 如果打开了新窗口,切换到新窗口\n", - " try:\n", - " if para[\"scrollType\"] != 0 and para[\"scrollCount\"] > 0: # 控制屏幕向下滚动\n", - " for i in range(para[\"scrollCount\"]):\n", - " time.sleep(1) # 下拉完等1秒\n", - " Log(\"下拉完等待1秒\")\n", - " body = browser.find_element_by_css_selector(\"body\")\n", - " body.send_keys(Keys.END)\n", - " except TimeoutException:\n", - " Log('time out after 10 seconds when scrolling. ')\n", - " recordLog('time out after 10 seconds when scrolling')\n", - " browser.execute_script('window.stop()')\n", - " if para[\"scrollType\"] != 0 and para[\"scrollCount\"] > 0: # 控制屏幕向下滚动\n", - " for i in range(para[\"scrollCount\"]):\n", - " time.sleep(1) # 下拉完等1秒\n", - " Log(\"下拉完等待1秒\")\n", - " body = browser.find_element_by_css_selector(\"body\")\n", - " body.send_keys(Keys.END)\n", - " if containJudge: #有判断语句才执行以下操作\n", - " global bodyText # 每次执行点击,输入元素和打开网页操作后,需要更新bodyText\n", - " try:\n", - " bodyText = browser.find_element_by_css_selector(\"body\").text\n", - " except TimeoutException:\n", - " Log('time out after 10 seconds when getting body text')\n", - " recordLog('time out after 10 seconds when getting body text')\n", - " browser.execute_script('window.stop()')\n", - " time.sleep(1)\n", - " Log(\"bodytext等待1秒\")\n", - " # 再执行一遍\n", - " bodyText = browser.find_element_by_css_selector(\"body\").text\n", - " except Exception as e:\n", - " Log(e)\n", - " recordLog(str(e))\n", - "\n", - "\n", - "# 提取数据事件\n", - "def getData(para, loopElement, isInLoop=True):\n", - " if not isInLoop and para[\"wait\"] == 0:\n", - " time.sleep(1) # 如果提取数据字段不在循环内而且设置的等待时间为0,默认等待1秒\n", - " Log(\"提取数据等待1秒\")\n", - " for p in para[\"paras\"]:\n", - " content = \"\"\n", - " try:\n", - " if p[\"relative\"]: # 是否相对xpath\n", - " if p[\"relativeXpath\"] == \"\": # 相对xpath有时候就是元素本身,不需要二次查找\n", - " element = loopElement\n", - " else:\n", - " element = loopElement.find_element_by_xpath(p[\"relativeXpath\"][1:])\n", - " else:\n", - " element = browser.find_element_by_xpath(p[\"relativeXpath\"])\n", - " except NoSuchElementException: # 找不到元素的时候,使用默认值\n", - " outputParameters[p[\"name\"]] = p[\"default\"]\n", - " Log('Element not found,use default')\n", - " recordLog('Element not found,use default')\n", - " continue\n", - " except TimeoutException: #超时的时候设置超时值\n", - " Log('time out after 10 seconds when getting data')\n", - " recordLog('time out after 10 seconds when getting data')\n", - " browser.execute_script('window.stop()')\n", - " if p[\"relative\"]: # 是否相对xpath\n", - " if p[\"relativeXpath\"] == \"\": # 相对xpath有时候就是元素本身,不需要二次查找\n", - " element = loopElement\n", - " else:\n", - " element = loopElement.find_element_by_xpath(p[\"relativeXpath\"][1:])\n", - " else:\n", - " element = browser.find_element_by_xpath(p[\"relativeXpath\"])\n", - " if p[\"contentType\"] == 2:\n", - " content = element.get_attribute('innerHTML')\n", - " elif p[\"contentType\"] == 3:\n", - " content = element.get_attribute('outerHTML')\n", - " elif p[\"contentType\"] == 1: # 只采集当期元素下的文本,不包括子元素\n", - " command = 'var arr = [];\\\n", - " var content = arguments[0];\\\n", - " for(var i = 0, len = content.childNodes.length; i < len; i++) {\\\n", - " if(content.childNodes[i].nodeType === 3){ \\\n", - " arr.push(content.childNodes[i].nodeValue);\\\n", - " }\\\n", - " }\\\n", - " var str = arr.join(\"\"); \\\n", - " return str;'\n", - " content = browser.execute_script(command, element).replace(\" \", \"\").replace(\"\\n\", \"\")\n", - " if p[\"nodeType\"] == 2:\n", - " if element.get_attribute(\"href\") != None:\n", - " content = element.get_attribute(\"href\")\n", - " else:\n", - " content = \"\"\n", - " elif p[\"nodeType\"] == 3:\n", - " if element.get_attribute(\"value\") != None:\n", - " content = element.get_attribute(\"value\")\n", - " else:\n", - " content = \"\"\n", - " elif p[\"nodeType\"] == 4: # 图片\n", - " if element.get_attribute(\"src\") != None:\n", - " content = element.get_attribute(\"src\")\n", - " else:\n", - " content = \"\"\n", - " elif p[\"contentType\"] == 0:\n", - " content = element.text\n", - " if p[\"nodeType\"] == 2:\n", - " if element.get_attribute(\"href\") != None:\n", - " content = element.get_attribute(\"href\")\n", - " else:\n", - " content = \"\"\n", - " elif p[\"nodeType\"] == 3:\n", - " if element.get_attribute(\"value\") != None:\n", - " content = element.get_attribute(\"value\")\n", - " else:\n", - " content = \"\"\n", - " elif p[\"nodeType\"] == 4: # 图片\n", - " if element.get_attribute(\"src\") != None:\n", - " content = element.get_attribute(\"src\")\n", - " else:\n", - " content = \"\"\n", - " outputParameters[p[\"name\"]] = content\n", - " global OUTPUT\n", - " line = []\n", - " for value in outputParameters.values():\n", - " line.append(value)\n", - " print(value[:15], \" \", end=\"\")\n", - " print(\"\")\n", - " OUTPUT.append(line)\n", - "\n", - "\n", - "# 判断字段是否为空\n", - "def isnull(s):\n", - " return len(s) != 0" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## 核心代码执行部分,只需要修改id为taskid即可" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "if __name__ == '__main__':\n", - " browser = webdriver.Chrome();\n", - " browser.get('about:blank')\n", - " browser.set_page_load_timeout(10) # 加载页面最大超时时间\n", - "\n", - " id = 4 #taskId这里修改\n", - "\n", - " saveName = \"task_\" + str(id) + \"_\" + str(random.randint(0, 999999999)) # 保存文件的名字\n", - " content = requests.get(\"http://183.129.170.180:8041/backEnd/queryTask?id=\" + str(id))\n", - " service = json.loads(content.text) # 加载服务信息\n", - " procedure = service[\"graph\"] # 程序执行流程\n", - " links = list(filter(isnull, service[\"links\"].split(\"\\n\"))) # 要执行的link的列表\n", - " OUTPUT = [] # 采集的数据\n", - " OUTPUT.append([]) # 添加表头\n", - " containJudge = service[\"containJudge\"] #是否含有判断语句\n", - " bodyText = \"\" # 记录bodyText\n", - " tOut = service[\"outputParameters\"] # 生成输出参数对象\n", - " outputParameters = {}\n", - " log = \"\" # 记下现在总共开了多少个标签页\n", - " history = {\"index\":0,\"handle\":None} #记录页面现在所以在的历史记录的位置\n", - " for para in tOut:\n", - " outputParameters[para[\"name\"]] = \"\"\n", - " OUTPUT[0].append(para[\"name\"])\n", - " # 挨个执行程序\n", - " urlId = 0 # 全局记录变量\n", - " for i in range(len(links)):\n", - " excuteNode(0)\n", - " urlId = urlId + 1\n", - " print(\"执行完成!\")\n", - " recordLog(\"Done!\")\n", - " with open(saveName + '_log.txt', 'w',encoding='utf-8-sig') as file_obj:\n", - " file_obj.write(log)\n", - " file_obj.close()\n", - " with open(saveName + '.csv', 'w', encoding='utf-8-sig', newline=\"\") as f:\n", - " f_csv = csv.writer(f)\n", - " for line in OUTPUT:\n", - " f_csv.writerow(line)\n", - " f.close()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# node = procedure[9]\n", - "# excuteOnce(node)\n", - "OUTPUT" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "<div class=\"blo \n", - "执行完成!\n" - ] - } - ], - "source": [ - "if __name__ == '__main__':\n", - " browser = webdriver.Chrome();\n", - " browser.get('about:blank')\n", - " browser.set_page_load_timeout(10) # 加载页面最大超时时间\n", - "\n", - " id = 4 #taskId这里修改\n", - "\n", - " saveName = \"task_\" + str(id) + \"_\" + str(random.randint(0, 999999999)) # 保存文件的名字\n", - " content = requests.get(\"http://183.129.170.180:8041/backEnd/queryTask?id=\" + str(id))\n", - " service = json.loads(content.text) # 加载服务信息\n", - " procedure = service[\"graph\"] # 程序执行流程\n", - " links = list(filter(isnull, service[\"links\"].split(\"\\n\"))) # 要执行的link的列表\n", - " OUTPUT = [] # 采集的数据\n", - " OUTPUT.append([]) # 添加表头\n", - " containJudge = service[\"containJudge\"] #是否含有判断语句\n", - " bodyText = \"\" # 记录bodyText\n", - " tOut = service[\"outputParameters\"] # 生成输出参数对象\n", - " outputParameters = {}\n", - " log = \"\" # 记下现在总共开了多少个标签页\n", - " history = {\"index\":0,\"handle\":None} #记录页面现在所以在的历史记录的位置\n", - " for para in tOut:\n", - " outputParameters[para[\"name\"]] = \"\"\n", - " OUTPUT[0].append(para[\"name\"])\n", - " # 挨个执行程序\n", - " urlId = 0 # 全局记录变量\n", - " for i in range(len(links)):\n", - " excuteNode(0)\n", - " urlId = urlId + 1\n", - " print(\"执行完成!\")\n", - " recordLog(\"Done!\")\n", - " with open(saveName + '_log.txt', 'w',encoding='utf-8-sig') as file_obj:\n", - " file_obj.write(log)\n", - " file_obj.close()\n", - " with open(saveName + '.csv', 'w', encoding='utf-8-sig', newline=\"\") as f:\n", - " f_csv = csv.writer(f)\n", - " for line in OUTPUT:\n", - " f_csv.writerow(line)\n", - " f.close()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%% 测试单个函数\n" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[['参数1_outerHTML'],\n", - " ['<div class=\"blog-content-box\">\\n <div class=\"article-header-box\">\\n <div class=\"article-header\">\\n <div class=\"article-title-box\">\\n <h1 class=\"title-article\">该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的解决办法</h1>\\n </div>\\n <div class=\"article-info-box\">\\n <div class=\"article-bar-top\">\\n <!--文章类型-->\\n <span class=\"article-type type-1 float-left\">原创</span> <a class=\"follow-nickName\" href=\"https://me.csdn.net/gexiaochao\" target=\"_blank\" rel=\"noopener\">葛小勺</a>\\n <span class=\"time\">最后发布于2019-03-22 17:28:27 </span>\\n <span class=\"read-count\">阅读数 17488</span>\\n <a id=\"blog_detail_zk_collection\" data-report-click=\"{"mod":"popu_823"}\">\\n <svg class=\"icon\">\\n <use xlink:href=\"#icon-csdnc-Collection-G\"></use>\\n </svg>\\n 收藏\\n </a>\\n </div>\\n <div class=\"up-time\">发布于2019-03-22 17:28:27</div>\\n <div class=\"slide-content-box\">\\n <div class=\"tags-box artic-tag-box\">\\n <span class=\"label\">分类专栏:</span>\\n <a class=\"tag-link\" target=\"_blank\" rel=\"noopener\" href=\"https://blog.csdn.net/gexiaochao/category_6923169.html\">\\n 计算机网络 </a>\\n </div>\\n <div class=\"article-copyright\">\\n <span class=\"creativecommons\">\\n <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\"></a>\\n <span>\\n 版权声明:本文为博主原创文章,遵循<a href=\"http://creativecommons.org/licenses/by-sa/4.0/\" target=\"_blank\" rel=\"noopener\"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。 </span>\\n <div class=\"article-source-link2222\">\\n 本文链接:<a href=\"https://blog.csdn.net/gexiaochao/article/details/88746278\">https://blog.csdn.net/gexiaochao/article/details/88746278</a>\\n </div>\\n </span> \\n </div>\\n </div>\\n <div class=\"operating\">\\n <a class=\"href-article-edit slide-toggle\">展开</a>\\n </div>\\n </div>\\n </div>\\n </div>\\n <article class=\"baidu_pl\">\\n <!--python安装手册开始-->\\n <!--python安装手册结束-->\\n <!--####专栏广告位图文切换开始-->\\n <!--####专栏广告位图文切换结束-->\\n <div id=\"article_content\" class=\"article_content clearfix\">\\n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css\">\\n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css\">\\n <div class=\"htmledit_views\" id=\"content_views\">\\n <p>如何解决该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的</p>\\n\\n<p>在使用Google插件的时候,出现了这个问题,当时是直接下载的crx文件,然后拖拽到浏览器中进行安装的,过了不久,这个插件并不能进行使用了。<br>\\n出现:</p>\\n\\n<p>如何解决<br>\\n该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的<br>\\n-------------------</p>\\n\\n<p>方法一</p>\\n\\n<p>1、首先把需要安装的第三方插件,后缀.crx 改成 .rar,然后解压,得到一个文件夹<br>\\n2、再打开chrome://extensions/谷歌扩展应用管理,点击右上角的开发者模式,就可以看到“加载正在开发的扩展程序”这一选项。<br>\\n3、选择刚才步骤1中解压好的文件夹,确定<br>\\n4、确认新增扩展程序,点击添加,成功添加应用程序。</p>\\n\\n<p>如出现如图情况</p>\\n\\n<p><img alt=\"\" class=\"has\" height=\"183\" src=\"https://img-blog.csdnimg.cn/20190322173309261.png\" width=\"642\"></p>\\n\\n<p>出现这种情况Chrome浏览器会提示无法加载以下来源的扩展程序: xxx路径(Chrome插件文件的解压位置)Cannot load extension with file or directory name _metadata. Filenames starting with \"_\" are reserved for use by the system.出现这种情况,是因为这款Chrome插件与新版的Chrome浏览器有些不兼容,这时候,用户可以打开刚刚解压的Chrome插件文件夹,并把其中_metadata文件夹的名字修改为metadata(把前面的下划线去掉),如图所示:</p>\\n\\n<p><img alt=\"\" class=\"has\" height=\"166\" src=\"https://img-blog.csdnimg.cn/20190322173431209.png\" width=\"630\"></p>\\n\\n<p>更新文件夹名称成功以后,点击该错误提示下方的“重试”按钮,就可以成功地把Chrome插件加载谷歌浏览器中了,如图所示</p>\\n\\n<p><img alt=\"\" class=\"has\" src=\"https://img-blog.csdnimg.cn/20190322173504497.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dleGlhb2NoYW8=,size_16,color_FFFFFF,t_70\"></p>\\n\\n<p>基于这种模式安装的chrome插件会因为用户启用了开发者模式而遭到谷歌的警告,用户可以选择忽略Chrome的警告<br>\\n--------------------- </p>\\n\\n<p>方法二</p>\\n\\n<p>运行中输入“gpedit.msc” ,打开 本地策略组 ,导入chrome.adm,再被禁用的插件ID复制下来,依次找到:Google Chrome→扩展程序→配置扩展程序白名单,将刚才的复制的ID粘贴进去,操作如图:<br><img alt=\"\" class=\"has\" src=\"https://img-blog.csdnimg.cn/20190322172648864.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dleGlhb2NoYW8=,size_16,color_FFFFFF,t_70\"></p>\\n\\n<p><img alt=\"\" class=\"has\" src=\"https://img-blog.csdnimg.cn/20190322172814111.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dleGlhb2NoYW8=,size_16,color_FFFFFF,t_70\"></p>\\n\\n<p>操作完后,再回到chrome扩展列表页面,可以看到被禁用的扩展,右侧启用的选项已变成可勾选状态,勾选启用该扩展即可!!</p>\\n </div>\\n <div class=\"more-toolbox\">\\n <div class=\"left-toolbox\">\\n <ul class=\"toolbox-list\">\\n \\n <li class=\"tool-item tool-active is-like \"><a href=\"javascript:;\"><svg class=\"icon\" aria-hidden=\"true\">\\n <use xlink:href=\"#csdnc-thumbsup\"></use>\\n </svg><span class=\"name\">点赞</span>\\n <span class=\"count\">4</span>\\n </a></li>\\n <li class=\"tool-item tool-active is-collection \"><a href=\"javascript:;\" data-report-click=\"{"mod":"popu_824"}\"><svg class=\"icon\" aria-hidden=\"true\">\\n <use xlink:href=\"#icon-csdnc-Collection-G\"></use>\\n </svg><span class=\"name\">收藏</span></a></li>\\n <li class=\"tool-item tool-active is-share\"><a href=\"javascript:;\" data-report-click=\"{"mod":"1582594662_002"}\"><svg class=\"icon\" aria-hidden=\"true\">\\n <use xlink:href=\"#icon-csdnc-fenxiang\"></use>\\n </svg>分享</a></li>\\n <!--打赏开始-->\\n <!--打赏结束-->\\n <li class=\"tool-item tool-more\">\\n <a>\\n <svg t=\"1575545411852\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5717\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"200\" height=\"200\"><defs><style type=\"text/css\"></style></defs><path d=\"M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z\" p-id=\"5718\"></path><path d=\"M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z\" p-id=\"5719\"></path><path d=\"M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z\" p-id=\"5720\"></path></svg>\\n </a>\\n <ul class=\"more-box\">\\n <li class=\"item\"><a class=\"article-report\">文章举报</a></li>\\n </ul>\\n </li>\\n </ul>\\n </div>\\n </div>\\n <div class=\"person-messagebox\">\\n <div class=\"left-message\"><a href=\"https://blog.csdn.net/gexiaochao\">\\n <img src=\"https://profile.csdnimg.cn/6/9/B/3_gexiaochao\" class=\"avatar_pic\" username=\"gexiaochao\">\\n <img src=\"https://g.csdnimg.cn/static/user-reg-year/1x/7.png\" class=\"user-years\">\\n </a></div>\\n <div class=\"middle-message\">\\n <div class=\"title\"><span class=\"tit\"><a href=\"https://blog.csdn.net/gexiaochao\" data-report-click=\"{"mod":"popu_379"}\" target=\"_blank\">葛小勺</a></span>\\n </div>\\n <div class=\"text\"><span>发布了6 篇原创文章</span> · <span>获赞 8</span> · <span>访问量 11万+</span></div>\\n </div>\\n <div class=\"right-message\">\\n <a href=\"https://im.csdn.net/im/main.html?userName=gexiaochao\" target=\"_blank\" class=\"btn btn-sm btn-red-hollow bt-button personal-letter\">私信\\n </a>\\n <a class=\"btn btn-sm bt-button personal-watch\" data-report-click=\"{"mod":"popu_379"}\">关注</a>\\n </div>\\n </div>\\n </div>\\n </article>\\n \\n</div>']]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# node = procedure[9]\n", - "# excuteOnce(node)\n", - "OUTPUT" - ] - }, - { - "cell_type": "code", - "execution_count": 192, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "参数1_链接文本 参数2_链接地址 参数3_图片地址 参数4_文本 参数5_文本 参数6_文本 \n", - "\n", - "通用新闻资讯接口\n", - "¥ 3.00 元/10 https://www.idataapi https://www.idataapi 通用新闻资讯接口 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(23909) \n", - "\n", - "新浪微博\n", - "¥ 1.00 元/100 次\n", - " https://www.idataapi https://www.idataapi 新浪微博 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(12605) \n", - "\n", - "通用酒店数据接口\n", - "免费\n", - "使用人数(971 https://www.idataapi https://www.idataapi 通用酒店数据接口 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(9718) \n", - "\n", - "微信公众号\n", - "¥ 1.00 元/100 次 https://www.idataapi https://www.idataapi 微信公众号 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(1137) \n", - "\n", - "天猫\n", - "¥ 3.00 元/100 次\n", - "使用 https://www.idataapi https://www.idataapi 天猫 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(601) \n", - "\n", - "今日头条\n", - "¥ 0.50 元/100 次\n", - " https://www.idataapi https://www.idataapi 今日头条 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥0. 使用人数(520) \n", - "\n", - "小红书\n", - "¥ 1.00 元/100 次\n", - "使 https://www.idataapi https://www.idataapi 小红书 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(470) \n", - "\n", - "京东商城\n", - "¥ 1.00 元/100 次\n", - " https://www.idataapi https://www.idataapi 京东商城 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(275) \n", - "\n", - "携程\n", - "¥ 1.00 元/100 次\n", - "使用 https://www.idataapi https://www.idataapi 携程 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(250) \n", - "\n", - "饿了么\n", - "¥ 3.00 元/100 次\n", - "使 https://www.idataapi https://www.idataapi 饿了么 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(178) \n", - "\n", - "360新闻\n", - "免费\n", - "使用人数(3380)\n", - " https://www.idataapi https://www.idataapi 360新闻 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(3380) \n", - "\n", - "中文分词\n", - "免费\n", - "使用人数(1754)\n", - "文 https://www.idataapi https://www.idataapi 中文分词 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(1754) \n", - "\n", - "微信公众号文章link版\n", - "¥ 1.00 https://www.idataapi https://www.idataapi 微信公众号文章link版 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(1109) \n", - "\n", - "微信公众号文章高级版\n", - "¥ 3.00 元/ https://www.idataapi https://www.idataapi 微信公众号文章高级版 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(1013) \n", - "\n", - "微信公众号文章专业版(关键词)\n", - "¥ 2. https://www.idataapi https://www.idataapi 微信公众号文章专业版(关键词) \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥2. 使用人数(946) \n", - "\n", - "餐饮类情感分析语料\n", - "¥ 0.01 元\n", - "使 https://www.idataapi https://www.idataapi 餐饮类情感分析语料 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥0. 使用人数(515) \n", - "\n", - "谷歌验证码识别训练集数据\n", - "¥ 0.01 https://www.idataapi https://www.idataapi 谷歌验证码识别训练集数据 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥0. 使用人数(301) \n", - "\n", - "微信20180320特定信息\n", - "¥ 500 https://www.idataapi https://www.idataapi 微信20180320特定信息 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥50 使用人数(4) \n", - "\n", - "微信公众号房地产3月份文章\n", - "¥ 800. https://www.idataapi https://www.idataapi 微信公众号房地产3月份文章 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥80 使用人数(3) \n", - "\n", - "专辑数据-2018\n", - "¥ 1000.00 https://www.idataapi https://www.idataapi 专辑数据-2018 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥10 使用人数(2) \n", - "\n", - "单曲数据-2018\n", - "¥ 2000.00 https://www.idataapi https://www.idataapi 单曲数据-2018 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥20 使用人数(2) \n", - "\n", - "天猫定制数据2018\n", - "¥ 3000.00 https://www.idataapi https://www.idataapi 天猫定制数据2018 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥30 使用人数(2) \n", - "\n", - "甜品店铺信息-2018.3.30\n", - "¥ 1 https://www.idataapi https://www.idataapi 甜品店铺信息-2018.3.30 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥15 使用人数(2) \n", - "\n", - "甜品店铺对应商品信息\n", - "¥ 1500.00 https://www.idataapi https://www.idataapi 甜品店铺对应商品信息 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥15 使用人数(2) \n", - "\n", - "电影,电视剧及图书短评语料\n", - "¥ 4000 https://www.idataapi https://www.idataapi 电影,电视剧及图书短评语料 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥40 使用人数(2) \n", - "\n", - "综艺数据-2018\n", - "¥ 1000.00 https://www.idataapi https://www.idataapi 综艺数据-2018 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥10 使用人数(2) \n", - "\n", - "创业数据库\n", - "¥ 190000.00 元\n", - " https://www.idataapi https://www.idataapi 创业数据库 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥19 使用人数(1) \n", - "\n", - "中国餐馆词库\n", - "¥ 20000.00 元\n", - " https://www.idataapi https://www.idataapi 中国餐馆词库 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥20 使用人数(0) \n", - "\n", - "通用新闻资讯接口\n", - "¥ 3.00 元/10 https://www.idataapi https://www.idataapi 通用新闻资讯接口 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(23909) \n", - "\n", - "新浪微博\n", - "¥ 1.00 元/100 次\n", - " https://www.idataapi https://www.idataapi 新浪微博 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(12605) \n", - "\n", - "通用酒店数据接口\n", - "免费\n", - "使用人数(971 https://www.idataapi https://www.idataapi 通用酒店数据接口 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(9718) \n", - "\n", - "微信公众号\n", - "¥ 1.00 元/100 次 https://www.idataapi https://www.idataapi 微信公众号 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(1137) \n", - "\n", - "天猫\n", - "¥ 3.00 元/100 次\n", - "使用 https://www.idataapi https://www.idataapi 天猫 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(600) \n", - "\n", - "今日头条\n", - "¥ 0.50 元/100 次\n", - " https://www.idataapi https://www.idataapi 今日头条 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥0. 使用人数(520) \n", - "\n", - "小红书\n", - "¥ 1.00 元/100 次\n", - "使 https://www.idataapi https://www.idataapi 小红书 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(470) \n", - "\n", - "京东商城\n", - "¥ 1.00 元/100 次\n", - " https://www.idataapi https://www.idataapi 京东商城 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(275) \n", - "\n", - "携程\n", - "¥ 1.00 元/100 次\n", - "使用 https://www.idataapi https://www.idataapi 携程 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(250) \n", - "\n", - "饿了么\n", - "¥ 3.00 元/100 次\n", - "使 https://www.idataapi https://www.idataapi 饿了么 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(178) \n", - "\n", - "360新闻\n", - "免费\n", - "使用人数(3380)\n", - " https://www.idataapi https://www.idataapi 360新闻 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(3380) \n", - "\n", - "中文分词\n", - "免费\n", - "使用人数(1754)\n", - "文 https://www.idataapi https://www.idataapi 中文分词 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(1754) \n", - "\n", - "微信公众号文章link版\n", - "¥ 1.00 https://www.idataapi https://www.idataapi 微信公众号文章link版 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(1109) \n", - "\n", - "微信公众号文章高级版\n", - "¥ 3.00 元/ https://www.idataapi https://www.idataapi 微信公众号文章高级版 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(1013) \n", - "\n", - "微信公众号文章专业版(关键词)\n", - "¥ 2. https://www.idataapi https://www.idataapi 微信公众号文章专业版(关键词) \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥2. 使用人数(946) \n", - "\n", - "通用新闻资讯接口\n", - "¥ 3.00 元/10 https://www.idataapi https://www.idataapi 通用新闻资讯接口 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(23909) \n", - "\n", - "新浪微博\n", - "¥ 1.00 元/100 次\n", - " https://www.idataapi https://www.idataapi 新浪微博 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(12605) \n", - "\n", - "通用酒店数据接口\n", - "免费\n", - "使用人数(971 https://www.idataapi https://www.idataapi 通用酒店数据接口 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(9718) \n", - "\n", - "微信公众号\n", - "¥ 1.00 元/100 次 https://www.idataapi https://www.idataapi 微信公众号 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(1137) \n", - "\n", - "天猫\n", - "¥ 3.00 元/100 次\n", - "使用 https://www.idataapi https://www.idataapi 天猫 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(600) \n", - "\n", - "今日头条\n", - "¥ 0.50 元/100 次\n", - " https://www.idataapi https://www.idataapi 今日头条 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥0. 使用人数(520) \n", - "\n", - "小红书\n", - "¥ 1.00 元/100 次\n", - "使 https://www.idataapi https://www.idataapi 小红书 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(470) \n", - "\n", - "京东商城\n", - "¥ 1.00 元/100 次\n", - " https://www.idataapi https://www.idataapi 京东商城 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(275) \n", - "\n", - "携程\n", - "¥ 1.00 元/100 次\n", - "使用 https://www.idataapi https://www.idataapi 携程 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(250) \n", - "\n", - "饿了么\n", - "¥ 3.00 元/100 次\n", - "使 https://www.idataapi https://www.idataapi 饿了么 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(178) \n", - "\n", - "360新闻\n", - "免费\n", - "使用人数(3380)\n", - " https://www.idataapi https://www.idataapi 360新闻 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(3380) \n", - "\n", - "中文分词\n", - "免费\n", - "使用人数(1754)\n", - "文 https://www.idataapi https://www.idataapi 中文分词 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t免费\t\t 使用人数(1754) \n", - "\n", - "微信公众号文章link版\n", - "¥ 1.00 https://www.idataapi https://www.idataapi 微信公众号文章link版 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥1. 使用人数(1109) \n", - "\n", - "微信公众号文章高级版\n", - "¥ 3.00 元/ https://www.idataapi https://www.idataapi 微信公众号文章高级版 \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥3. 使用人数(1013) \n", - "\n", - "微信公众号文章专业版(关键词)\n", - "¥ 2. https://www.idataapi https://www.idataapi 微信公众号文章专业版(关键词) \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t¥2. 使用人数(946) \n", - "\n" - ] - } - ], - "source": [ - "for i in OUTPUT:\n", - " for j in i:\n", - " print(j[:20],\" \",end=\"\")\n", - " print(\"\\n\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "source": [], - "metadata": { - "collapsed": false - } - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file diff --git a/ExecuteStage/Readme.md b/ExecuteStage/Readme.md index d9f93be1..85429d40 100644 --- a/ExecuteStage/Readme.md +++ b/ExecuteStage/Readme.md @@ -1 +1,7 @@ -出现permission denied请关闭杀毒软件 \ No newline at end of file +出现permission denied请关闭杀毒软件 +先安装python3.6及以上版本 +然后安装pip3 +然后安装依赖库: pip3 install -r requirements.txt +然后运行:python3 easyspider_executestage.py即可运行 + +打包说明: windows直接运行generateEXE.cmd即可打包成exe文件 \ No newline at end of file diff --git a/ExecuteStage/easyspider_executestage.py b/ExecuteStage/easyspider_executestage.py index 4e34b5f8..433a8da7 100644 --- a/ExecuteStage/easyspider_executestage.py +++ b/ExecuteStage/easyspider_executestage.py @@ -21,10 +21,11 @@ from selenium.common.exceptions import StaleElementReferenceException from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import random -import numpy +# import numpy import csv import os from selenium.webdriver.common.by import By +from commandline_config import Config saveName, log, OUTPUT, browser, SAVED = None, "", "", None, False @@ -109,6 +110,7 @@ def excuteNode(nodeId, loopValue="", clickPath="", index=0): recordLog("getData") getData(node["parameters"], loopValue, node["isInLoop"], parentPath=clickPath, index=index) + saveData() elif node["option"] == 4: # 输入文字 inputInfo(node["parameters"], loopValue) elif node["option"] == 8: # 循环 @@ -646,24 +648,38 @@ def isnull(s): return len(s) != 0 -@atexit.register -def clean(): - global saveName, log, OUTPUT, browser, SAVED - if not SAVED: - print('Clear Environment and save data') - with open("Data/"+saveName + '_log.txt', 'w', encoding='utf-8-sig') as file_obj: +def saveData(exit=False): + global saveName, log, OUTPUT, browser + if exit == True or len(OUTPUT) > 100: # 每100条保存一次 + with open("Data/"+saveName + '_log.txt', 'a', encoding='utf-8-sig') as file_obj: file_obj.write(log) file_obj.close() - with open("Data/"+saveName + '.csv', 'w', encoding='utf-8-sig', newline="") as f: + with open("Data/"+saveName + '.csv', 'a', encoding='utf-8-sig', newline="") as f: f_csv = csv.writer(f) for line in OUTPUT: f_csv.writerow(line) f.close() - browser.quit() - sys.exit(saveName + '.csv') + OUTPUT = [] + log = "" + +@atexit.register +def clean(): + global saveName, log, OUTPUT, browser, SAVED + saveData(exit=True) + browser.quit() + sys.exit(saveName + '.csv') if __name__ == '__main__': + config = { + "id": 0, + "server_address": "http://localhost:8074", + "saved_file_name": "", + "read_type": "remote", + "user_data_folder": "", + } + c = Config(config) + print(c) options = Options() driver_path = "chromedriver.exe" import platform @@ -671,14 +687,19 @@ def clean(): option = webdriver.ChromeOptions() if not os.path.exists(os.getcwd()+"/Data"): os.mkdir(os.getcwd()+"/Data") - if os.path.exists(os.getcwd()+"/EasySpider/resources"): + if os.path.exists(os.getcwd()+"/EasySpider/resources"): # 打包后的路径 print("Finding chromedriver in EasySpider", os.getcwd()+"/EasySpider") - if sys.platform == "win32": + if sys.platform == "win32" and platform.architecture()[0] == "32bit": options.binary_location = os.path.join( os.getcwd(), "EasySpider/resources/app/chrome_win32/chrome.exe") # 指定chrome位置 driver_path = os.path.join( os.getcwd(), "EasySpider/resources/app/chrome_win32/chromedriver_win32.exe") + elif sys.platform == "win32" and platform.architecture()[0] == "64bit": + options.binary_location = os.path.join( + os.getcwd(), "EasySpider/resources/app/chrome_win64/chrome.exe") + driver_path = os.path.join( + os.getcwd(), "EasySpider/resources/app/chrome_win64/chromedriver_win64.exe") elif sys.platform == "linux" and platform.architecture()[0] == "64bit": options.binary_location = "EasySpider/resources/app/chrome_linux64/chrome" driver_path = "EasySpider/resources/app/chrome_linux64/chromedriver_linux64" @@ -692,19 +713,26 @@ def clean(): sys.exit() print("Chrome location:", options.binary_location) print("Chromedriver location:", driver_path) - elif os.path.exists(os.getcwd()+"/Debug"): - print("Finding chromedriver in EasySpider", - os.getcwd()+"/Debug") - option.binary_location = "Debug/Chrome/chrome.exe" # 指定chrome位置 - driver_path = "Debug/Chrome/chromedriver.exe" + elif os.path.exists(os.getcwd()+"/../ElectronJS"): + if os.getcwd().find("ElectronJS") >= 0: # 软件dev用 + print("Finding chromedriver in EasySpider", + os.getcwd()) + option.binary_location = "chrome_win64/chrome.exe" + driver_path = "chrome_win64/chromedriver_win64.exe" + else: # 直接在executeStage文件夹内使用python easyspider_executestage.py时的路径 + print("Finding chromedriver in EasySpider", + os.getcwd()+"/ElectronJS") + option.binary_location = "../ElectronJS/chrome_win64/chrome.exe" # 指定chrome位置 + driver_path = "../ElectronJS/chrome_win64/chromedriver_win64.exe" elif os.getcwd().find("ExecuteStage") >= 0: # 如果直接执行 - print("Finding chromedriver in EasySpider", - os.getcwd()+"/Debug") - options.binary_location = "./Application/chrome.exe" # 指定chrome位置 + print("Finding chromedriver in ./Chrome", + os.getcwd()+"/Chrome") + options.binary_location = "./Chrome/chrome.exe" # 指定chrome位置 # option.binary_location = "C:\\Users\\q9823\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe" - driver_path = "./Application/chromedriver.exe" + driver_path = "./Chrome/chromedriver.exe" else: - options.binary_location = "chrome.exe" # 指定chrome位置 + options.binary_location = "./chrome.exe" # 指定chrome位置 + driver_path = "./chromedriver.exe" option.add_experimental_option( 'excludeSwitches', ['enable-automation']) # 以开发者模式 @@ -719,57 +747,44 @@ def clean(): # 2. User Profile文件夹的路径是:C:\Users\用户名\AppData\Local\Google\Chrome\User Data不要加Default # 3. 就算User Profile相同,chrome版本不同所存储的cookie信息也不同,也不能爬 # 4. TMALL如果一直弹出验证码,而且无法通过验证,那么需要在其他浏览器上用 - if len(sys.argv) > 5: - userdataPath = sys.argv[5] - option.add_argument(f'--user-data-dir={userdataPath}') # TMALL 反扒 + if c.user_data_folder != "": + option.add_argument(f'--user-data-dir={c.user_data_folder}') # TMALL 反扒 option.add_argument("--profile-directory=Default") # options.add_argument( # '--user-data-dir=C:\\Users\\q9823\\AppData\\Local\\Google\\Chrome\\User Data') # TMALL 反扒 option.add_argument( "--disable-blink-features=AutomationControlled") # TMALL 反扒 + options.add_argument("--disable-blink-features=AutomationControlled") # TMALL 反扒 print(options) browser = webdriver.Chrome( options=options, chrome_options=option, executable_path=driver_path) + stealth_path = driver_path[:driver_path.find("chromedriver")] + "stealth.min.js" + with open(stealth_path, 'r') as f: + js = f.read() + print("Loading stealth.min.js") + browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': js}) # TMALL 反扒 + wait = WebDriverWait(browser, 10) browser.get('about:blank') browser.set_page_load_timeout(10) # 加载页面最大超时时间 browser.set_script_timeout(10) - if len(sys.argv) > 1: - id = int(sys.argv[1]) # taskId这里修改 - else: - id = 7 # 设置默认值 - print("id:", id) - if len(sys.argv) > 3: - saveName = "task_" + str(id) + "_" + sys.argv[3] # 保存文件的名字 + id = c.id; + print("id: ", id) + if c.saved_file_name != "": + saveName = "task_" + str(id) + "_" + c.saved_file_name # 保存文件的名字 else: saveName = "task_" + str(id) + "_" + \ str(random.randint(0, 999999999)) # 保存文件的名字 - print("saveName is:", saveName, sys.argv, len(sys.argv) > 2) - if len(sys.argv) > 2: - backEndAddress = sys.argv[2] - else: - backEndAddress = "https://servicewrapper.systems" - - # TODO when transfer to electron, use commandline-config - config = { - "type": "remote", - } - from commandline_config import Config - c = Config(config) - co = c - co = {"type": "remote"} - if len(sys.argv) > 4: - co = sys.argv[4] - if co["type"] == "remote": + backEndAddress = c.server_address + if c.read_type == "remote": print("remote") - content = requests.get( - backEndAddress + "/backEnd/queryTask?id=" + str(id)) + content = requests.get(backEndAddress + "/queryExecutionInstance?id=" + str(id)) else: print("local") with open("tasks/" + str(id) + ".json", 'r', encoding='utf-8') as f: content = f.read() service = json.loads(content.text) # 加载服务信息 - print("name:", service["name"]) + print("name: ", service["name"]) procedure = service["graph"] # 程序执行流程 links = list(filter(isnull, service["links"].split("\n"))) # 要执行的link的列表 OUTPUT = [] # 采集的数据 @@ -792,13 +807,13 @@ def clean(): print("Done!") recordLog("Done!") # dataPath = os.path.abspath(os.path.join(os.getcwd(), "../Data")) - with open("Data/"+saveName + '_log.txt', 'w', encoding='utf-8-sig') as file_obj: - file_obj.write(log) - file_obj.close() - with open("Data/"+saveName + '.csv', 'w', encoding='utf-8-sig', newline="") as f: - f_csv = csv.writer(f) - for line in OUTPUT: - f_csv.writerow(line) - f.close() - SAVED = True + # with open("Data/"+saveName + '_log.txt', 'a', encoding='utf-8-sig') as file_obj: + # file_obj.write(log) + # file_obj.close() + # with open("Data/"+saveName + '.csv', 'a', encoding='utf-8-sig', newline="") as f: + # f_csv = csv.writer(f) + # for line in OUTPUT: + # f_csv.writerow(line) + # f.close() + saveData() browser.quit() diff --git a/ExecuteStage/generateEXE.cmd b/ExecuteStage/generateEXE.cmd deleted file mode 100644 index 2e7ef1b0..00000000 --- a/ExecuteStage/generateEXE.cmd +++ /dev/null @@ -1,3 +0,0 @@ -rmdir /s build -rmdir /s dist -pyinstaller -F --icon=favicon.ico easyspider_executestage.py \ No newline at end of file diff --git a/ExecuteStage/generateEXE_win64.cmd b/ExecuteStage/generateEXE_win64.cmd new file mode 100644 index 00000000..f79e07cf --- /dev/null +++ b/ExecuteStage/generateEXE_win64.cmd @@ -0,0 +1,5 @@ +rmdir /s /q build +rmdir /s /q dist +pyinstaller -F --icon=favicon.ico easyspider_executestage.py +del ..\ElectronJS\chrome_win64\easyspider_executestage.exe +move dist\easyspider_executestage.exe ..\ElectronJS\chrome_win64\easyspider_executestage.exe \ No newline at end of file diff --git a/ExecuteStage/requirements.txt b/ExecuteStage/requirements.txt index 704dd207..86862038 100644 --- a/ExecuteStage/requirements.txt +++ b/ExecuteStage/requirements.txt @@ -4,3 +4,4 @@ pandas==1.5.0 pymongo==4.2.0 requests==2.28.1 selenium==4.5.0 +pyinstaller diff --git a/ExecuteStage/stealth.min.js b/ExecuteStage/stealth.min.js new file mode 100644 index 00000000..107dab2f --- /dev/null +++ b/ExecuteStage/stealth.min.js @@ -0,0 +1,7 @@ +/*! + * Note: Auto-generated, do not update manually. + * Generated by: https://github.com/berstend/puppeteer-extra/tree/master/packages/extract-stealth-evasions + * Generated on: Mon, 20 Mar 2023 06:25:26 GMT + * License: MIT + */ +(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:'utils => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, \'chrome\')`\n Object.defineProperty(window, \'chrome\', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We\'ll extend that later\n })\n }\n\n // That means we\'re running headful and don\'t need to mock anything\n if (\'app\' in window.chrome) {\n return // Nothing to do here\n }\n\n const makeError = {\n ErrorInInvocation: fn => {\n const err = new TypeError(`Error in invocation of app.${fn}()`)\n return utils.stripErrorWithAnchor(\n err,\n `at ${fn} (eval at <anonymous>`\n )\n }\n }\n\n // There\'s a some static data in that property which doesn\'t seem to change,\n // we should periodically check for updates: `JSON.stringify(window.app, null, 2)`\n const STATIC_DATA = JSON.parse(\n `\n{\n "isInstalled": false,\n "InstallState": {\n "DISABLED": "disabled",\n "INSTALLED": "installed",\n "NOT_INSTALLED": "not_installed"\n },\n "RunningState": {\n "CANNOT_RUN": "cannot_run",\n "READY_TO_RUN": "ready_to_run",\n "RUNNING": "running"\n }\n}\n `.trim()\n )\n\n window.chrome.app = {\n ...STATIC_DATA,\n\n get isInstalled() {\n return false\n },\n\n getDetails: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`getDetails`)\n }\n return null\n },\n getIsInstalled: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`getIsInstalled`)\n }\n return false\n },\n runningState: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`runningState`)\n }\n return \'cannot_run\'\n }\n }\n utils.patchToStringNested(window.chrome.app)\n }',_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"utils => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n if ('csi' in window.chrome) {\n return // Nothing to do here\n }\n\n // Check that the Navigation Timing API v1 is available, we need that\n if (!window.performance || !window.performance.timing) {\n return\n }\n\n const { timing } = window.performance\n\n window.chrome.csi = function() {\n return {\n onloadT: timing.domContentLoadedEventEnd,\n startE: timing.navigationStart,\n pageT: Date.now() - timing.navigationStart,\n tran: 15 // Transition type or something\n }\n }\n utils.patchToString(window.chrome.csi)\n }",_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n if ('loadTimes' in window.chrome) {\n return // Nothing to do here\n }\n\n // Check that the Navigation Timing API v1 + v2 is available, we need that\n if (\n !window.performance ||\n !window.performance.timing ||\n !window.PerformancePaintTiming\n ) {\n return\n }\n\n const { performance } = window\n\n // Some stuff is not available on about:blank as it requires a navigation to occur,\n // let's harden the code to not fail then:\n const ntEntryFallback = {\n nextHopProtocol: 'h2',\n type: 'other'\n }\n\n // The API exposes some funky info regarding the connection\n const protocolInfo = {\n get connectionInfo() {\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ntEntry.nextHopProtocol\n },\n get npnNegotiatedProtocol() {\n // NPN is deprecated in favor of ALPN, but this implementation returns the\n // HTTP/2 or HTTP2+QUIC/39 requests negotiated via ALPN.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n ? ntEntry.nextHopProtocol\n : 'unknown'\n },\n get navigationType() {\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ntEntry.type\n },\n get wasAlternateProtocolAvailable() {\n // The Alternate-Protocol header is deprecated in favor of Alt-Svc\n // (https://www.mnot.net/blog/2016/03/09/alt-svc), so technically this\n // should always return false.\n return false\n },\n get wasFetchedViaSpdy() {\n // SPDY is deprecated in favor of HTTP/2, but this implementation returns\n // true for HTTP/2 or HTTP2+QUIC/39 as well.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n },\n get wasNpnNegotiated() {\n // NPN is deprecated in favor of ALPN, but this implementation returns true\n // for HTTP/2 or HTTP2+QUIC/39 requests negotiated via ALPN.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n }\n }\n\n const { timing } = window.performance\n\n // Truncate number to specific number of decimals, most of the `loadTimes` stuff has 3\n function toFixed(num, fixed) {\n var re = new RegExp('^-?\\\\d+(?:.\\\\d{0,' + (fixed || -1) + '})?')\n return num.toString().match(re)[0]\n }\n\n const timingInfo = {\n get firstPaintAfterLoadTime() {\n // This was never actually implemented and always returns 0.\n return 0\n },\n get requestTime() {\n return timing.navigationStart / 1000\n },\n get startLoadTime() {\n return timing.navigationStart / 1000\n },\n get commitLoadTime() {\n return timing.responseStart / 1000\n },\n get finishDocumentLoadTime() {\n return timing.domContentLoadedEventEnd / 1000\n },\n get finishLoadTime() {\n return timing.loadEventEnd / 1000\n },\n get firstPaintTime() {\n const fpEntry = performance.getEntriesByType('paint')[0] || {\n startTime: timing.loadEventEnd / 1000 // Fallback if no navigation occured (`about:blank`)\n }\n return toFixed(\n (fpEntry.startTime + performance.timeOrigin) / 1000,\n 3\n )\n }\n }\n\n window.chrome.loadTimes = function() {\n return {\n ...protocolInfo,\n ...timingInfo\n }\n }\n utils.patchToString(window.chrome.loadTimes)\n }",_args:[{opts:{}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts, STATIC_DATA }) => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n const existsAlready = 'runtime' in window.chrome\n // `chrome.runtime` is only exposed on secure origins\n const isNotSecure = !window.location.protocol.startsWith('https')\n if (existsAlready || (isNotSecure && !opts.runOnInsecureOrigins)) {\n return // Nothing to do here\n }\n\n window.chrome.runtime = {\n // There's a bunch of static data in that property which doesn't seem to change,\n // we should periodically check for updates: `JSON.stringify(window.chrome.runtime, null, 2)`\n ...STATIC_DATA,\n // `chrome.runtime.id` is extension related and returns undefined in Chrome\n get id() {\n return undefined\n },\n // These two require more sophisticated mocks\n connect: null,\n sendMessage: null\n }\n\n const makeCustomRuntimeErrors = (preamble, method, extensionId) => ({\n NoMatchingSignature: new TypeError(\n preamble + `No matching signature.`\n ),\n MustSpecifyExtensionID: new TypeError(\n preamble +\n `${method} called from a webpage must specify an Extension ID (string) for its first argument.`\n ),\n InvalidExtensionID: new TypeError(\n preamble + `Invalid extension id: '${extensionId}'`\n )\n })\n\n // Valid Extension IDs are 32 characters in length and use the letter `a` to `p`:\n // https://source.chromium.org/chromium/chromium/src/+/master:components/crx_file/id_util.cc;drc=14a055ccb17e8c8d5d437fe080faba4c6f07beac;l=90\n const isValidExtensionID = str =>\n str.length === 32 && str.toLowerCase().match(/^[a-p]+$/)\n\n /** Mock `chrome.runtime.sendMessage` */\n const sendMessageHandler = {\n apply: function(target, ctx, args) {\n const [extensionId, options, responseCallback] = args || []\n\n // Define custom errors\n const errorPreamble = `Error in invocation of runtime.sendMessage(optional string extensionId, any message, optional object options, optional function responseCallback): `\n const Errors = makeCustomRuntimeErrors(\n errorPreamble,\n `chrome.runtime.sendMessage()`,\n extensionId\n )\n\n // Check if the call signature looks ok\n const noArguments = args.length === 0\n const tooManyArguments = args.length > 4\n const incorrectOptions = options && typeof options !== 'object'\n const incorrectResponseCallback =\n responseCallback && typeof responseCallback !== 'function'\n if (\n noArguments ||\n tooManyArguments ||\n incorrectOptions ||\n incorrectResponseCallback\n ) {\n throw Errors.NoMatchingSignature\n }\n\n // At least 2 arguments are required before we even validate the extension ID\n if (args.length < 2) {\n throw Errors.MustSpecifyExtensionID\n }\n\n // Now let's make sure we got a string as extension ID\n if (typeof extensionId !== 'string') {\n throw Errors.NoMatchingSignature\n }\n\n if (!isValidExtensionID(extensionId)) {\n throw Errors.InvalidExtensionID\n }\n\n return undefined // Normal behavior\n }\n }\n utils.mockWithProxy(\n window.chrome.runtime,\n 'sendMessage',\n function sendMessage() {},\n sendMessageHandler\n )\n\n /**\n * Mock `chrome.runtime.connect`\n *\n * @see https://developer.chrome.com/apps/runtime#method-connect\n */\n const connectHandler = {\n apply: function(target, ctx, args) {\n const [extensionId, connectInfo] = args || []\n\n // Define custom errors\n const errorPreamble = `Error in invocation of runtime.connect(optional string extensionId, optional object connectInfo): `\n const Errors = makeCustomRuntimeErrors(\n errorPreamble,\n `chrome.runtime.connect()`,\n extensionId\n )\n\n // Behavior differs a bit from sendMessage:\n const noArguments = args.length === 0\n const emptyStringArgument = args.length === 1 && extensionId === ''\n if (noArguments || emptyStringArgument) {\n throw Errors.MustSpecifyExtensionID\n }\n\n const tooManyArguments = args.length > 2\n const incorrectConnectInfoType =\n connectInfo && typeof connectInfo !== 'object'\n\n if (tooManyArguments || incorrectConnectInfoType) {\n throw Errors.NoMatchingSignature\n }\n\n const extensionIdIsString = typeof extensionId === 'string'\n if (extensionIdIsString && extensionId === '') {\n throw Errors.MustSpecifyExtensionID\n }\n if (extensionIdIsString && !isValidExtensionID(extensionId)) {\n throw Errors.InvalidExtensionID\n }\n\n // There's another edge-case here: extensionId is optional so we might find a connectInfo object as first param, which we need to validate\n const validateConnectInfo = ci => {\n // More than a first param connectInfo as been provided\n if (args.length > 1) {\n throw Errors.NoMatchingSignature\n }\n // An empty connectInfo has been provided\n if (Object.keys(ci).length === 0) {\n throw Errors.MustSpecifyExtensionID\n }\n // Loop over all connectInfo props an check them\n Object.entries(ci).forEach(([k, v]) => {\n const isExpected = ['name', 'includeTlsChannelId'].includes(k)\n if (!isExpected) {\n throw new TypeError(\n errorPreamble + `Unexpected property: '${k}'.`\n )\n }\n const MismatchError = (propName, expected, found) =>\n TypeError(\n errorPreamble +\n `Error at property '${propName}': Invalid type: expected ${expected}, found ${found}.`\n )\n if (k === 'name' && typeof v !== 'string') {\n throw MismatchError(k, 'string', typeof v)\n }\n if (k === 'includeTlsChannelId' && typeof v !== 'boolean') {\n throw MismatchError(k, 'boolean', typeof v)\n }\n })\n }\n if (typeof extensionId === 'object') {\n validateConnectInfo(extensionId)\n throw Errors.MustSpecifyExtensionID\n }\n\n // Unfortunately even when the connect fails Chrome will return an object with methods we need to mock as well\n return utils.patchToStringNested(makeConnectResponse())\n }\n }\n utils.mockWithProxy(\n window.chrome.runtime,\n 'connect',\n function connect() {},\n connectHandler\n )\n\n function makeConnectResponse() {\n const onSomething = () => ({\n addListener: function addListener() {},\n dispatch: function dispatch() {},\n hasListener: function hasListener() {},\n hasListeners: function hasListeners() {\n return false\n },\n removeListener: function removeListener() {}\n })\n\n const response = {\n name: '',\n sender: undefined,\n disconnect: function disconnect() {},\n onDisconnect: onSomething(),\n onMessage: onSomething(),\n postMessage: function postMessage() {\n if (!arguments.length) {\n throw new TypeError(`Insufficient number of arguments.`)\n }\n throw new Error(`Attempting to use a disconnected port object`)\n }\n }\n return response\n }\n }",_args:[{opts:{runOnInsecureOrigins:!1},STATIC_DATA:{OnInstalledReason:{CHROME_UPDATE:"chrome_update",INSTALL:"install",SHARED_MODULE_UPDATE:"shared_module_update",UPDATE:"update"},OnRestartRequiredReason:{APP_UPDATE:"app_update",OS_UPDATE:"os_update",PERIODIC:"periodic"},PlatformArch:{ARM:"arm",ARM64:"arm64",MIPS:"mips",MIPS64:"mips64",X86_32:"x86-32",X86_64:"x86-64"},PlatformNaclArch:{ARM:"arm",MIPS:"mips",MIPS64:"mips64",X86_32:"x86-32",X86_64:"x86-64"},PlatformOs:{ANDROID:"android",CROS:"cros",LINUX:"linux",MAC:"mac",OPENBSD:"openbsd",WIN:"win"},RequestUpdateCheckStatus:{NO_UPDATE:"no_update",THROTTLED:"throttled",UPDATE_AVAILABLE:"update_available"}}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"utils => {\n /**\n * Input might look funky, we need to normalize it so e.g. whitespace isn't an issue for our spoofing.\n *\n * @example\n * video/webm; codecs=\"vp8, vorbis\"\n * video/mp4; codecs=\"avc1.42E01E\"\n * audio/x-m4a;\n * audio/ogg; codecs=\"vorbis\"\n * @param {String} arg\n */\n const parseInput = arg => {\n const [mime, codecStr] = arg.trim().split(';')\n let codecs = []\n if (codecStr && codecStr.includes('codecs=\"')) {\n codecs = codecStr\n .trim()\n .replace(`codecs=\"`, '')\n .replace(`\"`, '')\n .trim()\n .split(',')\n .filter(x => !!x)\n .map(x => x.trim())\n }\n return {\n mime,\n codecStr,\n codecs\n }\n }\n\n const canPlayType = {\n // Intercept certain requests\n apply: function(target, ctx, args) {\n if (!args || !args.length) {\n return target.apply(ctx, args)\n }\n const { mime, codecs } = parseInput(args[0])\n // This specific mp4 codec is missing in Chromium\n if (mime === 'video/mp4') {\n if (codecs.includes('avc1.42E01E')) {\n return 'probably'\n }\n }\n // This mimetype is only supported if no codecs are specified\n if (mime === 'audio/x-m4a' && !codecs.length) {\n return 'maybe'\n }\n\n // This mimetype is only supported if no codecs are specified\n if (mime === 'audio/aac' && !codecs.length) {\n return 'probably'\n }\n // Everything else as usual\n return target.apply(ctx, args)\n }\n }\n\n /* global HTMLMediaElement */\n utils.replaceWithProxy(\n HTMLMediaElement.prototype,\n 'canPlayType',\n canPlayType\n )\n }",_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n utils.replaceGetterWithProxy(\n Object.getPrototypeOf(navigator),\n 'hardwareConcurrency',\n utils.makeHandler().getterValue(opts.hardwareConcurrency)\n )\n }",_args:[{opts:{hardwareConcurrency:4}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n const languages = opts.languages.length\n ? opts.languages\n : ['en-US', 'en']\n utils.replaceGetterWithProxy(\n Object.getPrototypeOf(navigator),\n 'languages',\n utils.makeHandler().getterValue(Object.freeze([...languages]))\n )\n }",_args:[{opts:{languages:[]}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n const isSecure = document.location.protocol.startsWith('https')\n\n // In headful on secure origins the permission should be \"default\", not \"denied\"\n if (isSecure) {\n utils.replaceGetterWithProxy(Notification, 'permission', {\n apply() {\n return 'default'\n }\n })\n }\n\n // Another weird behavior:\n // On insecure origins in headful the state is \"denied\",\n // whereas in headless it's \"prompt\"\n if (!isSecure) {\n const handler = {\n apply(target, ctx, args) {\n const param = (args || [])[0]\n\n const isNotifications =\n param && param.name && param.name === 'notifications'\n if (!isNotifications) {\n return utils.cache.Reflect.apply(...arguments)\n }\n\n return Promise.resolve(\n Object.setPrototypeOf(\n {\n state: 'denied',\n onchange: null\n },\n PermissionStatus.prototype\n )\n )\n }\n }\n // Note: Don't use `Object.getPrototypeOf` here\n utils.replaceWithProxy(Permissions.prototype, 'query', handler)\n }\n }",_args:[{}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { fns, data }) => {\n fns = utils.materializeFns(fns)\n\n // That means we're running headful\n const hasPlugins = 'plugins' in navigator && navigator.plugins.length\n if (hasPlugins) {\n return // nothing to do here\n }\n\n const mimeTypes = fns.generateMimeTypeArray(utils, fns)(data.mimeTypes)\n const plugins = fns.generatePluginArray(utils, fns)(data.plugins)\n\n // Plugin and MimeType cross-reference each other, let's do that now\n // Note: We're looping through `data.plugins` here, not the generated `plugins`\n for (const pluginData of data.plugins) {\n pluginData.__mimeTypes.forEach((type, index) => {\n plugins[pluginData.name][index] = mimeTypes[type]\n\n Object.defineProperty(plugins[pluginData.name], type, {\n value: mimeTypes[type],\n writable: false,\n enumerable: false, // Not enumerable\n configurable: true\n })\n Object.defineProperty(mimeTypes[type], 'enabledPlugin', {\n value:\n type === 'application/x-pnacl'\n ? mimeTypes['application/x-nacl'].enabledPlugin // these reference the same plugin, so we need to re-use the Proxy in order to avoid leaks\n : new Proxy(plugins[pluginData.name], {}), // Prevent circular references\n writable: false,\n enumerable: false, // Important: `JSON.stringify(navigator.plugins)`\n configurable: true\n })\n })\n }\n\n const patchNavigator = (name, value) =>\n utils.replaceProperty(Object.getPrototypeOf(navigator), name, {\n get() {\n return value\n }\n })\n\n patchNavigator('mimeTypes', mimeTypes)\n patchNavigator('plugins', plugins)\n\n // All done\n }",_args:[{fns:{generateMimeTypeArray:"(utils, fns) => mimeTypesData => {\n return fns.generateMagicArray(utils, fns)(\n mimeTypesData,\n MimeTypeArray.prototype,\n MimeType.prototype,\n 'type'\n )\n}",generatePluginArray:"(utils, fns) => pluginsData => {\n return fns.generateMagicArray(utils, fns)(\n pluginsData,\n PluginArray.prototype,\n Plugin.prototype,\n 'name'\n )\n}",generateMagicArray:"(utils, fns) =>\n function(\n dataArray = [],\n proto = MimeTypeArray.prototype,\n itemProto = MimeType.prototype,\n itemMainProp = 'type'\n ) {\n // Quick helper to set props with the same descriptors vanilla is using\n const defineProp = (obj, prop, value) =>\n Object.defineProperty(obj, prop, {\n value,\n writable: false,\n enumerable: false, // Important for mimeTypes & plugins: `JSON.stringify(navigator.mimeTypes)`\n configurable: true\n })\n\n // Loop over our fake data and construct items\n const makeItem = data => {\n const item = {}\n for (const prop of Object.keys(data)) {\n if (prop.startsWith('__')) {\n continue\n }\n defineProp(item, prop, data[prop])\n }\n return patchItem(item, data)\n }\n\n const patchItem = (item, data) => {\n let descriptor = Object.getOwnPropertyDescriptors(item)\n\n // Special case: Plugins have a magic length property which is not enumerable\n // e.g. `navigator.plugins[i].length` should always be the length of the assigned mimeTypes\n if (itemProto === Plugin.prototype) {\n descriptor = {\n ...descriptor,\n length: {\n value: data.__mimeTypes.length,\n writable: false,\n enumerable: false,\n configurable: true // Important to be able to use the ownKeys trap in a Proxy to strip `length`\n }\n }\n }\n\n // We need to spoof a specific `MimeType` or `Plugin` object\n const obj = Object.create(itemProto, descriptor)\n\n // Virtually all property keys are not enumerable in vanilla\n const blacklist = [...Object.keys(data), 'length', 'enabledPlugin']\n return new Proxy(obj, {\n ownKeys(target) {\n return Reflect.ownKeys(target).filter(k => !blacklist.includes(k))\n },\n getOwnPropertyDescriptor(target, prop) {\n if (blacklist.includes(prop)) {\n return undefined\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n }\n })\n }\n\n const magicArray = []\n\n // Loop through our fake data and use that to create convincing entities\n dataArray.forEach(data => {\n magicArray.push(makeItem(data))\n })\n\n // Add direct property access based on types (e.g. `obj['application/pdf']`) afterwards\n magicArray.forEach(entry => {\n defineProp(magicArray, entry[itemMainProp], entry)\n })\n\n // This is the best way to fake the type to make sure this is false: `Array.isArray(navigator.mimeTypes)`\n const magicArrayObj = Object.create(proto, {\n ...Object.getOwnPropertyDescriptors(magicArray),\n\n // There's one ugly quirk we unfortunately need to take care of:\n // The `MimeTypeArray` prototype has an enumerable `length` property,\n // but headful Chrome will still skip it when running `Object.getOwnPropertyNames(navigator.mimeTypes)`.\n // To strip it we need to make it first `configurable` and can then overlay a Proxy with an `ownKeys` trap.\n length: {\n value: magicArray.length,\n writable: false,\n enumerable: false,\n configurable: true // Important to be able to use the ownKeys trap in a Proxy to strip `length`\n }\n })\n\n // Generate our functional function mocks :-)\n const functionMocks = fns.generateFunctionMocks(utils)(\n proto,\n itemMainProp,\n magicArray\n )\n\n // We need to overlay our custom object with a JS Proxy\n const magicArrayObjProxy = new Proxy(magicArrayObj, {\n get(target, key = '') {\n // Redirect function calls to our custom proxied versions mocking the vanilla behavior\n if (key === 'item') {\n return functionMocks.item\n }\n if (key === 'namedItem') {\n return functionMocks.namedItem\n }\n if (proto === PluginArray.prototype && key === 'refresh') {\n return functionMocks.refresh\n }\n // Everything else can pass through as normal\n return utils.cache.Reflect.get(...arguments)\n },\n ownKeys(target) {\n // There are a couple of quirks where the original property demonstrates \"magical\" behavior that makes no sense\n // This can be witnessed when calling `Object.getOwnPropertyNames(navigator.mimeTypes)` and the absense of `length`\n // My guess is that it has to do with the recent change of not allowing data enumeration and this being implemented weirdly\n // For that reason we just completely fake the available property names based on our data to match what regular Chrome is doing\n // Specific issues when not patching this: `length` property is available, direct `types` props (e.g. `obj['application/pdf']`) are missing\n const keys = []\n const typeProps = magicArray.map(mt => mt[itemMainProp])\n typeProps.forEach((_, i) => keys.push(`${i}`))\n typeProps.forEach(propName => keys.push(propName))\n return keys\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'length') {\n return undefined\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n }\n })\n\n return magicArrayObjProxy\n }",generateFunctionMocks:"utils => (\n proto,\n itemMainProp,\n dataArray\n) => ({\n /** Returns the MimeType object with the specified index. */\n item: utils.createProxy(proto.item, {\n apply(target, ctx, args) {\n if (!args.length) {\n throw new TypeError(\n `Failed to execute 'item' on '${\n proto[Symbol.toStringTag]\n }': 1 argument required, but only 0 present.`\n )\n }\n // Special behavior alert:\n // - Vanilla tries to cast strings to Numbers (only integers!) and use them as property index lookup\n // - If anything else than an integer (including as string) is provided it will return the first entry\n const isInteger = args[0] && Number.isInteger(Number(args[0])) // Cast potential string to number first, then check for integer\n // Note: Vanilla never returns `undefined`\n return (isInteger ? dataArray[Number(args[0])] : dataArray[0]) || null\n }\n }),\n /** Returns the MimeType object with the specified name. */\n namedItem: utils.createProxy(proto.namedItem, {\n apply(target, ctx, args) {\n if (!args.length) {\n throw new TypeError(\n `Failed to execute 'namedItem' on '${\n proto[Symbol.toStringTag]\n }': 1 argument required, but only 0 present.`\n )\n }\n return dataArray.find(mt => mt[itemMainProp] === args[0]) || null // Not `undefined`!\n }\n }),\n /** Does nothing and shall return nothing */\n refresh: proto.refresh\n ? utils.createProxy(proto.refresh, {\n apply(target, ctx, args) {\n return undefined\n }\n })\n : undefined\n})"},data:{mimeTypes:[{type:"application/pdf",suffixes:"pdf",description:"",__pluginName:"Chrome PDF Viewer"},{type:"application/x-google-chrome-pdf",suffixes:"pdf",description:"Portable Document Format",__pluginName:"Chrome PDF Plugin"},{type:"application/x-nacl",suffixes:"",description:"Native Client Executable",__pluginName:"Native Client"},{type:"application/x-pnacl",suffixes:"",description:"Portable Native Client Executable",__pluginName:"Native Client"}],plugins:[{name:"Chrome PDF Plugin",filename:"internal-pdf-viewer",description:"Portable Document Format",__mimeTypes:["application/x-google-chrome-pdf"]},{name:"Chrome PDF Viewer",filename:"mhjfbmdgcfjbbpaeojofohoefgiehjai",description:"",__mimeTypes:["application/pdf"]},{name:"Native Client",filename:"internal-nacl-plugin",description:"",__mimeTypes:["application/x-nacl","application/x-pnacl"]}]}}]}),!1===navigator.webdriver||void 0===navigator.webdriver||delete Object.getPrototypeOf(navigator).webdriver,(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n const getParameterProxyHandler = {\n apply: function(target, ctx, args) {\n const param = (args || [])[0]\n const result = utils.cache.Reflect.apply(target, ctx, args)\n // UNMASKED_VENDOR_WEBGL\n if (param === 37445) {\n return opts.vendor || 'Intel Inc.' // default in headless: Google Inc.\n }\n // UNMASKED_RENDERER_WEBGL\n if (param === 37446) {\n return opts.renderer || 'Intel Iris OpenGL Engine' // default in headless: Google SwiftShader\n }\n return result\n }\n }\n\n // There's more than one WebGL rendering context\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext#Browser_compatibility\n // To find out the original values here: Object.getOwnPropertyDescriptors(WebGLRenderingContext.prototype.getParameter)\n const addProxy = (obj, propName) => {\n utils.replaceWithProxy(obj, propName, getParameterProxyHandler)\n }\n // For whatever weird reason loops don't play nice with Object.defineProperty, here's the next best thing:\n addProxy(WebGLRenderingContext.prototype, 'getParameter')\n addProxy(WebGL2RenderingContext.prototype, 'getParameter')\n }",_args:[{}]}),(()=>{try{if(window.outerWidth&&window.outerHeight)return;const n=85;window.outerWidth=window.innerWidth,window.outerHeight=window.innerHeight+n}catch(n){}})(),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler.<computed> [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler.<computed> [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n try {\n // Adds a contentWindow proxy to the provided iframe element\n const addContentWindowProxy = iframe => {\n const contentWindowProxy = {\n get(target, key) {\n // Now to the interesting part:\n // We actually make this thing behave like a regular iframe window,\n // by intercepting calls to e.g. `.self` and redirect it to the correct thing. :)\n // That makes it possible for these assertions to be correct:\n // iframe.contentWindow.self === window.top // must be false\n if (key === 'self') {\n return this\n }\n // iframe.contentWindow.frameElement === iframe // must be true\n if (key === 'frameElement') {\n return iframe\n }\n // Intercept iframe.contentWindow[0] to hide the property 0 added by the proxy.\n if (key === '0') {\n return undefined\n }\n return Reflect.get(target, key)\n }\n }\n\n if (!iframe.contentWindow) {\n const proxy = new Proxy(window, contentWindowProxy)\n Object.defineProperty(iframe, 'contentWindow', {\n get() {\n return proxy\n },\n set(newValue) {\n return newValue // contentWindow is immutable\n },\n enumerable: true,\n configurable: false\n })\n }\n }\n\n // Handles iframe element creation, augments `srcdoc` property so we can intercept further\n const handleIframeCreation = (target, thisArg, args) => {\n const iframe = target.apply(thisArg, args)\n\n // We need to keep the originals around\n const _iframe = iframe\n const _srcdoc = _iframe.srcdoc\n\n // Add hook for the srcdoc property\n // We need to be very surgical here to not break other iframes by accident\n Object.defineProperty(iframe, 'srcdoc', {\n configurable: true, // Important, so we can reset this later\n get: function() {\n return _srcdoc\n },\n set: function(newValue) {\n addContentWindowProxy(this)\n // Reset property, the hook is only needed once\n Object.defineProperty(iframe, 'srcdoc', {\n configurable: false,\n writable: false,\n value: _srcdoc\n })\n _iframe.srcdoc = newValue\n }\n })\n return iframe\n }\n\n // Adds a hook to intercept iframe creation events\n const addIframeCreationSniffer = () => {\n /* global document */\n const createElementHandler = {\n // Make toString() native\n get(target, key) {\n return Reflect.get(target, key)\n },\n apply: function(target, thisArg, args) {\n const isIframe =\n args && args.length && `${args[0]}`.toLowerCase() === 'iframe'\n if (!isIframe) {\n // Everything as usual\n return target.apply(thisArg, args)\n } else {\n return handleIframeCreation(target, thisArg, args)\n }\n }\n }\n // All this just due to iframes with srcdoc bug\n utils.replaceWithProxy(\n document,\n 'createElement',\n createElementHandler\n )\n }\n\n // Let's go\n addIframeCreationSniffer()\n } catch (err) {\n // console.warn(err)\n }\n }",_args:[]}); \ No newline at end of file diff --git a/Extension/EasySpider_en/_locales/en/messages.json b/Extension/EasySpider_en/_locales/en/messages.json deleted file mode 100644 index 267aeb5a..00000000 --- a/Extension/EasySpider_en/_locales/en/messages.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "appName": { - "message": "EasySpider", - "description": "The name of the application" - }, - "appShortName": { - "message": "es", - "description": "The short_name (maximum of 12 characters recommended) is a short version of the app's name." - }, - "appDescription": { - "message": "EasySpider", - "description": "The description of the application" - }, - "browserActionTitle": { - "message": "EasySpider", - "description": "The title of the browser action button" - } -} diff --git a/Extension/EasySpider_en/images/api_thumb_450.jpg b/Extension/EasySpider_en/images/api_thumb_450.jpg deleted file mode 100644 index 1ef3f888902e6697fcc2bf598b1c17c97b1147b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13973 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 V+~WTqzfJy~EtLNogd#}e{|{Ts35);$ diff --git a/Extension/EasySpider_en/images/icon-128.png b/Extension/EasySpider_en/images/icon-128.png deleted file mode 100644 index 82df508a32ac3ec387b1196cda9ae5ac6d49b89a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19077 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 O0000<MNUMnLSTZW;{$d8 diff --git a/Extension/EasySpider_en/images/icon-16.png b/Extension/EasySpider_en/images/icon-16.png deleted file mode 100644 index 6e7255971ff5e51029f70d91557fb2e7160aaa6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3706 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 Y0Nc#Xw9l*9IRF3v07*qoM6N<$f(9)RHvj+t diff --git a/Extension/EasySpider_en/images/icon-19.png b/Extension/EasySpider_en/images/icon-19.png deleted file mode 100644 index cc3a084193ba49a9f54346c543a866a99d3d7e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4031 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 diff --git a/Extension/EasySpider_en/images/icon-38.png b/Extension/EasySpider_en/images/icon-38.png deleted file mode 100644 index 06a4e7287b8b8264bdbe67ba802246a9e5d9f89d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5969 zcmWky2Q(aC9~~`OqD2qFh9zqB5YhYUghh0s_g;e#MDIkee<c>tORN&zDnW?eOY|1K zee=CDGw;m2a$dRj{_ea8byax+JZd}u00`g;GMZq{{Qn#B2z-``ZdZaCuCs!k8vr~Z z{r`;tWMokR0G^7Cw6waqwUfJ(o3)cO6fP|db#`^Kw6V7U0PorCcV4<l7ZhSk7ZyYa zsp+HYH2Y5g10xdBPpnr!oCuhHCMJ>S3H^eHAR~X8rJ&s%Jc*}}{be<erO8S%^2_@u zZ3CeL`uURjkG_Zd`!|1XTDP*cZby7ZiGrSzFehvl*aB}fLq&wA>EqNCx(84}nB)q} z*ihn4^iM0C9soGP^6?IE|1N%uQRM_+0?w1KU?hDj4<Rk;%sK!x0a#`r*?NKzuL<<O z(&{Gz`l*2L?`l8b0m%Sh@8d7U0DL0=_Wr@eaDeHuq<KnUx`4I}0>oed=`8XvOo<<W ziS{Q=4$O|9Kps+p;T3jAB}R~51Ft-05DEwIjMa@Nk}v^+(xo_t0H_cqAWcU)j0IK3 z%HtkyUoJCt4sBAv06Neq!)Z$6d}K{2zo@-Vj+R$ntp2pGmNKPeCAP#}XUIy+WF%GC z!crc=2LS4;vCexT@%XLH^_5M_E&IcNJq7o6M@|f4FOHY)Tca_t0b<qB!&&2vjVUbW zK8)`k?RI7Qz$^l=Ub-^mo5Rg}kN3;>D#}ObR)Q`kU%g-CIW69kC;Loh`6%wSD6t2= z6{qE>fOD|)e$Mv@aLJHJujnWYxpOgf^sLm3-9lqa@i<;=G2Zuu2HwT8j;-=n8*q?E z9_vOlsWYhb`7~=L$h;UxStZ#H<UOWOy~9oNA^?zKY8|Q#kL%I)9RUXzm{Ekf<DP&- zz$s@m^^*jE*ovRm=K=td+OOgy*fD_Nw4yZtX#GoNP?}7s+zSB!nY>SI-z6X8cakAH z2(vn$w{}osnm&?|z=w5+5KBE;52D4(r%IK4rqv-lja~m8i#qRV#tLy=Cyx-p)-s8~ zr(I{tM<!G`KdD;7aIq!(A*7}+gugsBi=Ac|fl#K$Vl$X3@FxZpLASq<X)yHkyB1-V zN!cbCDlndKx{|$#F_5^9pX-P6M&3rY%JU?Ds?osujp-rLTuM(J*_-D!=FU%K7?fII zH%47YCmPgHP%@_U*TWt77#V9GG{!?{89ifa5FIXS5}`}Y+(%))p(}uh6EJ_SE9gm1 z(~)C(2!UZn1(EJSj6M_pv=5Gtm)BL+l`du4W2_@-f#~3deCGN2k|C*7t&Yi;<f_}- zOt?B;R}RU1@Ph6|4wKPKLQ>--1sLH#;<_r{3#NEp_!GFD!khwU(YqqCablY+W#-*@ zhk?a)NKFtDnwHQQPZY0~cr(zo-bg0g^JP^Tw*aPDluV*1U?IMN{a-GxRC?Ywjp4GK z-;i%#gmd4+9r8TYx!#4Bk@9<FFb!u?NTZ853nzbN*jU+ISaWT=x8N>>(8;F#N*lNP z`*?e6JLI1iK0z2kNS}fk%QL%Ye$Ps%8lQ2cD;MKTq^0+3asT0^Nw@k+^wmjQm+hR* zpFClZBt<v{krI%y^-W9LO<R1@=i3vla&4k=BgDsIIqh2YwKCk_6y=j;&$WM)y{;V5 z^wNw|AJs4}Y%{(KzBVVQ2@93W3sWf6GH>jC7W0Clm)GK0S8B=?fwjwF_f^GAzvgOB z*%Rl6#*@oW`JJ@eH%p{tf@Sum%P<CEZ}sxgo0%-dkryKbBYvD%oZ_6-Q??bB6#*53 zv%a%!vu69Q`xN`Tvxgqe*%H|t*=NEI!WSO6Ew5WNT0&dqJVtlKCd_wzwsFq}&j_~{ z#^lc&{uQ24?i@}Xj?oKp^Fv<8KeOi%GCvxMH~(w*)uw6e=<`bHQ?zwULbr9{7`*Uh z6Z1j1)tZ1erI;nsiPj9szi2UUCt_-5!#h{hUDUJQ#yXsAmtom5RyW~3G}O;AkDNvh z?8UyB%(BZdZJTMGyNwC`Pd2MZG3s?xU+QeCKN=@hCG`UN6(NT3L7XA}AmLL6yBxa? zQ#$tQG&-61nZlXqhSG}6if+$Lhb6LAvN+ap*0XnxvpjpZdw6>pdyn?toSU9AojaV5 zJ|Chbc|P^l{jI;NyT_2Hy>shs(F%W8S$A32wvH8zRlZyHsQ_iMQaqX@%`=ViokK}v ziDRxWI%R|Upk=&%;;b<9N9KIRjKlARA<>?X<u@v?GHC`3yF?Eq{~cZEuDT4ZWtU`@ z{5*}{;xh6y(lfe2(W%vDG3QKiJM_<W>o23wekQ_Vq88U9+gM_~VwkzUx#4ZaZ467I zZHxg^0qFscZ*y+mUZd~gF56dpPAHC5aZE5eF*YzzpQu08V%cHQW2a;P_gDZY2It2k zE_^X^DSTW4J$lz9rw+;!nk#d@c`J^LG4er3Hu-y+YwjUtWxA=Sv0<Z-CE@_5;w$Ct zp$5p8WqJEAP4qU;(kZV#lCiS!etWf}QTNW>#r=X~3c0R#V}*)6jw_39emiH|;Oc3G zw6)i?H{Z)_3Tpb+^vOH?Qua8F#GMp|yC1RMJ>4xDvF3)kWuL*9wVt7s>TX`SF<;P3 zxw$=p&hZk_6VQwI7YhAKl2#+W5dxJ`=b}>EC~;JIPI~e=GgM8ststgAqq?z4Q6zCQ z8<BD@wD9($^tE-Enw&>3AFi4vyHCQi#Ae1*6@<*xB64)bWrp)ja#nIyp(cS%Y90F@ z?nahIHA{B(B!YFHO@~36r0~Iub;c{V(>ZecQ01}0I?YOTLJDQBQg&~BDt+%J1(d@3 z-+W7!_d8dNPl74@QSsl^o4(ghH+kzFFEg~u{-9utdPnK?ipNm1<%74)(fCKSHM%DC zPJLBZQ~Si$XZ|EsGi3a~|D@T2b@)@tk_XU^mH*y1o0FTSe9%6$O`Ft51hP@47$cpL zrInZ8<(f8EbySTf{m*<HW@i@_8wdAy6?Thu9g!D$?Ny2>Tgk~^VMhcNG{-R;G{z2! zi|+Zpwr8=!b;E<hSOTU3`}#u-$hnjJ*M;Z4*@1>=#9c*sW7`b#>{R=Lm)|L2$aC_y zi-*a3t@Z5QI(8`8k7thK2f+(*)Mhj-?VAA$P4Zr9JvniH|M@*Wmp$CIb$7C#uWE0v z!FAAl9Yd!e?7Wc~<TRVPpW#*S{GN^Qr{qTG%cWv}zcuy0`6FHPUBgT1fsJR7T?HTZ zap86kBxj*Ro@hSm@NaZs_H(1>@@<U|0f#(m<{o_laXLA9*({>RSL?w^Yb75_a<Wy$ zMSrKy`&=mBrrQ~67^1ACM{~p}-4B!-jV}gH7q{XJk6NAoF<h9<F*Pbxh*pZq2RPrY zC{*b??OI%*_jN=n-T$fVz8yQ92)wrKm~{Jd`RA2kt`F+4caNsgk$Hi(iK*r6((`<u z(hKiEdEU@B&b#WiZT4>G@ioy-VBLMSMTf)krAdd$XqO(*At7#f&VBO3MEJ_M{E+-4 zqa0&QTsA#D4FNUk<ikkPN=Z!#>F8hp;=yOvt$b_gZuLfKRQGoJ=*d;oXnUnk*{SPc zd0CZkA7dYV>xhr&aq(@%$lS-nro)z{J`{aA%dNz{`svuUd0)vdwF|K=|NC36i_fPw zOyjwHpxeZ@l2nldfa+NP8;vCJ9cr$isR97LOaKrR0svPJV7?6i9^3%1V*&ueUjcy9 zDbct`4gl~S;WCn1-m^oxe$J#9*$;b_h#$VwzB7pqxNCw9I3D_shjyX-oz6TftGI+h zFJ7>+#)-t*^}~|wq=i5IJ9tF08OzPTKSoE1xA7`WIXL8PM^jd{+jMU)7el)R8mgb_ zF!SDqX@Birk{XNo>*D;-N6P@dAJ_X%fw^~L;^I$hI2a?pePcTkiQC+?oVI^0!|)V4 zMAA@2Ma9R`(lY$dE@#c$e(o#1n(mhn%wp+O3#u5o(n(vHB{(rQ5L9fVrKL4gQBiT{ zVq~;9Gc`5!GS_#fEJQe)(6*kMfPjF7gF{A23Ntb?5&$B%xvZ!j<*P%;WF;#QU2Df3 zE6&|<F)?=vB@-40^UbGQV!2#JT5OUN{4yHRPvb3~frFzZ!~(D-C0NKX;fX*H&Jzlu zq@<)cdhvi;dZE}S!nA}){YJtB1#B|ePf$py);B6jSK;c}*;xVVm`9CHOC#1cHhP&^ zS<zWpv@KwYw$SVA?^m!kGs9e1SopiW-PzFre9#M%$`6vtmk^?T)aL@h#sn`aIyyNe zr6<C|!rZ*Pn5h=ow0#L+3$^Ke&)_wothZi{O59W*fKoO#wp7{Xd5darie6ho>3s27 zSxCC)&+9XknY~5mr1I4}){fn^wY6XDNQHC;$wpB~lJ$J8hXj9Vjw@jKs?2QA;*JZB zKN0rHl&ZgGUQy$>X8rq^`}=^p`uZ8Kz3HdT&MQB6V`5_576Tvd$}jYgb#?#J!inhb zDRZ_Q0@{t=h=@cF3=H6gnR*99|M{Zm6#pZ^!NFnS<it^#_)1qe@dAQLLPB!18pZX~ z{&k3jUUy%gG%+@*%EV$q!qapZ9Nf;D@^ZW3o+wH|)Y+6i{qWzx)zww;t&NRI`ZuoY zjen|)jp->V!+-zQsxqoNytwiYrHI0@tbG;{5uu>0{22zneAQorAJv1Its4IMGxpyz z-{|OQ4!D|Hm71EGyn%s%nV+BEKp%bJ?M<4I@3x7YT$rDn83)?zPo<%_evA8dL~(I( zy?h+q-BxF(q_&2}7`?BbU+&28aOkjQl*2bIwtRIK2@NuqNKBQ9>P~Lup#r>6Oy(rq zU??m$I(j;dQ~!Ls-tNyPose_h&wbC5w(Fg8C-H~dQ>*&-oR-l%8e~ri!;k0PM)w<L z>^(|Uv#*QV+U~b+Z*Rpf&d&qdOG>t?7!vvei3kZ_sVXYAjL*;CiWZLj<;xsag(r5L ziZCQV$nbEkZ*C|@GX<S~+13+&yxDJ5L+VzqYU=CH#VWw044YjyUV3<VWRjAQ&>ps) zj*MHNQx}eI?($e{EzLBPKw6QJk=<Ikx}N-pPUC7n9Tr^LONQazobTV%m6rZpl9!j~ z<DfvNl<QPgj$8BVa8N|OON4!vdI1RrGKyVJH;1np9T&zo*4ObTr>5>J&>Po_SEpMS zVO^#TC={xxwbeg-(pEG*F_Ga>NaxK@iQ~M>Wgj}W6kGqRlMV6O_Z9S4clUzdzI{9Q zKklJ?tjs)dw7k6BIxqmQ=rP0P!N&rpTEhVe4$>^^{`D)KUqIl${hgiJ-_z4gZTb18 zsDTfzDapyVt$BINbu;#aXXob(BoRYR5787!FxJ#_kl7q)-zlVCEtk0X15rv!3VnTJ zqqxV>awpmsbw71`b=v-#I))e<0|pO<LcVi6NrcU?>s0R1($e0xaiDcUAjrpw-(TKe zUS7IrkaeE=+lvEGI4>glkg-^^EKiHA+IdB)yQgPmwI}Mx7xi~{R~mt!P-aeAtN&x9 z|FDr}Oosy5(jWnimm=;a+V{Ni$l2ln`5U_?F~Q$zbojHat*uWXu{%f9&l3iN-TJz^ zl3-zBHF@k(AQ9{*Cnwxq2L|yl+_*lhU}$`H_QycPI6pzEh3V@|Q{HqanipHLV|f`m zJ2$s-<_mu5CK9_`_V}@IZw#m#8r~uQ?DlkbV}mOwS18Fs7U|^RV2A}+SXewX`J8SV z%cGUNyaa{czU@2}p$hwiD94f20P*oPBO{}kNtV5dC6ZY7X(EhOR)aqtW<xGJ28EM+ z(367_6E`?6T)&Gf=&r1+OyO4<9T*%89<%=3Y0?3vIDau?S4~aLhu#>P3nC(-E)#Bv ze07OL7#}>5H5l5Bkq6=jo><-Rx{%$^*VpV1sEn#5ZWGOJTVfQl37$U|{K3|R!<K$r z?Cj-YJUrE7mbLY7vPXhJy$p?_;G}LPjkC73Wy1&p(H8guo@iWwSlg{?54Z>A?nhX7 zcr6pW;QIQy38d4cxw-lNSnor}@`blZ_3rVp%ZCpie)rcP$+0C_AyNiTPKUEZ;<wJ7 z5u`68k%--2e4`?#onXI8kl?TG!r3Nz6#OdXoD@p$R8>cgK}z2*TGr-QRyq#nONXnf zIvFF%JvuCFJsx9zdNwy}*qyAnVVJbNy^T^6yIOZ*XJ<Fglv`}^I$TWZi+!$d#Z6UA z6=tfMD|S~!9kc0aX}MY7(9ocnYJn2Yt{gV2_BMQ_vv_}Z^RT}-3`UDKK~Ygr{&xgF z;;7IyUTSP))89?I=+e*@o<g+cj0s;<6JhgBF6J9sxq)pUf`xf_T%eqs6`<m5{rmS1 zIXFCA5fK$dga0VxX&O4kb$_<L1Z7mU5xYvP&6eVIyxNmnY21FVlxks~abQF|(Y`+4 z?B=DSNfsIrfh&})$}cGRa$|FoxxTJ${X`_!y#9TkTDI^Rd#Z&`szu58#DxBt??)?R z<E4VJu`zrNGVK};QvC+|nFUa-LiYCdPVqv`z^!lMq(FPa;kclNACO{#vT<`TNFNFV z12zU*%3yY4;woWy*YNua3S3;=vJ$mivAxqPezDxqqKWNWuJ+rLe8DCE(?d}4aDdmD z``3v~N~+){-o7G+bR1qV5<^73&#FC+&|^^KCWc6qPZoUt?rgHw8x#J|_wHBL8#iG^ zMa9_PQ&VCnQ2#z!*3Q`QQ{RA#d#~pC!!X(6naF6L%!Ykl2O|hkFcdKg2#^OumqRIy zywld2O!ZRFK;dw5_w*bwZuLIS1rK}z(=sxy_s!!(&*dBEVlFSeFYoSkX?#DJT?DAq zIpGBZlEfX{_?siyQ4&xfyz3KKqq)BROfS5v8rD(_Qie+6IE;WMpvPsNzOT0ztgFmS z8r%u>&WSr)-9{ZJ)Fi^-*8J4E6$ls;Q>O`ccRyQ-B0fI;`qtLggN<-C3kQXgpO=?c z1{nNuGcqt`HNMZ-FAM$OcF^|q2oFm~fCmdVbWMy^lEg9`_3%U)7>Nd*i1$%ag?{6G zU2*Z|OS-t1Of8l@k>n}NNvz%=5-!g7=Pt}+*Ub7_OKn$#2*;M_sc$tR{13kdoaD3M zv8CV<hOdQ#VL#3o<?Aug;4r6{l$c0O6_)<~yNTq+=5XdxDH1u4Fg7;cIlXen@9Ktm zYc0z7t)a~2qRuWZM%lP0Z3RZM-qaERsyQN82PYfon4X@VAHQwuIp8F2mq#m0?(Xg) z7=ZD|v&mYpq>o-}#fsc~$zpaJ0ZLjgXrkINpj-w`N2F<JfvWuc6<#16Hedph2q$yc zb85pi<+Xr7g+9vn%teHO>|$^`T(V5-=eGNO(3%h<y2ilA=W1!G)yHjo_w0b13f~2k z22NR7S?#;KyWQC5ZxORIGtH%ih0;nBb%6~6dtzpwov3v+S5iV}y@f-|wAes9iXGCa zkqC1tpR^V4;s!h61up&D$g))h1wr0@d`%uGXU4Z(kZ!=b2p@G8LcZ}iSuY28si~=r zR(y;c_^HFg!op%zm6eMY2V~%6J<cp-KaG{`i(Or~tTW^!B_$bUHEN)c4=O6d`P--9 z0H=0#cCf~7Kr+$j>FJ?@q4OS&{xCD<BpXB&2*tO9X!J$k`HWS&cYomtdsXX6R9zka zabQXce%FxgQ+T2`=n9seU}J8Ac5t7_*K#yR^sS)7tk!@FZ87}=eY$R4ycqsidzR<n zBFfy~|JKvP<LqXFPqlo~cW`jf2vp#kIA<Y$orL?SFQRxd8lRyMUC>u>)z;STf_?dQ zuN@bGzRZw~mDOj$wtf*G8}pYnKOf%b2R^g0Veg#q1;;97I9yK$j7ERT5f#@li1KWI jvWQc4o4W_x2R=Zwb!wBz{1pQHO99}rsxp;QCc*y$PMV#5 diff --git a/Extension/EasySpider_en/manifest.json b/Extension/EasySpider_en/manifest.json deleted file mode 100644 index d0e7a3e1..00000000 --- a/Extension/EasySpider_en/manifest.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "EasySpider", - "short_name": "EasySpider", - "description": "EasySpider", - "version": "0.1.0", - "manifest_version": 2, - "default_locale": "en", - "icons": { - "16": "images/icon-16.png", - "128": "images/icon-128.png" - }, - "background": { - "scripts": [ - "scripts/background.js" - ] - }, - "page_action": { - "default_icon": { - "19": "images/icon-19.png", - "38": "images/icon-38.png" - }, - "default_title": "__MSG_browserActionTitle__", - "default_popup": "pages/popup.html" - }, - "options_page": "pages/options.html", - "options_ui": { - "page": "pages/options.html", - "chrome_style": true - }, - "minimum_chrome_version": "10.0", - "devtools_page": "pages/devtools.html", - "omnibox": { - "keyword": "fwbz" - }, - "content_scripts": [{ - "matches": [ - "http://*/*", - "https://*/*" - ], - "css": [ - "styles/contentscript.css" - ], - "js": [ - "scripts/jquery-3.4.1.min.js", "scripts/vue.js", "scripts/baozhuangscript.js", "scripts/contentscript.js", "scripts/messageInteraction.js" - ], - "run_at": "document_end", - "all_frames": false - }], - "web_accessible_resources": ["js/inject.js"], - "permissions": [ - "activeTab", - "alarms", - "bookmarks", - "browsingData", - "contextMenus", - "cookies", - "downloads", - "downloads.open", - "geolocation", - "history", - "identity", - "idle", - "management", - "nativeMessaging", - "notifications", - "privacy", - "proxy", - "sessions", - "storage", - "tabs", - "topSites", - "webNavigation", - "webRequest", - "webRequestBlocking", - "unlimitedStorage", - "<all_urls>" - ] -} \ No newline at end of file diff --git a/Extension/EasySpider_en/manifest.json.bak b/Extension/EasySpider_en/manifest.json.bak deleted file mode 100644 index 931d243c..00000000 --- a/Extension/EasySpider_en/manifest.json.bak +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "__MSG_appName__", - "short_name": "__MSG_appShortName__", - "description": "__MSG_appDescription__", - "version": "0.0.0", - "manifest_version": 3, - "default_locale": "en", - "icons": { - "16": "images/icon-16.png", - "128": "images/icon-128.png" - }, - "background": { - "service_worker": "scripts/background.js" - }, - "action": { - "default_icon": { - "19": "images/icon-19.png", - "38": "images/icon-38.png" - }, - "default_title": "__MSG_browserActionTitle__", - "default_popup": "pages/popup.html" - }, - "options_page": "pages/options.html", - "options_ui": { - "page": "pages/options.html" - }, - "minimum_chrome_version": "10.0", - "devtools_page": "pages/devtools.html", - "omnibox": { - "keyword": "fwbz" - }, - "content_scripts": [{ - "matches": [ - "http://*/*", - "https://*/*" - ], - "css": [ - "styles/contentscript.css" - ], - "js": [ - "scripts/jquery-3.4.1.min.js", "scripts/vue.js", "scripts/baozhuangscript.js", "scripts/contentscript.js", "scripts/messageInteraction.js" - ], - "run_at": "document_end", - "all_frames": false - }], - "web_accessible_resources": [{ - "resources": ["js/inject.js"], - "matches": [], - "extension_ids": [] - }], - "host_permissions": ["*://*/*"], - "permissions": [ - "activeTab", - "alarms", - "bookmarks", - "browsingData", - "contextMenus", - "cookies", - "downloads", - "downloads.open", - "geolocation", - "history", - "identity", - "idle", - "management", - "nativeMessaging", - "notifications", - "privacy", - "proxy", - "sessions", - "storage", - "tabs", - "topSites", - "webNavigation", - "webRequest", - "unlimitedStorage" - ] -} \ No newline at end of file diff --git a/Extension/EasySpider_en/pages/devtools.html b/Extension/EasySpider_en/pages/devtools.html deleted file mode 100644 index 1b1f7e4d..00000000 --- a/Extension/EasySpider_en/pages/devtools.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8" /> - <title>Devtools - - - - -

Devtools

- - - - diff --git a/Extension/EasySpider_en/pages/options.html b/Extension/EasySpider_en/pages/options.html deleted file mode 100644 index 55f1643b..00000000 --- a/Extension/EasySpider_en/pages/options.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Options - - - - - - - - - diff --git a/Extension/EasySpider_en/pages/popup.html b/Extension/EasySpider_en/pages/popup.html deleted file mode 100644 index 0796bc82..00000000 --- a/Extension/EasySpider_en/pages/popup.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Popup - - - - -

Visual Web Crawler

- - - - - diff --git a/Extension/EasySpider_en/scripts/background.js b/Extension/EasySpider_en/scripts/background.js deleted file mode 100644 index 591d00c5..00000000 --- a/Extension/EasySpider_en/scripts/background.js +++ /dev/null @@ -1,68 +0,0 @@ -//此变量用于监听是否加载了新的页面(包括新窗口打开),如果是,增加变量值,用于传回后台。 -var tabList = []; //用来记录打开的新的tab的id -var nowTabId = null; -var nowTabIndex = 0; //重要变量!! -const extension = { - ws: null, -}; -chrome.storage.local.set({ "parameterNum": 1 }); //修改默认的参数索引值 -// chrome.tabs.update(6,{"active":true}) //一行就可以切换标签页 -chrome.tabs.onActivated.addListener(function(activeInfo) { - nowTabId = activeInfo.tabId; //记录现在活动的tabid - if (tabList.indexOf(nowTabId) != -1) { - nowTabIndex = tabList.indexOf(nowTabId); - } - -}); -// 监听来自content-script的消息 -chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { - if (request.type == 0) { - if (tabList.indexOf(sender["tab"]["id"]) < 0) { //元素不存在加入数组 - tabList.push(sender["tab"]["id"]); - } - nowTabIndex = tabList.indexOf(nowTabId); - sendResponse({ type: 0, "msg": "Get!" }); //回传一个消息 - } else if (request.type == 1) { //前台询问参数索引值 - sendResponse({ type: 1, "value": parameterNum }); //回传一个消息 - } else if (request.type == 2) { - let message = { - type: 2, //消息类型,2代表键盘输入 - message: { "keyboardStr": "{}{BS}" + request.msg } // {}全选{BS}退格 - }; - extension.ws.send(JSON.stringify(message)); - } else if (request.type == 3) { - let tmsg = request.msg; - tmsg.tabIndex = nowTabIndex; //赋值当前tab的id - let message = { - type: 3, //消息类型,3代表元素增加事件 - from: 0, //0代表从浏览器到流程图,1代表从流程图到浏览器 - message: { "pipe": JSON.stringify(request.msg) } // {}全选{BS}退格 - }; - console.log(message); - extension.ws.send(JSON.stringify(message)); - } -}); - -// 打开一个 web socket -extension.ws = new WebSocket("ws://localhost:8084"); -extension.ws.onopen = function() { - // Web Socket 已连接上,使用 send() 方法发送数据 - console.log("已连接"); - message = { - type: 0, //消息类型,0代表链接操作 - message: { - id: 0, //socket id - } - }; - this.send(JSON.stringify(message)); -}; -extension.ws.onmessage = function(evt) { - evt = JSON.parse(evt.data); - if (evt["type"] == "0") { //0代表更新参数添加索引值 - chrome.storage.local.set({ "parameterNum": parseInt(evt["value"]) }); //修改值 - } -}; -extension.ws.onclose = function() { - // 关闭 websocket - console.log("连接已关闭..."); -}; \ No newline at end of file diff --git a/Extension/EasySpider_en/scripts/baozhuangscript.js b/Extension/EasySpider_en/scripts/baozhuangscript.js deleted file mode 100644 index e8a0179d..00000000 --- a/Extension/EasySpider_en/scripts/baozhuangscript.js +++ /dev/null @@ -1,276 +0,0 @@ -//表现层的处理 - -if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { - throw "serviceGrid"; //如果是服务器网页页面,则不执行工具 -} - -//返回element相对node节点的xpath,默认的node节点是: / -function readXPath(element, type = 1, node = document.body) { - try { - if (type == 0) //type=0代表默认可通过id生成xpath type=1代表只能从根节点生成xpath, nodeList里必须使用绝对xpath! - { - if (element.id !== "") { //判断id属性,如果这个元素有id,则显示//*[@id="xPath"] 形式内容 - return '//*[@id=\"' + element.id + '\"]'; - } - if (element.className != ""){ //如果有class且某个class name只有一个元素,则使用class name生成xpath - console.log("class name: " + element.className); - names = element.className.split(" "); - for (var i = 0; i < names.length; i++) { - if (names[i] != "") { - // return '//*[@class=\"' + names[i] + '\"]'; - console.log('//*[@contains(@class, \"' + names[i] + '\")]'); - elements_of_class = node.getElementsByClassName(names[i]); - console.log("Length of elements_of_class: " + elements_of_class.length); - if(elements_of_class.length == 1){ - return '//*[contains(@class, \"' + names[i] + '\")]' - } - } - } - } - } - //这里需要需要主要字符串转译问题,可参考js 动态生成html时字符串和变量转译(注意引号的作用) - if (element == node) { //递归到body处,结束递归 - if (node == document.body) { - return '/html/' + element.tagName.toLowerCase(); - } else { - return ""; - } - } - var ix = 1, //在nodelist中的位置,且每次点击初始化 - siblings = element.parentNode.childNodes; //同级的子元素 - - for (var i = 0, l = siblings.length; i < l; i++) { - var sibling = siblings[i]; - //如果这个元素是siblings数组中的元素,则执行递归操作;arguments.callee代表当前函数的名称 - if (sibling == element) { - return readXPath(element.parentNode, type, node) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']'; - //如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加 - } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) { - //注意此处,为了防止多计算了插入的操作台的3个div元素导致定位错误,这里需要屏蔽掉三个元素的索引号 - if(sibling.id != "wrapperDiv" && sibling.id != "wrapperTdiv" &&sibling.id != "wrapperToolkit"){ - ix++; - } - } - } - } catch { - return "/" - } -}; - -//创造div作为选中元素后的样式存在 -var div = document.createElement('div'); -div.style.zIndex = -2147483647; -div.setAttribute("id", "wrapperDiv"); -div.style.position = "fixed"; -div.style.boxSizing = "border-box"; -div.style.border = "dotted"; - -var tdiv = document.createElement('div'); -tdiv.style.zIndex = 2147483647; -tdiv.style.position = "fixed"; -tdiv.setAttribute("id", "wrapperTdiv"); -tdiv.classList = "tdiv"; -tdiv.style.top = "0px"; -tdiv.style.width = "3000px"; -tdiv.style.height = "3000px"; -tdiv.style.pointerEvents = "none"; - -var mousemovebind = false; //如果出现元素默认绑定了mousemove事件导致匹配不到元素的时候,开启第二种模式获得元素 - -var toolkit = document.createElement("div") -toolkit.classList = "tooltips"; //添加样式 -toolkit.setAttribute("id", "wrapperToolkit"); - -var tooltips = false; //标记鼠标是否在提示框上 - -var defaultbgColor = 'rgba(221,221,255,0.8)'; //移动到元素的背景颜色 -var selectedColor = "rgba(151,255,255, 0.6)"; //选中元素的背景颜色 -var boxShadowColor = "blue 0px 0px 5px"; //待选元素的边框属性 - - -//右键菜单屏蔽 -document.oncontextmenu = () => false; -var nodeList = []; //已被选中的节点列表 -var readyList = []; //预备选中的list -var outputParameters = []; //输出参数列表 -var outputParameterNodes = []; //输出参数节点列表 -NowNode = null; -var xnode = null; -var step = 0; //记录这是第几次点击操作 -var style = ""; //记录上个元素的颜色 -document.addEventListener("mousemove", function() { - if (mousemovebind) { - tdiv.style.pointerEvents = "none"; - } - - //如果鼠标在元素框内则点击和选中失效 - var x = event.clientX; - var y = event.clientY; - var divx1 = toolkit.offsetLeft; - var divy1 = toolkit.offsetTop; - var divx2 = toolkit.offsetLeft + toolkit.offsetWidth; - var divy2 = toolkit.offsetTop + toolkit.offsetHeight; - if (x >= divx1 && x <= divx2 && y >= divy1 && y <= divy2) { - tooltips = true; - return; - } - oe = document.elementFromPoint(event.x, event.y); - if (oe == tdiv) { - return; - } - tooltips = false; - NowNode = oe; - te = 0; - exist = 0; - exist2 = 0; - for (o of nodeList) { - if (o["node"] == oe) { - exist = 1; - break; - } - } - for (o of nodeList) { - if (o["node"] == xnode) { - exist2 = 1; - break; - } - } - // console.log(oe); - if (xnode == null) { - xnode = oe; - } - if (xnode != oe) { - if (exist2 == 0) { //如果上个元素不在数组里,改回上个元素的初始颜色 - try { - xnode.style.backgroundColor = style; //上个元素改回原来元素的背景颜色 - } catch { - xnode.style.backgroundColor = ""; //上个元素改回原来元素的背景颜色 - } - } - - try { - style = oe.style.backgroundColor; - } catch { - style = ""; - } - - if (exist == 1) { - - } else { - try { - oe.style.backgroundColor = defaultbgColor; //设置新元素的背景元素 - } catch {} - - } - xnode = oe; - div.style.display = "none"; - } - if (mousemovebind) { - tdiv.style.pointerEvents = ""; - } - -}); - -//点击没反应时候的替代方案 -document.onkeydown = function(event) { - // console.log("keydown"); - var e = event || window.event || arguments.callee.caller.arguments[0]; - if (e && e.keyCode == 118) { // 按 F7 - addEl(); - } else if (e && e.keyCode == 119) { //按F8 - clearEl(); - } else if (e && e.keyCode == 120) { //按F9 - NowNode.focus(); - NowNode.click(); - // console.log("click",NowNode); - } else { - return event.keyCode; - } -}; - -//选中元素到列表中 -function addEl() { - // if (tooltips) { - // return; - // } - let exist = false; - for (o of nodeList) { - if (o["node"] == oe) { - exist = true; - break; - } - } - //元素没有被添加过才去添加 - if (!exist) { - step++; - exist = false; //判断刚加入的元素是否在readyList中,如果在,则将所有readylist中的元素全部放入list中 - for (o of readyList) { - if (o["node"] == oe) { - exist = true; - break; - } - } - if (exist) { //存在在readylist就全选中 - readyToList(step); - if (app._data.selectedDescendents) { - handleDescendents(); //如果之前有选中子元素,新加入的节点又则这里也需要重新选择子元素 - } - } else //不然只添加一个元素 - { - clearReady(); //readylist清零重新算 - nodeList.push({ node: NowNode, "step": step, bgColor: style, "boxShadow": NowNode.style.boxShadow == "" || boxShadowColor ? "none" : NowNode.style.boxShadow, xpath: readXPath(NowNode, 1) }); - NowNode.style.backgroundColor = selectedColor; - } - handleElement(); //处理新状态 - - //将虚线框显示在元素上方但屏蔽其鼠标操作 - var pos = NowNode.getBoundingClientRect(); - div.style.display = "block"; - div.style.height = NowNode.offsetHeight + "px"; - div.style.width = NowNode.offsetWidth + "px"; - div.style.left = pos.left + "px"; - div.style.top = pos.top + "px"; - div.style.zIndex = 2147483645; - div.style.pointerEvents = "none"; - } - // console.log("------"); - // for (i = 0; i < nodeList.length; i++) { - // console.log(nodeList[i]["xpath"]); - // } - //对于可点击元素,屏蔽a标签默认点击事件 - event.stopImmediatePropagation(); - event.stopPropagation(); - event.preventDefault ? event.preventDefault() : event.returnValue = false; -} -document.addEventListener("mousedown", addEl); -toolkit.addEventListener("mousedown", function(e) { e.stopPropagation(); }); //重新定义toolkit里的点击事件 -//清除选择项 -function clearEl() { - //如果最后停留的元素被选中,则调整此元素的style为原始style,否则不进行调整 - for (node of nodeList) { - node["node"].style.backgroundColor = node["bgColor"]; - node["node"].style.boxShadow = node["boxShadow"]; - if (NowNode == node["node"]) { - style = node["bgColor"]; - } - } - step = 0; - clearReady(); - clearParameters(); - nodeList.splice(0, nodeList.length); //清空数组 - app._data.option = 0; //选项重置 - app._data.page = 0; //恢复原始页面 -} - -//清除预备数组 -function clearReady() { - for (node of readyList) //节点列表状态恢复原状 - { - node["node"].style.boxShadow = node["boxShadow"]; - } - readyList.splice(0, readyList.length); //清空数组 -} -document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 -document.body.append(tdiv); -document.body.append(toolkit); -var timer; \ No newline at end of file diff --git a/Extension/EasySpider_en/scripts/contentscript.js b/Extension/EasySpider_en/scripts/contentscript.js deleted file mode 100644 index 4a190a0f..00000000 --- a/Extension/EasySpider_en/scripts/contentscript.js +++ /dev/null @@ -1,933 +0,0 @@ -//表现逻辑层的处理 - -if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { - throw "serviceGrid"; //如果是服务器网页页面, 则不执行工具 -} - -//Vueelement -var app; -generateToolkit(); -//生成Toolkit -function generateToolkit() { - $(".tooltips").html(` -
-
✍Operation Toolbox (Can drag)
-
-
- -

Special click mode

-
-

● When your mouse moves to the element, please right-click your mouse button or press F7 on the keyboard to select it.

-

● You can click the back button to go back to the page

- {{initial()}} -
-
-
- ● Already selected {{numOfList()}} {{tname()}}, meanwhile we find {{numOfReady()}} element with the same type, you can: - -
-
- -
- -
- ● Already selected the follwoing element, you can: - -
- -
- ● Already selected {{numOfList()}} similar elements, and we find other{{numOfReady()}} similar elements, you can: - -
- -
- -
-
{{setWidth("350px")}} - - - - -
{{i["name"]}}Delete -
- - - - - - -
{{valTable[j-1][i-1]}}×
-
-
- -
{{setWidth("290px")}}
- -
-
- - -
-

{{lastElementXPath()}}

-
-
-
- ● Please input text: - - - -
-
-
-
-`); - app = new Vue({ - el: '#realcontent', - data: { - option: 0, - list: { nl: nodeList, opp: outputParameters }, - valTable: [], // 用来存储转换后的para列表 - special: false, //是否为特殊selection模式 - selectedDescendents: false, // 标记是否选中了子element - selectStatus: false, //标记单个element是否点击了采集 - page: 0, //默认页面, 1为输入文字页面 - text: "", // 记录输入的文字 - tNodeName: "", // 记录临时节点列表 - nowPath: "", //现在element的xpath - }, - watch: { - nowPath: { //变量发生变化的时候进行一些操作 - handler: function(newVal, oldVal) { - console.log("xpath:", newVal); - } - } - }, - methods: { - initial: function() { //每当element是0的时候, 执行值的初始化操作 - this.selectedDescendents = false; - this.selectStatus = false; - this.nowPath = ""; - }, - confirmCollectSingle: function() { //单element确认采集 - collectSingle(); - clearEl(); - }, - confirmCollectMulti: function() { //无规律多element确认采集 - collectMultiNoPattern(); - clearEl(); - }, - confirmCollectMultiAndDescendents: function() { //有规律多element确认采集 - collectMultiWithPattern(); - clearEl(); - }, - deleteSingleLine: function(event) { //删除单行element - let at = new Date().getTime() - //流程图送element的时候, 默认的使用不固定循环列表, 但是一旦有删除element的操作发生, 则按照固定element列表采集element - index = event.target.getAttribute("index"); - let tnode = nodeList.splice(index, 1)[0]; //删掉当前element - tnode["node"].style.backgroundColor = tnode["bgColor"]; - tnode["node"].style.boxShadow = tnode["boxShadow"]; - if (nodeList.length > 1) { // 如果删到没有就没有其他的操作了 - handleElement(); - if (this.selectedDescendents) { - handleDescendents(); //如果之前有Select child elements, 新加入的节点又则这里也需要重新selection子element - } - } else { - this.valTable = []; - this.selectStatus = false; - clearParameters(); //直接Revoke 重选 - } - let at2 = parseInt(new Date().getTime()); - console.log("delete:", at2, at, at2 - at); - }, - clickElement: function() { //点击element操作 - sendSingleClick(); - //先发送数据 - nodeList[0]["node"].focus(); //获得element焦点 - nodeList[0]["node"].click(); //点击element - clearEl(); - }, - loopClickSingleElement: function() { //循环点击单个element - sendLoopClickSingle(this.tname()); //识别下一页,循环点击单个element和点击多个element - if (this.tname() != "Elements in next page") { //Elements in next page不进行点击操作 - nodeList[0]["node"].focus(); //获得element焦点 - nodeList[0]["node"].click(); //点击element - } - clearEl(); - }, - loopClickEveryElement: function() { //循环点击每个element - sendLoopClickEvery(); //识别下一页,循环点击单个element和点击多个element - nodeList[0]["node"].focus(); //获得element焦点 - nodeList[0]["node"].click(); //点击element - clearEl(); - }, - setInput: function() { //输入文字 - this.page = 1; - this.$nextTick(function() { //下一时刻获得焦点 - document.getElementById("WTextBox").focus(); - }) - }, - getInput: function() { //得到输入的文字 - nodeList[0]["node"].focus(); //获得文字焦点 - // nodeList[0]["node"].setAttribute("value", this.text); // 设置输入 box内容 - input(this.text); // 设置输入 - this.text = ""; - clearEl(); - }, - cancelInput: function() { - this.page = 0; - }, - setWidth: function(width) { //根据是否出现表格调整最外 box宽度 - $(".tooltips").css("width", width); - return ""; - }, - getText: function() { //采集文字 - generateParameters(0, true, false); - this.selectStatus = true; - clearReady(); - }, - getLink: function() { //采集linkAddress - generateParameters(0, false, true); - this.selectStatus = true; - clearReady(); - }, - getOuterHtml: function() { //采集OuterHtml - generateParameters(3, true, false); - this.selectStatus = true; - clearReady(); - }, - getInnerHtml: function() { //采集InnerHtml - generateParameters(2, true, false); - this.selectStatus = true; - clearReady(); - }, - tname: function() { - let tag = nodeList.length == 0 ? "" : nodeList[0]["node"].tagName; - let inputType = nodeList.length == 0 ? "" : nodeList[0]["node"].getAttribute("type"); - if (inputType != null) { //如果没有type属性, 则默认为text - inputType = inputType.toLowerCase(); - } else { - inputType = "text"; - } - if (tag == "") { - return "null"; - } else if ($(nodeList[0]["node"]).contents().filter(function() { return this.nodeType === 3; }).text().indexOf("Next") >= 0) { - this.setWidth("310px"); - return "Elements in next page"; - } else if (tag == "A") { - return "link"; - } else if (tag == "IMG") { - return "Image"; - } else if (tag == "BUTTON" || (tag == "INPUT" && (inputType == "button" || inputType == "submit"))) { - return "Button"; - } else if (tag == "TEXTAREA" || (tag == "INPUT" && (inputType != "checkbox" || inputType != "ratio"))) { //普通输入 box - return "text box"; - } else if (tag == "SELECT") { - return "selection box"; - } else { - return "element"; - } - }, - existDescendents: function() { //检测选中的element是否存在子element,Already 经选中了子element也不要再出现了 - return nodeList.length > 0 && nodeList[0]["node"].children.length > 0 && !this.selectedDescendents; - }, - numOfReady: function() { - return readyList.length; - }, - numOfList: function() { - return nodeList.length; - }, - lastElementXPath: function() { //用来显示element的最大最后5个xpath路劲element - path = nodeList[nodeList.length - 1]["xpath"]; - path = path.split("/"); - tp = ""; - if (path.length > 5) { //只保留最后五个element - path = path.splice(path.length - 5, 5); - tp = ".../" - } - for (i = 0; i < path.length; i++) { - path[i] = path[i].split("[")[0]; - } - path = path.join("/"); - path = "Path: " + tp + path; - return path; - }, - cancel: function() { - clearEl(); - }, - specialSelect: function() { //特殊selection模式 - if (mousemovebind) { - tdiv.style.pointerEvents = "none"; - this.special = false; - } else { - this.special = true; - } - mousemovebind = !mousemovebind; - }, - enlarge: function() { // 扩大选区功能, 总是扩大最后一个选中的element的选区 - if (nodeList[nodeList.length - 1]["node"].tagName != "BODY") { - nodeList[nodeList.length - 1]["node"].style.backgroundColor = nodeList[nodeList.length - 1]["bgColor"]; //之前element恢复原来的背景颜色 - nodeList[nodeList.length - 1]["node"].style.boxShadow = nodeList[nodeList.length - 1]["boxShadow"]; //之前element恢复原来的背景颜色 - tNode = nodeList[nodeList.length - 1]["node"].parentNode; //向上走一层 - if (tNode != NowNode) { //扩大选区之后背景颜色的判断, 当前正好选中的颜色应该是不同的 - sty = tNode.style.backgroundColor; - } else { - sty = style; - } - nodeList[nodeList.length - 1]["node"] = tNode; - nodeList[nodeList.length - 1]["bgColor"] = sty; - nodeList[nodeList.length - 1]["xpath"] = readXPath(tNode, 1); - //显示 box - var pos = tNode.getBoundingClientRect(); - div.style.display = "block"; - div.style.height = tNode.offsetHeight + "px"; - div.style.width = tNode.offsetWidth + "px"; - div.style.left = pos.left + "px"; - div.style.top = pos.top + "px"; - div.style.zIndex = 2147483645; - div.style.pointerEvents = "none"; - handleElement(); //每次数组element有变动, 都需要重新处理下 - oe = tNode; - tNode.style.backgroundColor = "rgba(0,191,255,0.5)"; - this.selectedDescendents = false; - } - }, - selectAll: function() { //Select Allelement - step++; - readyToList(step, false); - handleElement(); - if (this.selectedDescendents) { - handleDescendents(); //如果之前有Select child elements, 新加入的节点又则这里也需要重新selection子element - } - }, - revoke: function() { //Revoke selection当前节点 - var tstep = step; - step--; //步数-1 - while (tstep == nodeList[nodeList.length - 1]["step"]) //删掉所有当前步数的element节点 - { - let node = nodeList.splice(nodeList.length - 1, 1)[0]; //删除数组最后一项 - node["node"].style.backgroundColor = node["bgColor"]; //还原原始属性和边 box - node["node"].style.boxShadow = node["boxShadow"]; - if (NowNode == node["node"]) { - style = node["bgColor"]; - } - //处理Already 经有Select child elements的情况 - // if (this.selectedDescendents) { - clearParameters(); //直接Revoke 重选 - // } - } - handleElement(); //每次数组element有变动, 都需要重新处理下 - }, - selectDescendents: function() { //selection所有子element操作 - handleDescendents(); - } - }, - }); - h = $(".tooldrag").height(); - difference = 26 - h; //获得高度值差 - if (difference > 0) { - $(".tooldrag").css("cssText", "height:" + (26 + difference) + "px!important") - } - timer = setInterval(function() { //时刻监测相应element是否存在(防止出现如百度一样element消失重写body的情况), 如果不存在, 添加进来 - if (document.body != null && document.getElementById("wrapperToolkit") == null) { - this.clearInterval(); //先Cancel原来的计时器, 再设置新的计时器 - document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 - document.body.append(tdiv); - document.body.append(toolkit); - generateToolkit(); - // var list = document.getElementsByTagName("a"); - // // 对于没有特殊绑定函数的a标签, 使他们在新标签页中打开 - // for (var i = 0; i < list.length; i++) { - // if (list[i].href.indexOf("javascript") == -1 && list[i].href.indexOf("void") == -1 && list[i].href.indexOf("#") == -1 && list[i].href) { - // list[i].setAttribute("target", "_blank"); - // } - // }; - // list = document.getElementsByTagName("form"); - // // 对于没有特殊绑定函数的form标签, 使他们在新标签页中打开 - // for (var i = 0; i < list.length; i++) { - // list[i].setAttribute("target", "_blank"); - // }; - } - }, 3000); -} - -//每次对element进行增删之后需要执行的操作 -function handleElement() { - clearReady(); //预备element每次处理都先处理掉 - if (nodeList.length > 1) { //选中了许多element的情况 - app._data.option = relatedTest(); - if (app._data.option == 100) { - generateMultiParameters(); - } else { - generateParameters(0); - } - } else if (nodeList.length == 1) { - findRelated(); //寻找和element相关的element - } -} - -function clearParameters(deal = true) //清空para列表 -{ - if (deal) //是否Cancel对选中的子element进行处理 - { - app._data.selectedDescendents = false; - } - for (o of outputParameterNodes) { - o["node"].style.boxShadow = o["boxShadow"]; - } - outputParameterNodes.splice(0); - outputParameters.splice(0); //清空原来的para列表 - app._data.valTable = []; //清空展现数组 - app._data.selectStatus = false; -} - - -//根据nodelist列表内的element生成para列表 -//适合:nodelist中的element为同类型element -//type:0为全部text 1为节点内直接的文字 2为innerhtml 3为outerhtml -//nodetype:0,对应全type0123 -//nodetype:1 link, 对应type0123 -//nodetype:2 linkAddress 对应type0 -//nodetype:3 按钮和输入text box 对应type -//nodetype:4 按钮和输入text box 对应type - -function generateParameters(type, linktext = true, linkhref = true) { - clearParameters(false); - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - for (let num = 0; num < nodeList.length; num++) { - let nd = nodeList[num]["node"]; - ndPath = nodeList[num]["xpath"]; - outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); - nd.style.boxShadow = boxShadowColor; - let pname = "text"; - let ndText = ""; - if (type == 0) { - ndText = $(nd).text(); - pname = "text"; - if (nd.tagName == "IMG") { - ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); - pname = "Address"; - } else if (nd.tagName == "INPUT") { - ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); - } - } else if (type == 1) { - ndText = $(nd).contents().filter(function() { return this.nodeType === 3; }).text().replace(/\s+/g, ''); - pname = "text"; - if (nd.tagName == "IMG") { - ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); - pname = "Address"; - } else if (nd.tagName == "INPUT") { - ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); - } - } else if (type == 2) { - ndText = $(nd).html(); - pname = "Innerhtml"; - } else if (type == 3) { - ndText = $(nd).prop("outerHTML"); - pname = "outerHTML"; - } - if (num == 0) { //第一个节点新建, 后面的增加即可 - if (nd.tagName == "IMG") { //如果element是Image - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_Image" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } else if (nd.tagName == "A") { //如果element是超链接 - if (linktext) { - outputParameters.push({ - "nodeType": 1, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_link" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - if (linkhref) { - outputParameters.push({ - "nodeType": 2, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linkAddress", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] - }); - } - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - } else { //如果element节点Already 经存在, 则只需要插入值就可以了 - if (nd.tagName == "IMG") { //如果element是Image - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - outputParameters[1]["exampleValues"].push({ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } else { //其他所有情况 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } - } - } - let at2 = parseInt(new Date().getTime()); - console.log("generateParameters:", at2, at, at2 - at); - generateValTable(); - console.log(outputParameters); - - }); - -} - -//根据nodelist列表内的element生成para列表 -//适合:nodelist中的element为不同类型element -function generateMultiParameters() { - clearParameters(false); - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - for (let num = 0; num < nodeList.length; num++) { - let nd = nodeList[num]["node"]; - ndPath = nodeList[num]["xpath"]; - outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); - nd.style.boxShadow = boxShadowColor; - ndText = $(nd).text(); - if (nd.tagName == "IMG") { //如果element是Image - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_imageAddress", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") }] - }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters.push({ - "nodeType": 1, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linktext", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": ndText }] - }); - outputParameters.push({ - "nodeType": 2, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linkAddress", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] - }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": ndText }] - }); - } - } - // console.log(outputParameters); - let at2 = parseInt(new Date().getTime()); - console.log("generateMultiParameters", at2, at, at2 - at); - generateValTable(false); - }); - -} - - -//处理子element,对于每个块中多出的特殊element, 需要特殊处理 -function handleDescendents() { - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - clearParameters(); //清除原来的para列表 - app._data.selectedDescendents = true; - for (let num = 0; num < nodeList.length; num++) { - let tnode = nodeList[num]["node"]; - let stack = new Array(); //深度优先搜索遍历element - stack.push(tnode); //从此节点开始 - while (stack.length > 0) { - let nd = stack.pop(); // 挨个取出element - if (nd.parentNode.tagName == "A" && nd.tagName == "SPAN") { - continue; //对A标签内的SPANelement不进行处理,剪枝, 此时子element根本不加入stack, 即实现了此功能 - } - ndPath = readXPath(nd, 1, tnode); - let index = -1; - for (let i = 0; i < outputParameters.length; i++) { - if (outputParameters[i]["relativeXpath"] == ndPath) { - index = i; - break; - } - } - outputParameterNodes.push({ - "node": nd, - "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow - }); - nd.style.boxShadow = boxShadowColor; - ndText = $(nd).contents().filter(function() { - return this.nodeType === 3; - }).text().replace(/\s+/g, ''); - if (index == -1) { //从第二个节点开始, 只插入那些不在para列表中的element, 根据xpath进行寻址 - //如果当前节点除了子element外仍然有其他文字或者该element是Image/表单项, 加入子element节点 - if (ndText != "" || nd.tagName == "IMG" || nd.tagName == "INPUT" || nd.tagName == "A") { - if (nd.tagName == "IMG") { //如果element是Image - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径,注意当只selection了子element没有Select All的时候, 需要判断 - "name": "para" + (n++) + "_imageAddress", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), //同理需要判断 - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") - }] - }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters.push({ - "nodeType": 1, - "contentType": 0, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linktext", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ "num": num, "value": $(nd).text() }] //注意这里的ndtext是整个a的文字!!! - }); - outputParameters.push({ - "nodeType": 2, - "contentType": 0, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linkAddress", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") - }] - }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") - }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - } - } else //如果element节点Already 经存在, 则只需要插入值就可以了 - { - if (nd.tagName == "IMG") { //如果element是Image - outputParameters[index]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") - }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters[index]["exampleValues"].push({ "num": num, "value": $(nd).text() }); - outputParameters[index + 1]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") - }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters[index]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") - }); - } else { //其他所有情况 - outputParameters[index]["exampleValues"].push({ "num": num, "value": ndText }); - } - } - for (let i = nd.children.length - 1; i >= 0; i--) { - stack.push(nd.children[i]); - } - } - } - let at2 = parseInt(new Date().getTime()); - console.log("Select child elements", at2, at, at2 - at); - generateValTable(); - }); - -} - - -//根据para列表生成可视化para界面 -function generateValTable(multiline = true) { - let paravalues = []; - for (let i = 0; i < outputParameters.length; i++) { - let tvalues = []; - let tindex = 0; - let l = multiline ? nodeList.length : 1; - for (let j = 0; j < l; j++) { - //注意第一个循环条件, index超出界限了就不需要再寻找了, 其他的全是空 - if (tindex < outputParameters[i]["exampleValues"].length && outputParameters[i]["exampleValues"][tindex]["num"] == j) { - tvalues.push(outputParameters[i]["exampleValues"][tindex]["value"]); - tindex++; - } else { - tvalues.push(" "); - } - } - paravalues.push(tvalues); - } - app._data.valTable = paravalues; -} - -// 选中第一个节点, 自动寻找同类节点 -// 方法:/div[1]/div[2]/div[2]/a[1] -// 从倒数第一个节点开始找, 看去掉方括号之后是否element数目变多, 如上面的变成/div[1]/div[2]/div[2]/a -// 如果没有, 则恢复原状, 然后试试倒数第二个:/div[1]/div[2]/div/a[1] -// 直到找到第一个变多的节点或者追溯到根节点为止 -function findRelated() { - let at = parseInt(new Date().getTime()); - let testPath = nodeList[0]["xpath"].split("/").splice(1); //分离xpath成 ["html","body","div[0]"]这样子 - let nodeNameList = []; - let nodeIndexList = []; - for (i = 0; i < testPath.length; i++) { - nodeNameList.push(testPath[i].split("[")[0]); - if (testPath[i].indexOf("[") >= 0) { //如果存在索引值 - nodeIndexList.push(parseInt(testPath[i].split("[")[1].replace("]", ""))); //只留下数字 - } else { - nodeIndexList.push(-1); - } - } - var tempPath = ""; - for (let i = nodeIndexList.length - 1; i >= 0; i--) { - if (nodeIndexList[i] == -1) { //没有索引值直接跳过 - continue; - } - tempIndexList = [...nodeIndexList]; //复刻一个index数组 - tempIndexList[i] = -1; //删除索引值 - tempPath = combineXpath(nodeNameList, tempIndexList); //生成新的xpath - var result = document.evaluate(tempPath, document, null, XPathResult.ANY_TYPE, null); - result.iterateNext(); //枚举第一个element - if (result.iterateNext() != null) { //如果能枚举到第二个element, 说明存在同类element,选中同类element, 结束循环 - app.$data.nowPath = tempPath; //标记此elementxpath - pushToReadyList(tempPath); - break; - } - } - let at2 = parseInt(new Date().getTime()); - console.log("findRelated:", at2, at, at2 - at); -} - - -//根据path将element放入readylist中 -function pushToReadyList(path) { - result = document.evaluate(path, document, null, XPathResult.ANY_TYPE, null); - var node = result.iterateNext(); //枚举第一个element - while (node) { //只添加不在Already 选中列表内的element - let exist = false; - for (o of nodeList) { - if (o["node"] == node) { - exist = true; - break; - } - } - if (!exist) { - readyList.push({ "node": node, "bgColor": node.style.backgroundColor, "boxShadow": node.style.boxShadow == "" || boxShadowColor ? "none" : node.style.boxShadow }); - } - node.style.boxShadow = boxShadowColor; - node = result.iterateNext(); //枚举下一个element - } -} - -//将readyList中的element放入选中节点中 -function readyToList(step, dealparameters = true) { - for (o of readyList) { - nodeList.push({ node: o["node"], "step": step, bgColor: o["bgColor"], "boxShadow": o["boxShadow"], xpath: readXPath(o["node"], 1) }); - o["node"].style.backgroundColor = selectedColor; - } - clearReady(); - if (dealparameters) { //防止出现先Select child elements再Select All失效的问题 - generateParameters(0); //根据nodelist列表内的element生成para列表, 0代表纯text - } - -} - -//根据节点列表和索引列表生成XPATH -// 如:["html","body","div"],[-1,-1,2],生成/html/body/div[2] -function combineXpath(nameList, indexList) { - let finalPath = ""; - for (i = 0; i < nameList.length; i++) { - finalPath = finalPath + "/" + nameList[i]; - if (indexList[i] != -1) { - finalPath = finalPath + "[" + indexList[i] + "]"; - } - } - return finalPath; -} - -//专门测试Already 经选中的这些element之间有没有相关性 -// 举例: -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[1]/div[3]/a[22] -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[2]/div[3]/a[25] -// 最终转换为: -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div/div[3]/a -function relatedTest() { - let at = new Date().getTime() - var testList = []; - var testpath = ""; - for (i = 0; i < nodeList.length; i++) { - var testnumList = []; //用于比较节点索引号不同 - var tpath = nodeList[i]["xpath"].split("/").splice(1); //清理第一个空element - for (j = 0; j < tpath.length; j++) { - if (tpath[j].indexOf("[") >= 0) { //如果存在索引值 - testnumList.push(parseInt(tpath[j].split("[")[1].replace("]", ""))); //只留下数字 - } else { - testnumList.push(-1); - } - tpath[j] = tpath[j].split("[")[0]; - } - tp = tpath.join("/"); - if (i > 0 && testpath != tp) { //如果去除括号后element内存在不一致情况, 直接返回默认情况代码100 - app.$data.nowPath = ""; //标记此elementxpath - return 100; - } - testpath = tp; - testList.push(testnumList); - } - testpath = testpath.split("/"); //清理第一个空element - var indexList = []; //记录新生成的xpath - //如果选中的element属于同样的序列, 则计算出序列的最佳xpath表达式 - for (j = 0; j < testList[0].length; j++) { - indexList.push(testList[0][j]); - for (i = 1; i < testList.length; i++) { - if (testList[i][j] != testList[i - 1][j]) { - indexList[j] = -1; //不一致就记录成-1 - break; - } - } - } - var finalPath = combineXpath(testpath, indexList); - app.$data.nowPath = finalPath; //标记此elementxpath - pushToReadyList(finalPath); - let at2 = parseInt(new Date().getTime()); - console.log("手动:", at2, at, at2 - at); - return 50; //先返回给默认码 -} - -//实现提示 box拖拽功能 -$('.tooldrag').mousedown(function(e) { - // e.pageX - var positionDiv = $(this).offset(); - var distanceX = e.pageX - positionDiv.left; - var distanceY = e.pageY - positionDiv.top; - //alert(distanceX) - // alert(positionDiv.left); - - $(document).mousemove(function(e) { - var x = e.clientX - distanceX; - var y = e.clientY - distanceY; - - if (x < 0) { - x = 0; - } else if (x > window.innerWidth - $('.tooldrag').outerWidth(true)) { - x = window.innerWidth - $('.tooldrag').outerWidth(true); - } - - if (y < 0) { - y = 0; - } else if (y > window.innerHeight - $('.tooldrag').outerHeight(true)) { - y = window.innerHeight - $('.tooldrag').outerHeight(true); - } - - $('.tooltips').css({ - 'right': window.innerWidth - x - $('.tooltips').outerWidth(true) + 'px', - 'bottom': window.innerHeight - y - $('.tooltips').outerHeight(true) + 'px', - }); - }); - - $(document).mouseup(function() { - $(document).off('mousemove'); - }); -}); \ No newline at end of file diff --git a/Extension/EasySpider_en/scripts/devtools.js b/Extension/EasySpider_en/scripts/devtools.js deleted file mode 100644 index cc74945d..00000000 --- a/Extension/EasySpider_en/scripts/devtools.js +++ /dev/null @@ -1 +0,0 @@ -console.log(`'Allo 'Allo! Devtools Extension`) diff --git a/Extension/EasySpider_en/scripts/jquery-3.4.1.min.js b/Extension/EasySpider_en/scripts/jquery-3.4.1.min.js deleted file mode 100644 index a1c07fd8..00000000 --- a/Extension/EasySpider_en/scripts/jquery-3.4.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0 elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.4.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - } ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box - if ( ( !support.boxSizingReliable() && isBorderBox || - val === "auto" || - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url, options ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - diff --git a/Extension/EasySpider_mac/pages/options.html b/Extension/EasySpider_mac/pages/options.html deleted file mode 100644 index 55f1643b..00000000 --- a/Extension/EasySpider_mac/pages/options.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Options - - - - - - - - - diff --git a/Extension/EasySpider_mac/pages/popup.html b/Extension/EasySpider_mac/pages/popup.html deleted file mode 100644 index 0796bc82..00000000 --- a/Extension/EasySpider_mac/pages/popup.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Popup - - - - -

Visual Web Crawler

- - - - - diff --git a/Extension/EasySpider_mac/scripts/background.js b/Extension/EasySpider_mac/scripts/background.js deleted file mode 100644 index 591d00c5..00000000 --- a/Extension/EasySpider_mac/scripts/background.js +++ /dev/null @@ -1,68 +0,0 @@ -//此变量用于监听是否加载了新的页面(包括新窗口打开),如果是,增加变量值,用于传回后台。 -var tabList = []; //用来记录打开的新的tab的id -var nowTabId = null; -var nowTabIndex = 0; //重要变量!! -const extension = { - ws: null, -}; -chrome.storage.local.set({ "parameterNum": 1 }); //修改默认的参数索引值 -// chrome.tabs.update(6,{"active":true}) //一行就可以切换标签页 -chrome.tabs.onActivated.addListener(function(activeInfo) { - nowTabId = activeInfo.tabId; //记录现在活动的tabid - if (tabList.indexOf(nowTabId) != -1) { - nowTabIndex = tabList.indexOf(nowTabId); - } - -}); -// 监听来自content-script的消息 -chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { - if (request.type == 0) { - if (tabList.indexOf(sender["tab"]["id"]) < 0) { //元素不存在加入数组 - tabList.push(sender["tab"]["id"]); - } - nowTabIndex = tabList.indexOf(nowTabId); - sendResponse({ type: 0, "msg": "Get!" }); //回传一个消息 - } else if (request.type == 1) { //前台询问参数索引值 - sendResponse({ type: 1, "value": parameterNum }); //回传一个消息 - } else if (request.type == 2) { - let message = { - type: 2, //消息类型,2代表键盘输入 - message: { "keyboardStr": "{}{BS}" + request.msg } // {}全选{BS}退格 - }; - extension.ws.send(JSON.stringify(message)); - } else if (request.type == 3) { - let tmsg = request.msg; - tmsg.tabIndex = nowTabIndex; //赋值当前tab的id - let message = { - type: 3, //消息类型,3代表元素增加事件 - from: 0, //0代表从浏览器到流程图,1代表从流程图到浏览器 - message: { "pipe": JSON.stringify(request.msg) } // {}全选{BS}退格 - }; - console.log(message); - extension.ws.send(JSON.stringify(message)); - } -}); - -// 打开一个 web socket -extension.ws = new WebSocket("ws://localhost:8084"); -extension.ws.onopen = function() { - // Web Socket 已连接上,使用 send() 方法发送数据 - console.log("已连接"); - message = { - type: 0, //消息类型,0代表链接操作 - message: { - id: 0, //socket id - } - }; - this.send(JSON.stringify(message)); -}; -extension.ws.onmessage = function(evt) { - evt = JSON.parse(evt.data); - if (evt["type"] == "0") { //0代表更新参数添加索引值 - chrome.storage.local.set({ "parameterNum": parseInt(evt["value"]) }); //修改值 - } -}; -extension.ws.onclose = function() { - // 关闭 websocket - console.log("连接已关闭..."); -}; \ No newline at end of file diff --git a/Extension/EasySpider_mac/scripts/baozhuangscript.js b/Extension/EasySpider_mac/scripts/baozhuangscript.js deleted file mode 100644 index e8a0179d..00000000 --- a/Extension/EasySpider_mac/scripts/baozhuangscript.js +++ /dev/null @@ -1,276 +0,0 @@ -//表现层的处理 - -if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { - throw "serviceGrid"; //如果是服务器网页页面,则不执行工具 -} - -//返回element相对node节点的xpath,默认的node节点是: / -function readXPath(element, type = 1, node = document.body) { - try { - if (type == 0) //type=0代表默认可通过id生成xpath type=1代表只能从根节点生成xpath, nodeList里必须使用绝对xpath! - { - if (element.id !== "") { //判断id属性,如果这个元素有id,则显示//*[@id="xPath"] 形式内容 - return '//*[@id=\"' + element.id + '\"]'; - } - if (element.className != ""){ //如果有class且某个class name只有一个元素,则使用class name生成xpath - console.log("class name: " + element.className); - names = element.className.split(" "); - for (var i = 0; i < names.length; i++) { - if (names[i] != "") { - // return '//*[@class=\"' + names[i] + '\"]'; - console.log('//*[@contains(@class, \"' + names[i] + '\")]'); - elements_of_class = node.getElementsByClassName(names[i]); - console.log("Length of elements_of_class: " + elements_of_class.length); - if(elements_of_class.length == 1){ - return '//*[contains(@class, \"' + names[i] + '\")]' - } - } - } - } - } - //这里需要需要主要字符串转译问题,可参考js 动态生成html时字符串和变量转译(注意引号的作用) - if (element == node) { //递归到body处,结束递归 - if (node == document.body) { - return '/html/' + element.tagName.toLowerCase(); - } else { - return ""; - } - } - var ix = 1, //在nodelist中的位置,且每次点击初始化 - siblings = element.parentNode.childNodes; //同级的子元素 - - for (var i = 0, l = siblings.length; i < l; i++) { - var sibling = siblings[i]; - //如果这个元素是siblings数组中的元素,则执行递归操作;arguments.callee代表当前函数的名称 - if (sibling == element) { - return readXPath(element.parentNode, type, node) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']'; - //如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加 - } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) { - //注意此处,为了防止多计算了插入的操作台的3个div元素导致定位错误,这里需要屏蔽掉三个元素的索引号 - if(sibling.id != "wrapperDiv" && sibling.id != "wrapperTdiv" &&sibling.id != "wrapperToolkit"){ - ix++; - } - } - } - } catch { - return "/" - } -}; - -//创造div作为选中元素后的样式存在 -var div = document.createElement('div'); -div.style.zIndex = -2147483647; -div.setAttribute("id", "wrapperDiv"); -div.style.position = "fixed"; -div.style.boxSizing = "border-box"; -div.style.border = "dotted"; - -var tdiv = document.createElement('div'); -tdiv.style.zIndex = 2147483647; -tdiv.style.position = "fixed"; -tdiv.setAttribute("id", "wrapperTdiv"); -tdiv.classList = "tdiv"; -tdiv.style.top = "0px"; -tdiv.style.width = "3000px"; -tdiv.style.height = "3000px"; -tdiv.style.pointerEvents = "none"; - -var mousemovebind = false; //如果出现元素默认绑定了mousemove事件导致匹配不到元素的时候,开启第二种模式获得元素 - -var toolkit = document.createElement("div") -toolkit.classList = "tooltips"; //添加样式 -toolkit.setAttribute("id", "wrapperToolkit"); - -var tooltips = false; //标记鼠标是否在提示框上 - -var defaultbgColor = 'rgba(221,221,255,0.8)'; //移动到元素的背景颜色 -var selectedColor = "rgba(151,255,255, 0.6)"; //选中元素的背景颜色 -var boxShadowColor = "blue 0px 0px 5px"; //待选元素的边框属性 - - -//右键菜单屏蔽 -document.oncontextmenu = () => false; -var nodeList = []; //已被选中的节点列表 -var readyList = []; //预备选中的list -var outputParameters = []; //输出参数列表 -var outputParameterNodes = []; //输出参数节点列表 -NowNode = null; -var xnode = null; -var step = 0; //记录这是第几次点击操作 -var style = ""; //记录上个元素的颜色 -document.addEventListener("mousemove", function() { - if (mousemovebind) { - tdiv.style.pointerEvents = "none"; - } - - //如果鼠标在元素框内则点击和选中失效 - var x = event.clientX; - var y = event.clientY; - var divx1 = toolkit.offsetLeft; - var divy1 = toolkit.offsetTop; - var divx2 = toolkit.offsetLeft + toolkit.offsetWidth; - var divy2 = toolkit.offsetTop + toolkit.offsetHeight; - if (x >= divx1 && x <= divx2 && y >= divy1 && y <= divy2) { - tooltips = true; - return; - } - oe = document.elementFromPoint(event.x, event.y); - if (oe == tdiv) { - return; - } - tooltips = false; - NowNode = oe; - te = 0; - exist = 0; - exist2 = 0; - for (o of nodeList) { - if (o["node"] == oe) { - exist = 1; - break; - } - } - for (o of nodeList) { - if (o["node"] == xnode) { - exist2 = 1; - break; - } - } - // console.log(oe); - if (xnode == null) { - xnode = oe; - } - if (xnode != oe) { - if (exist2 == 0) { //如果上个元素不在数组里,改回上个元素的初始颜色 - try { - xnode.style.backgroundColor = style; //上个元素改回原来元素的背景颜色 - } catch { - xnode.style.backgroundColor = ""; //上个元素改回原来元素的背景颜色 - } - } - - try { - style = oe.style.backgroundColor; - } catch { - style = ""; - } - - if (exist == 1) { - - } else { - try { - oe.style.backgroundColor = defaultbgColor; //设置新元素的背景元素 - } catch {} - - } - xnode = oe; - div.style.display = "none"; - } - if (mousemovebind) { - tdiv.style.pointerEvents = ""; - } - -}); - -//点击没反应时候的替代方案 -document.onkeydown = function(event) { - // console.log("keydown"); - var e = event || window.event || arguments.callee.caller.arguments[0]; - if (e && e.keyCode == 118) { // 按 F7 - addEl(); - } else if (e && e.keyCode == 119) { //按F8 - clearEl(); - } else if (e && e.keyCode == 120) { //按F9 - NowNode.focus(); - NowNode.click(); - // console.log("click",NowNode); - } else { - return event.keyCode; - } -}; - -//选中元素到列表中 -function addEl() { - // if (tooltips) { - // return; - // } - let exist = false; - for (o of nodeList) { - if (o["node"] == oe) { - exist = true; - break; - } - } - //元素没有被添加过才去添加 - if (!exist) { - step++; - exist = false; //判断刚加入的元素是否在readyList中,如果在,则将所有readylist中的元素全部放入list中 - for (o of readyList) { - if (o["node"] == oe) { - exist = true; - break; - } - } - if (exist) { //存在在readylist就全选中 - readyToList(step); - if (app._data.selectedDescendents) { - handleDescendents(); //如果之前有选中子元素,新加入的节点又则这里也需要重新选择子元素 - } - } else //不然只添加一个元素 - { - clearReady(); //readylist清零重新算 - nodeList.push({ node: NowNode, "step": step, bgColor: style, "boxShadow": NowNode.style.boxShadow == "" || boxShadowColor ? "none" : NowNode.style.boxShadow, xpath: readXPath(NowNode, 1) }); - NowNode.style.backgroundColor = selectedColor; - } - handleElement(); //处理新状态 - - //将虚线框显示在元素上方但屏蔽其鼠标操作 - var pos = NowNode.getBoundingClientRect(); - div.style.display = "block"; - div.style.height = NowNode.offsetHeight + "px"; - div.style.width = NowNode.offsetWidth + "px"; - div.style.left = pos.left + "px"; - div.style.top = pos.top + "px"; - div.style.zIndex = 2147483645; - div.style.pointerEvents = "none"; - } - // console.log("------"); - // for (i = 0; i < nodeList.length; i++) { - // console.log(nodeList[i]["xpath"]); - // } - //对于可点击元素,屏蔽a标签默认点击事件 - event.stopImmediatePropagation(); - event.stopPropagation(); - event.preventDefault ? event.preventDefault() : event.returnValue = false; -} -document.addEventListener("mousedown", addEl); -toolkit.addEventListener("mousedown", function(e) { e.stopPropagation(); }); //重新定义toolkit里的点击事件 -//清除选择项 -function clearEl() { - //如果最后停留的元素被选中,则调整此元素的style为原始style,否则不进行调整 - for (node of nodeList) { - node["node"].style.backgroundColor = node["bgColor"]; - node["node"].style.boxShadow = node["boxShadow"]; - if (NowNode == node["node"]) { - style = node["bgColor"]; - } - } - step = 0; - clearReady(); - clearParameters(); - nodeList.splice(0, nodeList.length); //清空数组 - app._data.option = 0; //选项重置 - app._data.page = 0; //恢复原始页面 -} - -//清除预备数组 -function clearReady() { - for (node of readyList) //节点列表状态恢复原状 - { - node["node"].style.boxShadow = node["boxShadow"]; - } - readyList.splice(0, readyList.length); //清空数组 -} -document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 -document.body.append(tdiv); -document.body.append(toolkit); -var timer; \ No newline at end of file diff --git a/Extension/EasySpider_mac/scripts/contentscript.js b/Extension/EasySpider_mac/scripts/contentscript.js deleted file mode 100644 index 8d7f7c72..00000000 --- a/Extension/EasySpider_mac/scripts/contentscript.js +++ /dev/null @@ -1,933 +0,0 @@ -//表现逻辑层的处理 - -if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { - throw "serviceGrid"; //如果是服务器网页页面, 则不执行工具 -} - -//Vueelement -var app; -generateToolkit(); -//生成Toolkit -function generateToolkit() { - $(".tooltips").html(` -
-
✍Operation Toolbox (Can drag)
-
-
- -

Special click mode

-
-

● When your mouse moves to the element, please right-click your mouse button or press F7 on the keyboard to select it.

-

● You can click the back button to go back to the page

- {{initial()}} -
-
-
- ● Already selected {{numOfList()}} {{tname()}}, meanwhile we find {{numOfReady()}} element with the same type, you can: - -
-
- -
- -
- ● Already selected the follwoing element, you can: - -
- -
- ● Already selected {{numOfList()}} similar elements, and we find other{{numOfReady()}} similar elements, you can: - -
- -
- -
-
{{setWidth("350px")}} - - - - -
{{i["name"]}}Delete -
- - - - - - -
{{valTable[j-1][i-1]}}×
-
-
- -
{{setWidth("290px")}}
- -
-
- - -
-

{{lastElementXPath()}}

-
-
-
- ● Please input text: - - - -
-
-
-
-`); - app = new Vue({ - el: '#realcontent', - data: { - option: 0, - list: { nl: nodeList, opp: outputParameters }, - valTable: [], // 用来存储转换后的para列表 - special: false, //是否为特殊selection模式 - selectedDescendents: false, // 标记是否选中了子element - selectStatus: false, //标记单个element是否点击了采集 - page: 0, //默认页面, 1为输入文字页面 - text: "", // 记录输入的文字 - tNodeName: "", // 记录临时节点列表 - nowPath: "", //现在element的xpath - }, - watch: { - nowPath: { //变量发生变化的时候进行一些操作 - handler: function(newVal, oldVal) { - console.log("xpath:", newVal); - } - } - }, - methods: { - initial: function() { //每当element是0的时候, 执行值的初始化操作 - this.selectedDescendents = false; - this.selectStatus = false; - this.nowPath = ""; - }, - confirmCollectSingle: function() { //单element确认采集 - collectSingle(); - clearEl(); - }, - confirmCollectMulti: function() { //无规律多element确认采集 - collectMultiNoPattern(); - clearEl(); - }, - confirmCollectMultiAndDescendents: function() { //有规律多element确认采集 - collectMultiWithPattern(); - clearEl(); - }, - deleteSingleLine: function(event) { //删除单行element - let at = new Date().getTime() - //流程图送element的时候, 默认的使用不固定循环列表, 但是一旦有删除element的操作发生, 则按照固定element列表采集element - index = event.target.getAttribute("index"); - let tnode = nodeList.splice(index, 1)[0]; //删掉当前element - tnode["node"].style.backgroundColor = tnode["bgColor"]; - tnode["node"].style.boxShadow = tnode["boxShadow"]; - if (nodeList.length > 1) { // 如果删到没有就没有其他的操作了 - handleElement(); - if (this.selectedDescendents) { - handleDescendents(); //如果之前有Select child elements, 新加入的节点又则这里也需要重新selection子element - } - } else { - this.valTable = []; - this.selectStatus = false; - clearParameters(); //直接Revoke 重选 - } - let at2 = parseInt(new Date().getTime()); - console.log("delete:", at2, at, at2 - at); - }, - clickElement: function() { //点击element操作 - sendSingleClick(); - //先发送数据 - nodeList[0]["node"].focus(); //获得element焦点 - nodeList[0]["node"].click(); //点击element - clearEl(); - }, - loopClickSingleElement: function() { //循环点击单个element - sendLoopClickSingle(this.tname()); //识别下一页,循环点击单个element和点击多个element - if (this.tname() != "Elements in next page") { //Elements in next page不进行点击操作 - nodeList[0]["node"].focus(); //获得element焦点 - nodeList[0]["node"].click(); //点击element - } - clearEl(); - }, - loopClickEveryElement: function() { //循环点击每个element - sendLoopClickEvery(); //识别下一页,循环点击单个element和点击多个element - nodeList[0]["node"].focus(); //获得element焦点 - nodeList[0]["node"].click(); //点击element - clearEl(); - }, - setInput: function() { //输入文字 - this.page = 1; - this.$nextTick(function() { //下一时刻获得焦点 - document.getElementById("WTextBox").focus(); - }) - }, - getInput: function() { //得到输入的文字 - nodeList[0]["node"].focus(); //获得文字焦点 - nodeList[0]["node"].setAttribute("value", this.text); // 设置输入 box内容 - input(this.text); // 设置输入 - this.text = ""; - clearEl(); - }, - cancelInput: function() { - this.page = 0; - }, - setWidth: function(width) { //根据是否出现表格调整最外 box宽度 - $(".tooltips").css("width", width); - return ""; - }, - getText: function() { //采集文字 - generateParameters(0, true, false); - this.selectStatus = true; - clearReady(); - }, - getLink: function() { //采集linkAddress - generateParameters(0, false, true); - this.selectStatus = true; - clearReady(); - }, - getOuterHtml: function() { //采集OuterHtml - generateParameters(3, true, false); - this.selectStatus = true; - clearReady(); - }, - getInnerHtml: function() { //采集InnerHtml - generateParameters(2, true, false); - this.selectStatus = true; - clearReady(); - }, - tname: function() { - let tag = nodeList.length == 0 ? "" : nodeList[0]["node"].tagName; - let inputType = nodeList.length == 0 ? "" : nodeList[0]["node"].getAttribute("type"); - if (inputType != null) { //如果没有type属性, 则默认为text - inputType = inputType.toLowerCase(); - } else { - inputType = "text"; - } - if (tag == "") { - return "null"; - } else if ($(nodeList[0]["node"]).contents().filter(function() { return this.nodeType === 3; }).text().indexOf("Next") >= 0) { - this.setWidth("310px"); - return "Elements in next page"; - } else if (tag == "A") { - return "link"; - } else if (tag == "IMG") { - return "Image"; - } else if (tag == "BUTTON" || (tag == "INPUT" && (inputType == "button" || inputType == "submit"))) { - return "Button"; - } else if (tag == "TEXTAREA" || (tag == "INPUT" && (inputType != "checkbox" || inputType != "ratio"))) { //普通输入 box - return "text box"; - } else if (tag == "SELECT") { - return "selection box"; - } else { - return "element"; - } - }, - existDescendents: function() { //检测选中的element是否存在子element,Already 经选中了子element也不要再出现了 - return nodeList.length > 0 && nodeList[0]["node"].children.length > 0 && !this.selectedDescendents; - }, - numOfReady: function() { - return readyList.length; - }, - numOfList: function() { - return nodeList.length; - }, - lastElementXPath: function() { //用来显示element的最大最后5个xpath路劲element - path = nodeList[nodeList.length - 1]["xpath"]; - path = path.split("/"); - tp = ""; - if (path.length > 5) { //只保留最后五个element - path = path.splice(path.length - 5, 5); - tp = ".../" - } - for (i = 0; i < path.length; i++) { - path[i] = path[i].split("[")[0]; - } - path = path.join("/"); - path = "Path: " + tp + path; - return path; - }, - cancel: function() { - clearEl(); - }, - specialSelect: function() { //特殊selection模式 - if (mousemovebind) { - tdiv.style.pointerEvents = "none"; - this.special = false; - } else { - this.special = true; - } - mousemovebind = !mousemovebind; - }, - enlarge: function() { // 扩大选区功能, 总是扩大最后一个选中的element的选区 - if (nodeList[nodeList.length - 1]["node"].tagName != "BODY") { - nodeList[nodeList.length - 1]["node"].style.backgroundColor = nodeList[nodeList.length - 1]["bgColor"]; //之前element恢复原来的背景颜色 - nodeList[nodeList.length - 1]["node"].style.boxShadow = nodeList[nodeList.length - 1]["boxShadow"]; //之前element恢复原来的背景颜色 - tNode = nodeList[nodeList.length - 1]["node"].parentNode; //向上走一层 - if (tNode != NowNode) { //扩大选区之后背景颜色的判断, 当前正好选中的颜色应该是不同的 - sty = tNode.style.backgroundColor; - } else { - sty = style; - } - nodeList[nodeList.length - 1]["node"] = tNode; - nodeList[nodeList.length - 1]["bgColor"] = sty; - nodeList[nodeList.length - 1]["xpath"] = readXPath(tNode, 1); - //显示 box - var pos = tNode.getBoundingClientRect(); - div.style.display = "block"; - div.style.height = tNode.offsetHeight + "px"; - div.style.width = tNode.offsetWidth + "px"; - div.style.left = pos.left + "px"; - div.style.top = pos.top + "px"; - div.style.zIndex = 2147483645; - div.style.pointerEvents = "none"; - handleElement(); //每次数组element有变动, 都需要重新处理下 - oe = tNode; - tNode.style.backgroundColor = "rgba(0,191,255,0.5)"; - this.selectedDescendents = false; - } - }, - selectAll: function() { //Select Allelement - step++; - readyToList(step, false); - handleElement(); - if (this.selectedDescendents) { - handleDescendents(); //如果之前有Select child elements, 新加入的节点又则这里也需要重新selection子element - } - }, - revoke: function() { //Revoke selection当前节点 - var tstep = step; - step--; //步数-1 - while (tstep == nodeList[nodeList.length - 1]["step"]) //删掉所有当前步数的element节点 - { - let node = nodeList.splice(nodeList.length - 1, 1)[0]; //删除数组最后一项 - node["node"].style.backgroundColor = node["bgColor"]; //还原原始属性和边 box - node["node"].style.boxShadow = node["boxShadow"]; - if (NowNode == node["node"]) { - style = node["bgColor"]; - } - //处理Already 经有Select child elements的情况 - // if (this.selectedDescendents) { - clearParameters(); //直接Revoke 重选 - // } - } - handleElement(); //每次数组element有变动, 都需要重新处理下 - }, - selectDescendents: function() { //selection所有子element操作 - handleDescendents(); - } - }, - }); - h = $(".tooldrag").height(); - difference = 26 - h; //获得高度值差 - if (difference > 0) { - $(".tooldrag").css("cssText", "height:" + (26 + difference) + "px!important") - } - timer = setInterval(function() { //时刻监测相应element是否存在(防止出现如百度一样element消失重写body的情况), 如果不存在, 添加进来 - if (document.body != null && document.getElementById("wrapperToolkit") == null) { - this.clearInterval(); //先Cancel原来的计时器, 再设置新的计时器 - document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 - document.body.append(tdiv); - document.body.append(toolkit); - generateToolkit(); - // var list = document.getElementsByTagName("a"); - // // 对于没有特殊绑定函数的a标签, 使他们在新标签页中打开 - // for (var i = 0; i < list.length; i++) { - // if (list[i].href.indexOf("javascript") == -1 && list[i].href.indexOf("void") == -1 && list[i].href.indexOf("#") == -1 && list[i].href) { - // list[i].setAttribute("target", "_blank"); - // } - // }; - // list = document.getElementsByTagName("form"); - // // 对于没有特殊绑定函数的form标签, 使他们在新标签页中打开 - // for (var i = 0; i < list.length; i++) { - // list[i].setAttribute("target", "_blank"); - // }; - } - }, 3000); -} - -//每次对element进行增删之后需要执行的操作 -function handleElement() { - clearReady(); //预备element每次处理都先处理掉 - if (nodeList.length > 1) { //选中了许多element的情况 - app._data.option = relatedTest(); - if (app._data.option == 100) { - generateMultiParameters(); - } else { - generateParameters(0); - } - } else if (nodeList.length == 1) { - findRelated(); //寻找和element相关的element - } -} - -function clearParameters(deal = true) //清空para列表 -{ - if (deal) //是否Cancel对选中的子element进行处理 - { - app._data.selectedDescendents = false; - } - for (o of outputParameterNodes) { - o["node"].style.boxShadow = o["boxShadow"]; - } - outputParameterNodes.splice(0); - outputParameters.splice(0); //清空原来的para列表 - app._data.valTable = []; //清空展现数组 - app._data.selectStatus = false; -} - - -//根据nodelist列表内的element生成para列表 -//适合:nodelist中的element为同类型element -//type:0为全部text 1为节点内直接的文字 2为innerhtml 3为outerhtml -//nodetype:0,对应全type0123 -//nodetype:1 link, 对应type0123 -//nodetype:2 linkAddress 对应type0 -//nodetype:3 按钮和输入text box 对应type -//nodetype:4 按钮和输入text box 对应type - -function generateParameters(type, linktext = true, linkhref = true) { - clearParameters(false); - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - for (let num = 0; num < nodeList.length; num++) { - let nd = nodeList[num]["node"]; - ndPath = nodeList[num]["xpath"]; - outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); - nd.style.boxShadow = boxShadowColor; - let pname = "text"; - let ndText = ""; - if (type == 0) { - ndText = $(nd).text(); - pname = "text"; - if (nd.tagName == "IMG") { - ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); - pname = "Address"; - } else if (nd.tagName == "INPUT") { - ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); - } - } else if (type == 1) { - ndText = $(nd).contents().filter(function() { return this.nodeType === 3; }).text().replace(/\s+/g, ''); - pname = "text"; - if (nd.tagName == "IMG") { - ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); - pname = "Address"; - } else if (nd.tagName == "INPUT") { - ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); - } - } else if (type == 2) { - ndText = $(nd).html(); - pname = "Innerhtml"; - } else if (type == 3) { - ndText = $(nd).prop("outerHTML"); - pname = "outerHTML"; - } - if (num == 0) { //第一个节点新建, 后面的增加即可 - if (nd.tagName == "IMG") { //如果element是Image - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_Image" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } else if (nd.tagName == "A") { //如果element是超链接 - if (linktext) { - outputParameters.push({ - "nodeType": 1, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_link" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - if (linkhref) { - outputParameters.push({ - "nodeType": 2, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linkAddress", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] - }); - } - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_" + pname, - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - } else { //如果element节点Already 经存在, 则只需要插入值就可以了 - if (nd.tagName == "IMG") { //如果element是Image - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - outputParameters[1]["exampleValues"].push({ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } else { //其他所有情况 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } - } - } - let at2 = parseInt(new Date().getTime()); - console.log("generateParameters:", at2, at, at2 - at); - generateValTable(); - console.log(outputParameters); - - }); - -} - -//根据nodelist列表内的element生成para列表 -//适合:nodelist中的element为不同类型element -function generateMultiParameters() { - clearParameters(false); - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - for (let num = 0; num < nodeList.length; num++) { - let nd = nodeList[num]["node"]; - ndPath = nodeList[num]["xpath"]; - outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); - nd.style.boxShadow = boxShadowColor; - ndText = $(nd).text(); - if (nd.tagName == "IMG") { //如果element是Image - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_imageAddress", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") }] - }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters.push({ - "nodeType": 1, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linktext", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": ndText }] - }); - outputParameters.push({ - "nodeType": 2, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linkAddress", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] - }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": ndText }] - }); - } - } - // console.log(outputParameters); - let at2 = parseInt(new Date().getTime()); - console.log("generateMultiParameters", at2, at, at2 - at); - generateValTable(false); - }); - -} - - -//处理子element,对于每个块中多出的特殊element, 需要特殊处理 -function handleDescendents() { - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - clearParameters(); //清除原来的para列表 - app._data.selectedDescendents = true; - for (let num = 0; num < nodeList.length; num++) { - let tnode = nodeList[num]["node"]; - let stack = new Array(); //深度优先搜索遍历element - stack.push(tnode); //从此节点开始 - while (stack.length > 0) { - let nd = stack.pop(); // 挨个取出element - if (nd.parentNode.tagName == "A" && nd.tagName == "SPAN") { - continue; //对A标签内的SPANelement不进行处理,剪枝, 此时子element根本不加入stack, 即实现了此功能 - } - ndPath = readXPath(nd, 1, tnode); - let index = -1; - for (let i = 0; i < outputParameters.length; i++) { - if (outputParameters[i]["relativeXpath"] == ndPath) { - index = i; - break; - } - } - outputParameterNodes.push({ - "node": nd, - "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow - }); - nd.style.boxShadow = boxShadowColor; - ndText = $(nd).contents().filter(function() { - return this.nodeType === 3; - }).text().replace(/\s+/g, ''); - if (index == -1) { //从第二个节点开始, 只插入那些不在para列表中的element, 根据xpath进行寻址 - //如果当前节点除了子element外仍然有其他文字或者该element是Image/表单项, 加入子element节点 - if (ndText != "" || nd.tagName == "IMG" || nd.tagName == "INPUT" || nd.tagName == "A") { - if (nd.tagName == "IMG") { //如果element是Image - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径,注意当只selection了子element没有Select All的时候, 需要判断 - "name": "para" + (n++) + "_imageAddress", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), //同理需要判断 - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") - }] - }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters.push({ - "nodeType": 1, - "contentType": 0, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linktext", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ "num": num, "value": $(nd).text() }] //注意这里的ndtext是整个a的文字!!! - }); - outputParameters.push({ - "nodeType": 2, - "contentType": 0, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_linkAddress", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") - }] - }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") - }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "para" + (n++) + "_text", - "desc": "", //para描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - } - } else //如果element节点Already 经存在, 则只需要插入值就可以了 - { - if (nd.tagName == "IMG") { //如果element是Image - outputParameters[index]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") - }); - } else if (nd.tagName == "A") { //如果element是超链接 - outputParameters[index]["exampleValues"].push({ "num": num, "value": $(nd).text() }); - outputParameters[index + 1]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") - }); - } else if (nd.tagName == "INPUT") { //如果element是输入项 - outputParameters[index]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") - }); - } else { //其他所有情况 - outputParameters[index]["exampleValues"].push({ "num": num, "value": ndText }); - } - } - for (let i = nd.children.length - 1; i >= 0; i--) { - stack.push(nd.children[i]); - } - } - } - let at2 = parseInt(new Date().getTime()); - console.log("Select child elements", at2, at, at2 - at); - generateValTable(); - }); - -} - - -//根据para列表生成可视化para界面 -function generateValTable(multiline = true) { - let paravalues = []; - for (let i = 0; i < outputParameters.length; i++) { - let tvalues = []; - let tindex = 0; - let l = multiline ? nodeList.length : 1; - for (let j = 0; j < l; j++) { - //注意第一个循环条件, index超出界限了就不需要再寻找了, 其他的全是空 - if (tindex < outputParameters[i]["exampleValues"].length && outputParameters[i]["exampleValues"][tindex]["num"] == j) { - tvalues.push(outputParameters[i]["exampleValues"][tindex]["value"]); - tindex++; - } else { - tvalues.push(" "); - } - } - paravalues.push(tvalues); - } - app._data.valTable = paravalues; -} - -// 选中第一个节点, 自动寻找同类节点 -// 方法:/div[1]/div[2]/div[2]/a[1] -// 从倒数第一个节点开始找, 看去掉方括号之后是否element数目变多, 如上面的变成/div[1]/div[2]/div[2]/a -// 如果没有, 则恢复原状, 然后试试倒数第二个:/div[1]/div[2]/div/a[1] -// 直到找到第一个变多的节点或者追溯到根节点为止 -function findRelated() { - let at = parseInt(new Date().getTime()); - let testPath = nodeList[0]["xpath"].split("/").splice(1); //分离xpath成 ["html","body","div[0]"]这样子 - let nodeNameList = []; - let nodeIndexList = []; - for (i = 0; i < testPath.length; i++) { - nodeNameList.push(testPath[i].split("[")[0]); - if (testPath[i].indexOf("[") >= 0) { //如果存在索引值 - nodeIndexList.push(parseInt(testPath[i].split("[")[1].replace("]", ""))); //只留下数字 - } else { - nodeIndexList.push(-1); - } - } - var tempPath = ""; - for (let i = nodeIndexList.length - 1; i >= 0; i--) { - if (nodeIndexList[i] == -1) { //没有索引值直接跳过 - continue; - } - tempIndexList = [...nodeIndexList]; //复刻一个index数组 - tempIndexList[i] = -1; //删除索引值 - tempPath = combineXpath(nodeNameList, tempIndexList); //生成新的xpath - var result = document.evaluate(tempPath, document, null, XPathResult.ANY_TYPE, null); - result.iterateNext(); //枚举第一个element - if (result.iterateNext() != null) { //如果能枚举到第二个element, 说明存在同类element,选中同类element, 结束循环 - app.$data.nowPath = tempPath; //标记此elementxpath - pushToReadyList(tempPath); - break; - } - } - let at2 = parseInt(new Date().getTime()); - console.log("findRelated:", at2, at, at2 - at); -} - - -//根据path将element放入readylist中 -function pushToReadyList(path) { - result = document.evaluate(path, document, null, XPathResult.ANY_TYPE, null); - var node = result.iterateNext(); //枚举第一个element - while (node) { //只添加不在Already 选中列表内的element - let exist = false; - for (o of nodeList) { - if (o["node"] == node) { - exist = true; - break; - } - } - if (!exist) { - readyList.push({ "node": node, "bgColor": node.style.backgroundColor, "boxShadow": node.style.boxShadow == "" || boxShadowColor ? "none" : node.style.boxShadow }); - } - node.style.boxShadow = boxShadowColor; - node = result.iterateNext(); //枚举下一个element - } -} - -//将readyList中的element放入选中节点中 -function readyToList(step, dealparameters = true) { - for (o of readyList) { - nodeList.push({ node: o["node"], "step": step, bgColor: o["bgColor"], "boxShadow": o["boxShadow"], xpath: readXPath(o["node"], 1) }); - o["node"].style.backgroundColor = selectedColor; - } - clearReady(); - if (dealparameters) { //防止出现先Select child elements再Select All失效的问题 - generateParameters(0); //根据nodelist列表内的element生成para列表, 0代表纯text - } - -} - -//根据节点列表和索引列表生成XPATH -// 如:["html","body","div"],[-1,-1,2],生成/html/body/div[2] -function combineXpath(nameList, indexList) { - let finalPath = ""; - for (i = 0; i < nameList.length; i++) { - finalPath = finalPath + "/" + nameList[i]; - if (indexList[i] != -1) { - finalPath = finalPath + "[" + indexList[i] + "]"; - } - } - return finalPath; -} - -//专门测试Already 经选中的这些element之间有没有相关性 -// 举例: -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[1]/div[3]/a[22] -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[2]/div[3]/a[25] -// 最终转换为: -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div/div[3]/a -function relatedTest() { - let at = new Date().getTime() - var testList = []; - var testpath = ""; - for (i = 0; i < nodeList.length; i++) { - var testnumList = []; //用于比较节点索引号不同 - var tpath = nodeList[i]["xpath"].split("/").splice(1); //清理第一个空element - for (j = 0; j < tpath.length; j++) { - if (tpath[j].indexOf("[") >= 0) { //如果存在索引值 - testnumList.push(parseInt(tpath[j].split("[")[1].replace("]", ""))); //只留下数字 - } else { - testnumList.push(-1); - } - tpath[j] = tpath[j].split("[")[0]; - } - tp = tpath.join("/"); - if (i > 0 && testpath != tp) { //如果去除括号后element内存在不一致情况, 直接返回默认情况代码100 - app.$data.nowPath = ""; //标记此elementxpath - return 100; - } - testpath = tp; - testList.push(testnumList); - } - testpath = testpath.split("/"); //清理第一个空element - var indexList = []; //记录新生成的xpath - //如果选中的element属于同样的序列, 则计算出序列的最佳xpath表达式 - for (j = 0; j < testList[0].length; j++) { - indexList.push(testList[0][j]); - for (i = 1; i < testList.length; i++) { - if (testList[i][j] != testList[i - 1][j]) { - indexList[j] = -1; //不一致就记录成-1 - break; - } - } - } - var finalPath = combineXpath(testpath, indexList); - app.$data.nowPath = finalPath; //标记此elementxpath - pushToReadyList(finalPath); - let at2 = parseInt(new Date().getTime()); - console.log("手动:", at2, at, at2 - at); - return 50; //先返回给默认码 -} - -//实现提示 box拖拽功能 -$('.tooldrag').mousedown(function(e) { - // e.pageX - var positionDiv = $(this).offset(); - var distanceX = e.pageX - positionDiv.left; - var distanceY = e.pageY - positionDiv.top; - //alert(distanceX) - // alert(positionDiv.left); - - $(document).mousemove(function(e) { - var x = e.clientX - distanceX; - var y = e.clientY - distanceY; - - if (x < 0) { - x = 0; - } else if (x > window.innerWidth - $('.tooldrag').outerWidth(true)) { - x = window.innerWidth - $('.tooldrag').outerWidth(true); - } - - if (y < 0) { - y = 0; - } else if (y > window.innerHeight - $('.tooldrag').outerHeight(true)) { - y = window.innerHeight - $('.tooldrag').outerHeight(true); - } - - $('.tooltips').css({ - 'right': window.innerWidth - x - $('.tooltips').outerWidth(true) + 'px', - 'bottom': window.innerHeight - y - $('.tooltips').outerHeight(true) + 'px', - }); - }); - - $(document).mouseup(function() { - $(document).off('mousemove'); - }); -}); \ No newline at end of file diff --git a/Extension/EasySpider_mac/scripts/devtools.js b/Extension/EasySpider_mac/scripts/devtools.js deleted file mode 100644 index cc74945d..00000000 --- a/Extension/EasySpider_mac/scripts/devtools.js +++ /dev/null @@ -1 +0,0 @@ -console.log(`'Allo 'Allo! Devtools Extension`) diff --git a/Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js b/Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js deleted file mode 100644 index a1c07fd8..00000000 --- a/Extension/EasySpider_mac/scripts/jquery-3.4.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0 elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.4.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - } ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box - if ( ( !support.boxSizingReliable() && isBorderBox || - val === "auto" || - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url, options ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - diff --git a/Extension/EasySpider_zh/pages/options.html b/Extension/EasySpider_zh/pages/options.html deleted file mode 100644 index 55f1643b..00000000 --- a/Extension/EasySpider_zh/pages/options.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Options - - - - - - - - - diff --git a/Extension/EasySpider_zh/pages/popup.html b/Extension/EasySpider_zh/pages/popup.html deleted file mode 100644 index a11a4d89..00000000 --- a/Extension/EasySpider_zh/pages/popup.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Popup - - - - -

服务包装手动版工具

- - - - - diff --git a/Extension/EasySpider_zh/scripts/background.js b/Extension/EasySpider_zh/scripts/background.js deleted file mode 100644 index 325eba8e..00000000 --- a/Extension/EasySpider_zh/scripts/background.js +++ /dev/null @@ -1,66 +0,0 @@ -//此变量用于监听是否加载了新的页面(包括新窗口打开),如果是,增加变量值,用于传回后台。 -var tabList = []; //用来记录打开的新的tab的id -var nowTabId = null; -var nowTabIndex = 0; //重要变量!! - -chrome.storage.local.set({ "parameterNum": 1 }); //修改默认的参数索引值 -// chrome.tabs.update(6,{"active":true}) //一行就可以切换标签页 -chrome.tabs.onActivated.addListener(function(activeInfo) { - nowTabId = activeInfo.tabId; //记录现在活动的tabid - if (tabList.indexOf(nowTabId) != -1) { - nowTabIndex = tabList.indexOf(nowTabId); - } - -}); -// 监听来自content-script的消息 -chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { - if (request.type == 0) { - if (tabList.indexOf(sender["tab"]["id"]) < 0) { //元素不存在加入数组 - tabList.push(sender["tab"]["id"]); - } - nowTabIndex = tabList.indexOf(nowTabId); - sendResponse({ type: 0, "msg": "Get!" }); //回传一个消息 - } else if (request.type == 1) { //前台询问参数索引值 - sendResponse({ type: 1, "value": parameterNum }); //回传一个消息 - } else if (request.type == 2) { - let message = { - type: 2, //消息类型,2代表键盘输入 - message: { "keyboardStr": "{}{BS}" + request.msg } // {}全选{BS}退格 - }; - window.ws.send(JSON.stringify(message)); - } else if (request.type == 3) { - let tmsg = request.msg; - tmsg.tabIndex = nowTabIndex; //赋值当前tab的id - let message = { - type: 3, //消息类型,3代表元素增加事件 - from: 0, //0代表从浏览器到流程图,1代表从流程图到浏览器 - message: { "pipe": JSON.stringify(request.msg) } // {}全选{BS}退格 - }; - console.log(message); - window.ws.send(JSON.stringify(message)); - } -}); - -// 打开一个 web socket -window.ws = new WebSocket("ws://localhost:8084"); -window.ws.onopen = function() { - // Web Socket 已连接上,使用 send() 方法发送数据 - console.log("已连接"); - message = { - type: 0, //消息类型,0代表链接操作 - message: { - id: 0, //socket id - } - }; - this.send(JSON.stringify(message)); -}; -window.ws.onmessage = function(evt) { - evt = JSON.parse(evt.data); - if (evt["type"] == "0") { //0代表更新参数添加索引值 - chrome.storage.local.set({ "parameterNum": parseInt(evt["value"]) }); //修改值 - } -}; -window.ws.onclose = function() { - // 关闭 websocket - console.log("连接已关闭..."); -}; \ No newline at end of file diff --git a/Extension/EasySpider_zh/scripts/baozhuangscript.js b/Extension/EasySpider_zh/scripts/baozhuangscript.js deleted file mode 100644 index f2105e0c..00000000 --- a/Extension/EasySpider_zh/scripts/baozhuangscript.js +++ /dev/null @@ -1,261 +0,0 @@ -//表现层的处理 - -if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { - throw "serviceGrid"; //如果是服务器网页页面,则不执行工具 -} - -//返回element相对node节点的xpath,默认的node节点是: / -function readXPath(element, type = 1, node = document.body) { - try { - if (type == 0) //type=0代表默认可通过id生成xpath type=1代表只能从根节点生成xpath - { - if (element.id !== "") { //判断id属性,如果这个元素有id,则显示//*[@id="xPath"] 形式内容 - return '//*[@id=\"' + element.id + '\"]'; - } - } - //这里需要需要主要字符串转译问题,可参考js 动态生成html时字符串和变量转译(注意引号的作用) - if (element == node) { //递归到body处,结束递归 - if (node == document.body) { - return '/html/' + element.tagName.toLowerCase(); - } else { - return ""; - } - } - var ix = 1, //在nodelist中的位置,且每次点击初始化 - siblings = element.parentNode.childNodes; //同级的子元素 - - for (var i = 0, l = siblings.length; i < l; i++) { - var sibling = siblings[i]; - //如果这个元素是siblings数组中的元素,则执行递归操作;arguments.callee代表当前函数的名称 - if (sibling == element) { - return readXPath(element.parentNode, type, node) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']'; - //如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加 - } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) { - //注意此处,为了防止多计算了插入的操作台的3个div元素导致定位错误,这里需要屏蔽掉三个元素的索引号 - if(sibling.id != "wrapperDiv" && sibling.id != "wrapperTdiv" &&sibling.id != "wrapperToolkit"){ - ix++; - } - } - } - } catch { - return "/" - } -}; - -//创造div作为选中元素后的样式存在 -var div = document.createElement('div'); -div.style.zIndex = -2147483647; -div.setAttribute("id", "wrapperDiv"); -div.style.position = "fixed"; -div.style.boxSizing = "border-box"; -div.style.border = "dotted"; - -var tdiv = document.createElement('div'); -tdiv.style.zIndex = 2147483647; -tdiv.style.position = "fixed"; -tdiv.setAttribute("id", "wrapperTdiv"); -tdiv.classList = "tdiv"; -tdiv.style.top = "0px"; -tdiv.style.width = "3000px"; -tdiv.style.height = "3000px"; -tdiv.style.pointerEvents = "none"; - -var mousemovebind = false; //如果出现元素默认绑定了mousemove事件导致匹配不到元素的时候,开启第二种模式获得元素 - -var toolkit = document.createElement("div") -toolkit.classList = "tooltips"; //添加样式 -toolkit.setAttribute("id", "wrapperToolkit"); - -var tooltips = false; //标记鼠标是否在提示框上 - -var defaultbgColor = 'rgba(221,221,255,0.8)'; //移动到元素的背景颜色 -var selectedColor = "rgba(151,255,255, 0.6)"; //选中元素的背景颜色 -var boxShadowColor = "blue 0px 0px 5px"; //待选元素的边框属性 - - -//右键菜单屏蔽 -document.oncontextmenu = () => false; -var nodeList = []; //已被选中的节点列表 -var readyList = []; //预备选中的list -var outputParameters = []; //输出参数列表 -var outputParameterNodes = []; //输出参数节点列表 -NowNode = null; -var xnode = null; -var step = 0; //记录这是第几次点击操作 -var style = ""; //记录上个元素的颜色 -document.addEventListener("mousemove", function() { - if (mousemovebind) { - tdiv.style.pointerEvents = "none"; - } - - //如果鼠标在元素框内则点击和选中失效 - var x = event.clientX; - var y = event.clientY; - var divx1 = toolkit.offsetLeft; - var divy1 = toolkit.offsetTop; - var divx2 = toolkit.offsetLeft + toolkit.offsetWidth; - var divy2 = toolkit.offsetTop + toolkit.offsetHeight; - if (x >= divx1 && x <= divx2 && y >= divy1 && y <= divy2) { - tooltips = true; - return; - } - oe = document.elementFromPoint(event.x, event.y); - if (oe == tdiv) { - return; - } - tooltips = false; - NowNode = oe; - te = 0; - exist = 0; - exist2 = 0; - for (o of nodeList) { - if (o["node"] == oe) { - exist = 1; - break; - } - } - for (o of nodeList) { - if (o["node"] == xnode) { - exist2 = 1; - break; - } - } - // console.log(oe); - if (xnode == null) { - xnode = oe; - } - if (xnode != oe) { - if (exist2 == 0) { //如果上个元素不在数组里,改回上个元素的初始颜色 - try { - xnode.style.backgroundColor = style; //上个元素改回原来元素的背景颜色 - } catch { - xnode.style.backgroundColor = ""; //上个元素改回原来元素的背景颜色 - } - } - - try { - style = oe.style.backgroundColor; - } catch { - style = ""; - } - - if (exist == 1) { - - } else { - try { - oe.style.backgroundColor = defaultbgColor; //设置新元素的背景元素 - } catch {} - - } - xnode = oe; - div.style.display = "none"; - } - if (mousemovebind) { - tdiv.style.pointerEvents = ""; - } - -}); - -//点击没反应时候的替代方案 -document.onkeydown = function(event) { - // console.log("keydown"); - var e = event || window.event || arguments.callee.caller.arguments[0]; - if (e && e.keyCode == 118) { // 按 F7 - addEl(); - } else if (e && e.keyCode == 119) { //按F8 - clearEl(); - } else if (e && e.keyCode == 120) { //按F9 - NowNode.focus(); - NowNode.click(); - // console.log("click",NowNode); - } else { - return event.keyCode; - } -}; - -//选中元素到列表中 -function addEl() { - // if (tooltips) { - // return; - // } - let exist = false; - for (o of nodeList) { - if (o["node"] == oe) { - exist = true; - break; - } - } - //元素没有被添加过才去添加 - if (!exist) { - step++; - exist = false; //判断刚加入的元素是否在readyList中,如果在,则将所有readylist中的元素全部放入list中 - for (o of readyList) { - if (o["node"] == oe) { - exist = true; - break; - } - } - if (exist) { //存在在readylist就全选中 - readyToList(step); - if (app._data.selectedDescendents) { - handleDescendents(); //如果之前有选中子元素,新加入的节点又则这里也需要重新选择子元素 - } - } else //不然只添加一个元素 - { - clearReady(); //readylist清零重新算 - nodeList.push({ node: NowNode, "step": step, bgColor: style, "boxShadow": NowNode.style.boxShadow == "" || boxShadowColor ? "none" : NowNode.style.boxShadow, xpath: readXPath(NowNode, 1) }); - NowNode.style.backgroundColor = selectedColor; - } - handleElement(); //处理新状态 - - //将虚线框显示在元素上方但屏蔽其鼠标操作 - var pos = NowNode.getBoundingClientRect(); - div.style.display = "block"; - div.style.height = NowNode.offsetHeight + "px"; - div.style.width = NowNode.offsetWidth + "px"; - div.style.left = pos.left + "px"; - div.style.top = pos.top + "px"; - div.style.zIndex = 2147483645; - div.style.pointerEvents = "none"; - } - // console.log("------"); - // for (i = 0; i < nodeList.length; i++) { - // console.log(nodeList[i]["xpath"]); - // } - //对于可点击元素,屏蔽a标签默认点击事件 - event.stopImmediatePropagation(); - event.stopPropagation(); - event.preventDefault ? event.preventDefault() : event.returnValue = false; -} -document.addEventListener("mousedown", addEl); -toolkit.addEventListener("mousedown", function(e) { e.stopPropagation(); }); //重新定义toolkit里的点击事件 -//清除选择项 -function clearEl() { - //如果最后停留的元素被选中,则调整此元素的style为原始style,否则不进行调整 - for (node of nodeList) { - node["node"].style.backgroundColor = node["bgColor"]; - node["node"].style.boxShadow = node["boxShadow"]; - if (NowNode == node["node"]) { - style = node["bgColor"]; - } - } - step = 0; - clearReady(); - clearParameters(); - nodeList.splice(0, nodeList.length); //清空数组 - app._data.option = 0; //选项重置 - app._data.page = 0; //恢复原始页面 -} - -//清除预备数组 -function clearReady() { - for (node of readyList) //节点列表状态恢复原状 - { - node["node"].style.boxShadow = node["boxShadow"]; - } - readyList.splice(0, readyList.length); //清空数组 -} -document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 -document.body.append(tdiv); -document.body.append(toolkit); -var timer; \ No newline at end of file diff --git a/Extension/EasySpider_zh/scripts/contentscript.js b/Extension/EasySpider_zh/scripts/contentscript.js deleted file mode 100644 index df4590d3..00000000 --- a/Extension/EasySpider_zh/scripts/contentscript.js +++ /dev/null @@ -1,933 +0,0 @@ -//表现逻辑层的处理 - -if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) { - throw "serviceGrid"; //如果是服务器网页页面,则不执行工具 -} - -//Vue元素 -var app; -generateToolkit(); -//生成Toolkit -function generateToolkit() { - $(".tooltips").html(` -
-
✍操作提示框(可点此拖动)
-
-
- -

特殊点选模式

-
-

● 鼠标移动到元素上后,请右键点击或者按F7键选中页面元素。

-

● 如果不小心左键点选了元素导致页面跳转,直接后退或者切换回标签页即可。

- {{initial()}} -
-
- -
- -
- -
- ● 已选择了以下元素,您可以: - -
- -
- ● 已选择了{{numOfList()}}个同类元素,另外发现{{numOfReady()}}个同类元素,您可以: - -
- -
- -
-
{{setWidth("290px")}} - - - - -
{{i["name"]}}删除 -
- - - - - - -
{{valTable[j-1][i-1]}}×
-
-
- -
{{setWidth("290px")}}
- -
-
- - -
-

{{lastElementXPath()}}

-
-
-
- ● 请输入文字: - - - -
-
-
-
-`); - app = new Vue({ - el: '#realcontent', - data: { - option: 0, - list: { nl: nodeList, opp: outputParameters }, - valTable: [], // 用来存储转换后的参数列表 - special: false, //是否为特殊选择模式 - selectedDescendents: false, // 标记是否选中了子元素 - selectStatus: false, //标记单个元素是否点击了采集 - page: 0, //默认页面,1为输入文字页面 - text: "", // 记录输入的文字 - tNodeName: "", // 记录临时节点列表 - nowPath: "", //现在元素的xpath - }, - watch: { - nowPath: { //变量发生变化的时候进行一些操作 - handler: function(newVal, oldVal) { - console.log("xpath:", newVal); - } - } - }, - methods: { - initial: function() { //每当元素是0的时候,执行值的初始化操作 - this.selectedDescendents = false; - this.selectStatus = false; - this.nowPath = ""; - }, - confirmCollectSingle: function() { //单元素确认采集 - collectSingle(); - clearEl(); - }, - confirmCollectMulti: function() { //无规律多元素确认采集 - collectMultiNoPattern(); - clearEl(); - }, - confirmCollectMultiAndDescendents: function() { //有规律多元素确认采集 - collectMultiWithPattern(); - clearEl(); - }, - deleteSingleLine: function(event) { //删除单行元素 - let at = new Date().getTime() - //流程图送元素的时候,默认的使用不固定循环列表,但是一旦有删除元素的操作发生,则按照固定元素列表采集元素 - index = event.target.getAttribute("index"); - let tnode = nodeList.splice(index, 1)[0]; //删掉当前元素 - tnode["node"].style.backgroundColor = tnode["bgColor"]; - tnode["node"].style.boxShadow = tnode["boxShadow"]; - if (nodeList.length > 1) { // 如果删到没有就没有其他的操作了 - handleElement(); - if (this.selectedDescendents) { - handleDescendents(); //如果之前有选中子元素,新加入的节点又则这里也需要重新选择子元素 - } - } else { - this.valTable = []; - this.selectStatus = false; - clearParameters(); //直接撤销重选 - } - let at2 = parseInt(new Date().getTime()); - console.log("delete:", at2, at, at2 - at); - }, - clickElement: function() { //点击元素操作 - sendSingleClick(); - //先发送数据 - nodeList[0]["node"].focus(); //获得元素焦点 - nodeList[0]["node"].click(); //点击元素 - clearEl(); - }, - loopClickSingleElement: function() { //循环点击单个元素 - sendLoopClickSingle(this.tname()); //识别下一页,循环点击单个元素和点击多个元素 - if (this.tname() != "下一页元素") { //下一页元素不进行点击操作 - nodeList[0]["node"].focus(); //获得元素焦点 - nodeList[0]["node"].click(); //点击元素 - } - clearEl(); - }, - loopClickEveryElement: function() { //循环点击每个元素 - sendLoopClickEvery(); //识别下一页,循环点击单个元素和点击多个元素 - nodeList[0]["node"].focus(); //获得元素焦点 - nodeList[0]["node"].click(); //点击元素 - clearEl(); - }, - setInput: function() { //输入文字 - this.page = 1; - this.$nextTick(function() { //下一时刻获得焦点 - document.getElementById("WTextBox").focus(); - }) - }, - getInput: function() { //得到输入的文字 - nodeList[0]["node"].focus(); //获得文字焦点 - // nodeList[0]["node"].setAttribute("value", this.text); // 设置输入框内容 - input(this.text); // 设置输入 - this.text = ""; - clearEl(); - }, - cancelInput: function() { - this.page = 0; - }, - setWidth: function(width) { //根据是否出现表格调整最外框宽度 - $(".tooltips").css("width", width); - return ""; - }, - getText: function() { //采集文字 - generateParameters(0, true, false); - this.selectStatus = true; - clearReady(); - }, - getLink: function() { //采集链接地址 - generateParameters(0, false, true); - this.selectStatus = true; - clearReady(); - }, - getOuterHtml: function() { //采集OuterHtml - generateParameters(3, true, false); - this.selectStatus = true; - clearReady(); - }, - getInnerHtml: function() { //采集InnerHtml - generateParameters(2, true, false); - this.selectStatus = true; - clearReady(); - }, - tname: function() { - let tag = nodeList.length == 0 ? "" : nodeList[0]["node"].tagName; - let inputType = nodeList.length == 0 ? "" : nodeList[0]["node"].getAttribute("type"); - if (inputType != null) { //如果没有type属性,则默认为text - inputType = inputType.toLowerCase(); - } else { - inputType = "text"; - } - if (tag == "") { - return "null"; - } else if ($(nodeList[0]["node"]).contents().filter(function() { return this.nodeType === 3; }).text().indexOf("下一页") >= 0) { - this.setWidth("250px"); - return "下一页元素"; - } else if (tag == "A") { - return "链接"; - } else if (tag == "IMG") { - return "图片"; - } else if (tag == "BUTTON" || (tag == "INPUT" && (inputType == "button" || inputType == "submit"))) { - return "按钮"; - } else if (tag == "TEXTAREA" || (tag == "INPUT" && (inputType != "checkbox" || inputType != "ratio"))) { //普通输入框 - return "文本框"; - } else if (tag == "SELECT") { - return "选择框"; - } else { - return "元素"; - } - }, - existDescendents: function() { //检测选中的元素是否存在子元素,已经选中了子元素也不要再出现了 - return nodeList.length > 0 && nodeList[0]["node"].children.length > 0 && !this.selectedDescendents; - }, - numOfReady: function() { - return readyList.length; - }, - numOfList: function() { - return nodeList.length; - }, - lastElementXPath: function() { //用来显示元素的最大最后5个xpath路劲元素 - path = nodeList[nodeList.length - 1]["xpath"]; - path = path.split("/"); - tp = ""; - if (path.length > 5) { //只保留最后五个元素 - path = path.splice(path.length - 5, 5); - tp = ".../" - } - for (i = 0; i < path.length; i++) { - path[i] = path[i].split("[")[0]; - } - path = path.join("/"); - path = "Path: " + tp + path; - return path; - }, - cancel: function() { - clearEl(); - }, - specialSelect: function() { //特殊选择模式 - if (mousemovebind) { - tdiv.style.pointerEvents = "none"; - this.special = false; - } else { - this.special = true; - } - mousemovebind = !mousemovebind; - }, - enlarge: function() { // 扩大选区功能,总是扩大最后一个选中的元素的选区 - if (nodeList[nodeList.length - 1]["node"].tagName != "BODY") { - nodeList[nodeList.length - 1]["node"].style.backgroundColor = nodeList[nodeList.length - 1]["bgColor"]; //之前元素恢复原来的背景颜色 - nodeList[nodeList.length - 1]["node"].style.boxShadow = nodeList[nodeList.length - 1]["boxShadow"]; //之前元素恢复原来的背景颜色 - tNode = nodeList[nodeList.length - 1]["node"].parentNode; //向上走一层 - if (tNode != NowNode) { //扩大选区之后背景颜色的判断,当前正好选中的颜色应该是不同的 - sty = tNode.style.backgroundColor; - } else { - sty = style; - } - nodeList[nodeList.length - 1]["node"] = tNode; - nodeList[nodeList.length - 1]["bgColor"] = sty; - nodeList[nodeList.length - 1]["xpath"] = readXPath(tNode, 1); - //显示框 - var pos = tNode.getBoundingClientRect(); - div.style.display = "block"; - div.style.height = tNode.offsetHeight + "px"; - div.style.width = tNode.offsetWidth + "px"; - div.style.left = pos.left + "px"; - div.style.top = pos.top + "px"; - div.style.zIndex = 2147483645; - div.style.pointerEvents = "none"; - handleElement(); //每次数组元素有变动,都需要重新处理下 - oe = tNode; - tNode.style.backgroundColor = "rgba(0,191,255,0.5)"; - this.selectedDescendents = false; - } - }, - selectAll: function() { //选中全部元素 - step++; - readyToList(step, false); - handleElement(); - if (this.selectedDescendents) { - handleDescendents(); //如果之前有选中子元素,新加入的节点又则这里也需要重新选择子元素 - } - }, - revoke: function() { //撤销选择当前节点 - var tstep = step; - step--; //步数-1 - while (tstep == nodeList[nodeList.length - 1]["step"]) //删掉所有当前步数的元素节点 - { - let node = nodeList.splice(nodeList.length - 1, 1)[0]; //删除数组最后一项 - node["node"].style.backgroundColor = node["bgColor"]; //还原原始属性和边框 - node["node"].style.boxShadow = node["boxShadow"]; - if (NowNode == node["node"]) { - style = node["bgColor"]; - } - //处理已经有选中子元素的情况 - // if (this.selectedDescendents) { - clearParameters(); //直接撤销重选 - // } - } - handleElement(); //每次数组元素有变动,都需要重新处理下 - }, - selectDescendents: function() { //选择所有子元素操作 - handleDescendents(); - } - }, - }); - h = $(".tooldrag").height(); - difference = 26 - h; //获得高度值差 - if (difference > 0) { - $(".tooldrag").css("cssText", "height:" + (26 + difference) + "px!important") - } - timer = setInterval(function() { //时刻监测相应元素是否存在(防止出现如百度一样元素消失重写body的情况),如果不存在,添加进来 - if (document.body != null && document.getElementById("wrapperToolkit") == null) { - this.clearInterval(); //先取消原来的计时器,再设置新的计时器 - document.body.append(div); //默认如果toolkit不存在则div和tdiv也不存在 - document.body.append(tdiv); - document.body.append(toolkit); - generateToolkit(); - // var list = document.getElementsByTagName("a"); - // // 对于没有特殊绑定函数的a标签,使他们在新标签页中打开 - // for (var i = 0; i < list.length; i++) { - // if (list[i].href.indexOf("javascript") == -1 && list[i].href.indexOf("void") == -1 && list[i].href.indexOf("#") == -1 && list[i].href) { - // list[i].setAttribute("target", "_blank"); - // } - // }; - // list = document.getElementsByTagName("form"); - // // 对于没有特殊绑定函数的form标签,使他们在新标签页中打开 - // for (var i = 0; i < list.length; i++) { - // list[i].setAttribute("target", "_blank"); - // }; - } - }, 3000); -} - -//每次对元素进行增删之后需要执行的操作 -function handleElement() { - clearReady(); //预备元素每次处理都先处理掉 - if (nodeList.length > 1) { //选中了许多元素的情况 - app._data.option = relatedTest(); - if (app._data.option == 100) { - generateMultiParameters(); - } else { - generateParameters(0); - } - } else if (nodeList.length == 1) { - findRelated(); //寻找和元素相关的元素 - } -} - -function clearParameters(deal = true) //清空参数列表 -{ - if (deal) //是否取消对选中的子元素进行处理 - { - app._data.selectedDescendents = false; - } - for (o of outputParameterNodes) { - o["node"].style.boxShadow = o["boxShadow"]; - } - outputParameterNodes.splice(0); - outputParameters.splice(0); //清空原来的参数列表 - app._data.valTable = []; //清空展现数组 - app._data.selectStatus = false; -} - - -//根据nodelist列表内的元素生成参数列表 -//适合:nodelist中的元素为同类型元素 -//type:0为全部文本 1为节点内直接的文字 2为innerhtml 3为outerhtml -//nodetype:0,对应全type0123 -//nodetype:1 链接,对应type0123 -//nodetype:2 链接地址 对应type0 -//nodetype:3 按钮和输入文本框 对应type -//nodetype:4 按钮和输入文本框 对应type - -function generateParameters(type, linktext = true, linkhref = true) { - clearParameters(false); - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - for (let num = 0; num < nodeList.length; num++) { - let nd = nodeList[num]["node"]; - ndPath = nodeList[num]["xpath"]; - outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); - nd.style.boxShadow = boxShadowColor; - let pname = "文本"; - let ndText = ""; - if (type == 0) { - ndText = $(nd).text(); - pname = "文本"; - if (nd.tagName == "IMG") { - ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); - pname = "地址"; - } else if (nd.tagName == "INPUT") { - ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); - } - } else if (type == 1) { - ndText = $(nd).contents().filter(function() { return this.nodeType === 3; }).text().replace(/\s+/g, ''); - pname = "文本"; - if (nd.tagName == "IMG") { - ndText = nd.getAttribute("src") == null ? "" : $(nd).prop("src"); - pname = "地址"; - } else if (nd.tagName == "INPUT") { - ndText = nd.getAttribute("value") == null ? "" : nd.getAttribute("value"); - } - } else if (type == 2) { - ndText = $(nd).html(); - pname = "Innerhtml"; - } else if (type == 3) { - ndText = $(nd).prop("outerHTML"); - pname = "outerHTML"; - } - if (num == 0) { //第一个节点新建,后面的增加即可 - if (nd.tagName == "IMG") { //如果元素是图片 - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_图片" + pname, - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } else if (nd.tagName == "A") { //如果元素是超链接 - if (linktext) { - outputParameters.push({ - "nodeType": 1, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_链接" + pname, - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - if (linkhref) { - outputParameters.push({ - "nodeType": 2, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_链接地址", - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] - }); - } - } else if (nd.tagName == "INPUT") { //如果元素是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_" + pname, - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": type, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_" + pname, - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? "" : ndPath, - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - } else { //如果元素节点已经存在,则只需要插入值就可以了 - if (nd.tagName == "IMG") { //如果元素是图片 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } else if (nd.tagName == "A") { //如果元素是超链接 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - outputParameters[1]["exampleValues"].push({ "num": num, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }); - } else if (nd.tagName == "INPUT") { //如果元素是输入项 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } else { //其他所有情况 - outputParameters[0]["exampleValues"].push({ "num": num, "value": ndText }); - } - } - } - let at2 = parseInt(new Date().getTime()); - console.log("generateParameters:", at2, at, at2 - at); - generateValTable(); - console.log(outputParameters); - - }); - -} - -//根据nodelist列表内的元素生成参数列表 -//适合:nodelist中的元素为不同类型元素 -function generateMultiParameters() { - clearParameters(false); - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - for (let num = 0; num < nodeList.length; num++) { - let nd = nodeList[num]["node"]; - ndPath = nodeList[num]["xpath"]; - outputParameterNodes.push({ "node": nd, "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow }); - nd.style.boxShadow = boxShadowColor; - ndText = $(nd).text(); - if (nd.tagName == "IMG") { //如果元素是图片 - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_图片地址", - "desc": "", //参数描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") }] - }); - } else if (nd.tagName == "A") { //如果元素是超链接 - outputParameters.push({ - "nodeType": 1, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_链接文本", - "desc": "", //参数描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": ndText }] - }); - outputParameters.push({ - "nodeType": 2, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_链接地址", - "desc": "", //参数描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") }] - }); - } else if (nd.tagName == "INPUT") { //如果元素是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_文本", - "desc": "", //参数描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": 0, // 内容类型 - "relative": false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_文本", - "desc": "", //参数描述 - "relativeXpath": ndPath, - "exampleValues": [{ "num": 0, "value": ndText }] - }); - } - } - // console.log(outputParameters); - let at2 = parseInt(new Date().getTime()); - console.log("generateMultiParameters", at2, at, at2 - at); - generateValTable(false); - }); - -} - - -//处理子元素,对于每个块中多出的特殊元素,需要特殊处理 -function handleDescendents() { - let n = 1; - chrome.storage.local.get({ parameterNum: 1 }, function(items) { - let at = parseInt(new Date().getTime()); - n = items.parameterNum; - clearParameters(); //清除原来的参数列表 - app._data.selectedDescendents = true; - for (let num = 0; num < nodeList.length; num++) { - let tnode = nodeList[num]["node"]; - let stack = new Array(); //深度优先搜索遍历元素 - stack.push(tnode); //从此节点开始 - while (stack.length > 0) { - let nd = stack.pop(); // 挨个取出元素 - if (nd.parentNode.tagName == "A" && nd.tagName == "SPAN") { - continue; //对A标签内的SPAN元素不进行处理,剪枝,此时子元素根本不加入stack,即实现了此功能 - } - ndPath = readXPath(nd, 1, tnode); - let index = -1; - for (let i = 0; i < outputParameters.length; i++) { - if (outputParameters[i]["relativeXpath"] == ndPath) { - index = i; - break; - } - } - outputParameterNodes.push({ - "node": nd, - "boxShadow": nd.style.boxShadow == "" || boxShadowColor ? "none" : nd.style.boxShadow - }); - nd.style.boxShadow = boxShadowColor; - ndText = $(nd).contents().filter(function() { - return this.nodeType === 3; - }).text().replace(/\s+/g, ''); - if (index == -1) { //从第二个节点开始,只插入那些不在参数列表中的元素,根据xpath进行寻址 - //如果当前节点除了子元素外仍然有其他文字或者该元素是图片/表单项,加入子元素节点 - if (ndText != "" || nd.tagName == "IMG" || nd.tagName == "INPUT" || nd.tagName == "A") { - if (nd.tagName == "IMG") { //如果元素是图片 - outputParameters.push({ - "nodeType": 4, //节点类型 - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径,注意当只选择了子元素没有选中全部的时候,需要判断 - "name": "参数" + (n++) + "_图片地址", - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), //同理需要判断 - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") - }] - }); - } else if (nd.tagName == "A") { //如果元素是超链接 - outputParameters.push({ - "nodeType": 1, - "contentType": 0, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_链接文本", - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ "num": num, "value": $(nd).text() }] //注意这里的ndtext是整个a的文字!!! - }); - outputParameters.push({ - "nodeType": 2, - "contentType": 0, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_链接地址", - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") - }] - }); - } else if (nd.tagName == "INPUT") { //如果元素是输入项 - outputParameters.push({ - "nodeType": 3, - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_文本", - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ - "num": num, - "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") - }] - }); - } else { //其他所有情况 - outputParameters.push({ - "nodeType": 0, - "contentType": 1, // 内容类型 - "relative": nodeList.length > 1 ? true : false, //是否为相对xpath路径 - "name": "参数" + (n++) + "_文本", - "desc": "", //参数描述 - "relativeXpath": nodeList.length > 1 ? ndPath : readXPath(nd), - "exampleValues": [{ "num": num, "value": ndText }] - }); - } - } - } else //如果元素节点已经存在,则只需要插入值就可以了 - { - if (nd.tagName == "IMG") { //如果元素是图片 - outputParameters[index]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("src") == null ? "" : $(nd).prop("src") - }); - } else if (nd.tagName == "A") { //如果元素是超链接 - outputParameters[index]["exampleValues"].push({ "num": num, "value": $(nd).text() }); - outputParameters[index + 1]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("href") == null ? "" : $(nd).prop("href") - }); - } else if (nd.tagName == "INPUT") { //如果元素是输入项 - outputParameters[index]["exampleValues"].push({ - "num": num, - "value": nd.getAttribute("value") == null ? "" : nd.getAttribute("value") - }); - } else { //其他所有情况 - outputParameters[index]["exampleValues"].push({ "num": num, "value": ndText }); - } - } - for (let i = nd.children.length - 1; i >= 0; i--) { - stack.push(nd.children[i]); - } - } - } - let at2 = parseInt(new Date().getTime()); - console.log("选中子元素", at2, at, at2 - at); - generateValTable(); - }); - -} - - -//根据参数列表生成可视化参数界面 -function generateValTable(multiline = true) { - let paravalues = []; - for (let i = 0; i < outputParameters.length; i++) { - let tvalues = []; - let tindex = 0; - let l = multiline ? nodeList.length : 1; - for (let j = 0; j < l; j++) { - //注意第一个循环条件,index超出界限了就不需要再寻找了,其他的全是空 - if (tindex < outputParameters[i]["exampleValues"].length && outputParameters[i]["exampleValues"][tindex]["num"] == j) { - tvalues.push(outputParameters[i]["exampleValues"][tindex]["value"]); - tindex++; - } else { - tvalues.push(" "); - } - } - paravalues.push(tvalues); - } - app._data.valTable = paravalues; -} - -// 选中第一个节点,自动寻找同类节点 -// 方法:/div[1]/div[2]/div[2]/a[1] -// 从倒数第一个节点开始找,看去掉方括号之后是否元素数目变多,如上面的变成/div[1]/div[2]/div[2]/a -// 如果没有,则恢复原状,然后试试倒数第二个:/div[1]/div[2]/div/a[1] -// 直到找到第一个变多的节点或者追溯到根节点为止 -function findRelated() { - let at = parseInt(new Date().getTime()); - let testPath = nodeList[0]["xpath"].split("/").splice(1); //分离xpath成 ["html","body","div[0]"]这样子 - let nodeNameList = []; - let nodeIndexList = []; - for (i = 0; i < testPath.length; i++) { - nodeNameList.push(testPath[i].split("[")[0]); - if (testPath[i].indexOf("[") >= 0) { //如果存在索引值 - nodeIndexList.push(parseInt(testPath[i].split("[")[1].replace("]", ""))); //只留下数字 - } else { - nodeIndexList.push(-1); - } - } - var tempPath = ""; - for (let i = nodeIndexList.length - 1; i >= 0; i--) { - if (nodeIndexList[i] == -1) { //没有索引值直接跳过 - continue; - } - tempIndexList = [...nodeIndexList]; //复刻一个index数组 - tempIndexList[i] = -1; //删除索引值 - tempPath = combineXpath(nodeNameList, tempIndexList); //生成新的xpath - var result = document.evaluate(tempPath, document, null, XPathResult.ANY_TYPE, null); - result.iterateNext(); //枚举第一个元素 - if (result.iterateNext() != null) { //如果能枚举到第二个元素,说明存在同类元素,选中同类元素,结束循环 - app.$data.nowPath = tempPath; //标记此元素xpath - pushToReadyList(tempPath); - break; - } - } - let at2 = parseInt(new Date().getTime()); - console.log("findRelated:", at2, at, at2 - at); -} - - -//根据path将元素放入readylist中 -function pushToReadyList(path) { - result = document.evaluate(path, document, null, XPathResult.ANY_TYPE, null); - var node = result.iterateNext(); //枚举第一个元素 - while (node) { //只添加不在已选中列表内的元素 - let exist = false; - for (o of nodeList) { - if (o["node"] == node) { - exist = true; - break; - } - } - if (!exist) { - readyList.push({ "node": node, "bgColor": node.style.backgroundColor, "boxShadow": node.style.boxShadow == "" || boxShadowColor ? "none" : node.style.boxShadow }); - } - node.style.boxShadow = boxShadowColor; - node = result.iterateNext(); //枚举下一个元素 - } -} - -//将readyList中的元素放入选中节点中 -function readyToList(step, dealparameters = true) { - for (o of readyList) { - nodeList.push({ node: o["node"], "step": step, bgColor: o["bgColor"], "boxShadow": o["boxShadow"], xpath: readXPath(o["node"], 1) }); - o["node"].style.backgroundColor = selectedColor; - } - clearReady(); - if (dealparameters) { //防止出现先选中子元素再选中全部失效的问题 - generateParameters(0); //根据nodelist列表内的元素生成参数列表,0代表纯文本 - } - -} - -//根据节点列表和索引列表生成XPATH -// 如:["html","body","div"],[-1,-1,2],生成/html/body/div[2] -function combineXpath(nameList, indexList) { - let finalPath = ""; - for (i = 0; i < nameList.length; i++) { - finalPath = finalPath + "/" + nameList[i]; - if (indexList[i] != -1) { - finalPath = finalPath + "[" + indexList[i] + "]"; - } - } - return finalPath; -} - -//专门测试已经选中的这些元素之间有没有相关性 -// 举例: -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[1]/div[3]/a[22] -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div[2]/div[3]/a[25] -// 最终转换为: -// /html/body/div[3]/div[1]/div[1]/div[1]/div[3]/div/div[3]/a -function relatedTest() { - let at = new Date().getTime() - var testList = []; - var testpath = ""; - for (i = 0; i < nodeList.length; i++) { - var testnumList = []; //用于比较节点索引号不同 - var tpath = nodeList[i]["xpath"].split("/").splice(1); //清理第一个空元素 - for (j = 0; j < tpath.length; j++) { - if (tpath[j].indexOf("[") >= 0) { //如果存在索引值 - testnumList.push(parseInt(tpath[j].split("[")[1].replace("]", ""))); //只留下数字 - } else { - testnumList.push(-1); - } - tpath[j] = tpath[j].split("[")[0]; - } - tp = tpath.join("/"); - if (i > 0 && testpath != tp) { //如果去除括号后元素内存在不一致情况,直接返回默认情况代码100 - app.$data.nowPath = ""; //标记此元素xpath - return 100; - } - testpath = tp; - testList.push(testnumList); - } - testpath = testpath.split("/"); //清理第一个空元素 - var indexList = []; //记录新生成的xpath - //如果选中的元素属于同样的序列,则计算出序列的最佳xpath表达式 - for (j = 0; j < testList[0].length; j++) { - indexList.push(testList[0][j]); - for (i = 1; i < testList.length; i++) { - if (testList[i][j] != testList[i - 1][j]) { - indexList[j] = -1; //不一致就记录成-1 - break; - } - } - } - var finalPath = combineXpath(testpath, indexList); - app.$data.nowPath = finalPath; //标记此元素xpath - pushToReadyList(finalPath); - let at2 = parseInt(new Date().getTime()); - console.log("手动:", at2, at, at2 - at); - return 50; //先返回给默认码 -} - -//实现提示框拖拽功能 -$('.tooldrag').mousedown(function(e) { - // e.pageX - var positionDiv = $(this).offset(); - var distanceX = e.pageX - positionDiv.left; - var distanceY = e.pageY - positionDiv.top; - //alert(distanceX) - // alert(positionDiv.left); - - $(document).mousemove(function(e) { - var x = e.clientX - distanceX; - var y = e.clientY - distanceY; - - if (x < 0) { - x = 0; - } else if (x > window.innerWidth - $('.tooldrag').outerWidth(true)) { - x = window.innerWidth - $('.tooldrag').outerWidth(true); - } - - if (y < 0) { - y = 0; - } else if (y > window.innerHeight - $('.tooldrag').outerHeight(true)) { - y = window.innerHeight - $('.tooldrag').outerHeight(true); - } - - $('.tooltips').css({ - 'right': window.innerWidth - x - $('.tooltips').outerWidth(true) + 'px', - 'bottom': window.innerHeight - y - $('.tooltips').outerHeight(true) + 'px', - }); - }); - - $(document).mouseup(function() { - $(document).off('mousemove'); - }); -}); \ No newline at end of file diff --git a/Extension/EasySpider_zh/scripts/devtools.js b/Extension/EasySpider_zh/scripts/devtools.js deleted file mode 100644 index cc74945d..00000000 --- a/Extension/EasySpider_zh/scripts/devtools.js +++ /dev/null @@ -1 +0,0 @@ -console.log(`'Allo 'Allo! Devtools Extension`) diff --git a/Extension/EasySpider_zh/scripts/jquery-3.4.1.min.js b/Extension/EasySpider_zh/scripts/jquery-3.4.1.min.js deleted file mode 100644 index a1c07fd8..00000000 --- a/Extension/EasySpider_zh/scripts/jquery-3.4.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0 elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.4.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - } ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box - if ( ( !support.boxSizingReliable() && isBorderBox || - val === "auto" || - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url, options ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - Workflow Manager - - - - - - -
-
-
-
Toolkit
- - - - - - - - - - -
-----------------
- - - - - -
-
-
-
-
-
-
-

-
-
-
- -
-
- - -
- -
-
- -

Use link inside the Loop

-
-
- - - - -
- - - - -
- -
-
- -

Use element inside the Loop

-
-
- - - -
- - - - - -
- -
-
- - - - - - -
Field NameExample ValueOperations
- - - - - - - -
- {{paras.parameters[i-1]["exampleValues"][0]["value"]}} - Modify - Delete - Up - Down -
-
-
- -

Use relative XPATH

- - - - - - - - - - -
- -
- - -
-
- -

Use text inside the Loop

-
-
- - -
- - - -
- -
- -
- -
- -
- -
- -
- -
- - - -
- - -
-
- - -
-
- - -
- - - - - - - - - - -
- -
- -
- -
- - - - - - -
-
- - -
- - -
- - -
- -
- - - - - - - - - - \ No newline at end of file diff --git a/ServiceGrid/frontEnd/FlowChart.js b/ServiceGrid/frontEnd/FlowChart.js deleted file mode 100644 index 8500693d..00000000 --- a/ServiceGrid/frontEnd/FlowChart.js +++ /dev/null @@ -1,561 +0,0 @@ -//处理表现层 -var nodeList = Array(); //所有新生成的节点全部存储在这里,并且有唯一索引号,所有的定位均通过index进行,即将图保存下来了 -var root = { - index: 0, //在nodeList中的索引号 - id: 0, - parentId: 0, - type: -1, - option: 0, - title: "root", - sequence: [], - parameters: { - history: 1, - tabIndex: 0, - useLoop: false, //是否使用循环中的元素 - xpath: "", //xpath - wait: 0, - }, - isInLoop: false, //是否处于循环内 -}; -nodeList.push(root); -var queue = new Array(); -var actionSequence = new Array(); //存储图结构,每个元素为在nodelist里面的索引值,下面的id和pid根据此数组进行索引,然后再在nodelist里找 -var nowNode = null; //存储现在所在的节点 -var vueData = { nowNodeIndex: 0 }; //存储目前所在节点的索引号,不能直接使用变量而需要用对象包起来 -var option = 0; //工具箱选项 -var title = ""; -var parameterNum = 1; //记录目前的参数个数 - -//处理逻辑层 -var app = new Vue({ - el: '#app', - data: { - list: { nl: nodeList }, - index: vueData, - nodeType: 0, // 当前元素的类型 - nowNode: null, // 用来临时存储元素的节点 - loopType: -1, //点击循环时候用来循环选项 - useLoop: false, //记录是否使用循环内元素 - nowArrow: { "position": -1, "pId": 0, "num": 0 }, - paras: { "parameters": [] }, //提取数据的参数列表 - TClass: -1, //条件分支的条件类别 - paraIndex: 0, //当前参数的index - }, - watch: { - nowArrow: { //变量发生变化的时候进行一些操作 - deep: true, - handler: function(newVal, oldVal) { - let arrlist = document.getElementsByClassName("arrow"); - if (oldVal != null) { - for (let i = 0; i < arrlist.length; i++) { - if (arrlist[i].getAttribute("position") == oldVal["position"] && - arrlist[i].getAttribute("pid") == oldVal["pId"]) { - arrlist[i].style.backgroundColor = ""; // 时刻指示现在应该插入的节点的位置 - break; - } - } - } - for (let i = 0; i < arrlist.length; i++) { - if (arrlist[i].getAttribute("position") == newVal["position"] && - arrlist[i].getAttribute("pid") == newVal["pId"]) { - arrlist[i].style.backgroundColor = "lavender"; // 时刻指示现在应该插入的节点的位置 - break; - } - } - } - }, - loopType: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["loopType"] = newVal; - } - }, - TClass: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["class"] = newVal; - } - }, - useLoop: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["useLoop"] = newVal; - } - }, - paras: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["paras"] = newVal["parameters"]; - } - }, - }, - methods: { - modifyParas: function(i) { //修改第i个参数 - this.paraIndex = i; - }, - deleteParas: function(i) { //删除第i个参数 - this.nowNode["parameters"]["paras"].splice(i, 1); - //如果参数删除完了,就把提取数据也删掉 - if (this.nowNode["parameters"]["paras"].length == 0) { - deleteElement(); - } - }, - upParas: function(i) { //上移第i个参数 - if (i != 0) { - let t = this.nowNode["parameters"]["paras"].splice(i, 1)[0]; - this.nowNode["parameters"]["paras"].splice(i - 1, 0, t); - } - }, - downParas: function(i) { //下移第i个参数 - if (i != this.nowNode["parameters"]["paras"].length - 1) { - let t = this.nowNode["parameters"]["paras"].splice(i, 1)[0]; - this.nowNode["parameters"]["paras"].splice(i + 1, 0, t); - } - }, - - getType: function(nodeType, contentType) { //根据类型得到字段名称 - if (contentType == 2) { - return "InnerHTML"; - } else if (contentType == 3) { - return "OuterHTML"; - } - if (nodeType == 2) { - return "Link Address"; - } else if (nodeType == 1) { - return "Link Text"; - } else if (nodeType == 4) { - return "Image Address"; - } else { - return "Text"; - } - } - } -}) - -//深复制 -function DeepClone(obj) { - if (obj === null || typeof obj !== 'object') return obj; - var cpObj = obj instanceof Array ? [] : {}; - for (var key in obj) cpObj[key] = DeepClone(obj[key]); - return cpObj; -} - -// 根据元素类型返回不同元素的样式 -function newNode(node) { - id = node["id"]; - title = node["title"]; - type = node["type"]; - if (type == 0) //顺序 - { - return `
-
-

${title}

-
-
-

`; - } else if (type == 1) //循环 - { - return `
-

${title}

-

-
-

`; - } else if (type == 2) //判断 - { - return `
-

${title}

-

Click here to add a new condition to the left most

-
-
-

`; - } else //判断分支 - { - return `
-

${title}

-

-
-
`; - } -} - -function elementMousedown(e) { - if (e.button == 2) //右键点击 - { - if (nowNode != null) { - nowNode.style.borderColor = "skyblue"; - } - nowNode = this; - vueData.nowNodeIndex = actionSequence[this.getAttribute("data")]; - this.style.borderColor = "blue"; - handleElement(); //处理元素 - } - e.stopPropagation(); //防止冒泡 -} - -function branchMouseDown(e) { - if (e.button == 2) //右键点击 - { - let judgeId = this.getAttribute('data'); - var l = nodeList.length; - var t = { - index: l, - id: 0, - parentId: 0, - type: 3, - option: 10, - title: "Condition", - sequence: [], - isInLoop: false, - }; - addParameters(t) - nodeList.push(t); - nodeList[actionSequence[judgeId]]["sequence"].splice(0, 0, t.index); - refresh(); - app._data.nowArrow = { "position": -1, "pId": t["id"], "num": 0 }; - $("#" + t["id"]).click(); - } - e.stopPropagation(); //防止冒泡 -} - -function arrowMouseDown(e) { - if (e.button == 2) //右键点击 - { - if (option != 0) { - app._data.nowArrow = { "position": this.getAttribute('position'), "pId": this.getAttribute('pId'), "num": 0 }; - } - toolBoxKernel(e); - } -} -//增加分支点击事件 -function branchClick(e) { - let judgeId = this.getAttribute('data'); - var l = nodeList.length; - var t = { - index: l, - id: 0, - parentId: 0, - type: 3, - option: 10, - title: "Condition", - sequence: [], - isInLoop: false, - }; - addParameters(t); - nodeList.push(t); - nodeList[actionSequence[judgeId]]["sequence"].splice(0, 0, t.index); - refresh(); - app._data.nowArrow = { "position": -1, "pId": t["id"], "num": 0 }; - $("#" + t["id"]).click(); - e.stopPropagation(); //防止冒泡 -} - -//元素点击事件 -function elementClick(e) { - if (nowNode != null) { - nowNode.style.borderColor = "skyblue"; - } - nowNode = this; - vueData.nowNodeIndex = actionSequence[this.getAttribute("data")]; - this.style.borderColor = "blue"; - handleElement(); //处理元素 - e.stopPropagation(); //防止冒泡 -} - -//箭头点击事件 -function arrowClick(e) { - if (option != 0) { - app._data.nowArrow = { "position": this.getAttribute('position'), "pId": this.getAttribute('pId'), "num": 0 }; - } - toolBoxKernel(e); -} - -//增加元素函数 -function addElement(op, para) { - option = op; - if (option == 1) { //打开网页选项 - title = "Open Page"; - } else { - title = $(".options")[option - 2].innerHTML; //获取新增操作名称 - } - - toolBoxKernel(null, para); -} - -// 工具箱操作函数 -function toolBoxKernel(e, para = null) { - if (option == 13) { //调整锚点 - // let tarrow = DeepClone(app.$data.nowArrow); - // refresh(); - // app._data.nowArrow =tarrow; - } else if (option == 11) { //复制操作 - if (nowNode == null) { - e.stopPropagation(); //防止冒泡 - } else if (nowNode.getAttribute("dataType") > 0) { - alert("Cannot copy loop, if and condition!"); - e.stopPropagation(); //防止冒泡 - } else { - let position = parseInt(nowNode.getAttribute('position')); - let pId = nowNode.getAttribute('pId'); - var tt = nodeList[nodeList[actionSequence[pId]]["sequence"][position]]; //在相应位置添加新元素 - t = DeepClone(tt); //浅复制元素 - var l = nodeList.length; - t.index = l; - nodeList.push(t); - var position2 = parseInt(app._data.nowArrow['position']); - var pId2 = app._data.nowArrow['pId']; - nodeList[actionSequence[pId2]]["sequence"].splice(position2 + 1, 0, t.index); //在相应位置添加新元素 - refresh(); //重新渲染页面 - app._data.nowArrow = { "position": t["position"], "pId": t["parentId"], "num": 0 }; - $("#" + t["id"]).click(); //复制后点击复制后的元素 - e.stopPropagation(); //防止冒泡 - } - } else if (option == 10) { //剪切操作 - if (nowNode == null) { - e.stopPropagation(); //防止冒泡 - } else if ($(nowNode).is(".branch")) { - alert("Cannot move condition branch!"); - e.stopPropagation(); //防止冒泡 - } else { - let position = parseInt(nowNode.getAttribute('position')); - let pId = nowNode.getAttribute('pId'); - var position2 = parseInt(app._data.nowArrow['position']); - var pId2 = app._data.nowArrow['pId']; - var id = nowNode.getAttribute('data'); - var pidt = pId2; - var move = true; - console.log(pidt, id); - while (pidt != 0) { - if (pidt == id) { - move = false; - break; - } - pidt = nodeList[actionSequence[pidt]]["parentId"]; - } - if (move) //如果自己要移动到自己节点里就不允许移动 - { - let element = nodeList[actionSequence[pId]]["sequence"].splice(position, 1); //在相应位置删除元素 - if (pId == pId2 && position < position2) //如果要移动的位置属于同一层并且是从前往后移动,注意需要控制数组插入位置向前错位 - { - position2--; - } - console.log(element); - nodeList[actionSequence[pId2]]["sequence"].splice(position2 + 1, 0, element[0]); //在相应位置添加新元素 - refresh(); //重新渲染页面 - console.log(nodeList[element[0]]); - app._data.nowArrow = { "position": nodeList[element[0]]["position"], "pId": nodeList[element[0]]["parentId"], "num": 0 }; - $("#" + nodeList[element[0]]["id"]).click(); - } else { - alert("Cannot move inside self!"); - } - e.stopPropagation(); //防止冒泡 - } - } else if (option > 0) { //新增操作 - var l = nodeList.length; - var t = { - id: 0, - index: l, - parentId: 0, - type: 0, - option: option, - title: title, - sequence: [], - isInLoop: false, - }; - nodeList.push(t); - if (option == 8) //循环 - { - t["type"] = 1; - } else if (option == 9) //判断 - { - t["type"] = 2; - // 增加两个分支 - var nt = { - id: 0, - parentId: 0, - index: l + 1, - type: 3, - option: 10, - title: "Condition", - sequence: [], - isInLoop: false, - }; - var nt2 = { - id: 0, - parentId: 0, - index: l + 2, - type: 3, - option: 10, - title: "Condition", - sequence: [], - isInLoop: false, - }; - t["sequence"].push(nt.index); - t["sequence"].push(nt2.index); - nodeList.push(nt) - nodeList.push(nt2); - addParameters(nt); //增加选项的默认参数 - addParameters(nt2); //增加选项的默认参数 - } - let position = parseInt(app._data.nowArrow['position']); - let pId = app._data.nowArrow['pId']; - nodeList[actionSequence[pId]]["sequence"].splice(position + 1, 0, t.index); //在相应位置添加新元素 - refresh(); //重新渲染页面 - //下面是确定添加元素之后下一个要插入的节点的位置 - app._data.nowArrow = { "position": t["position"], "pId": t["parentId"], "num": 0 }; - addParameters(t); //增加选项的默认参数 - if (para != null) { - modifyParameters(t, para); - } - if (option == 8) //循环情况下应插入在循环里面 - { - app._data.nowArrow = { "position": -1, "pId": t["id"], "num": 0 }; - $("#" + t["id"]).click(); - } else if (option == 9) //判断插入到第一个判断条件中 - { - app._data.nowArrow = { "position": -1, "pId": nt["id"], "num": 0 }; - $("#" + nt["id"]).click(); - } else { - $("#" + t["id"]).click(); - } - - if (e != null) - e.stopPropagation(); //防止冒泡 - option = 0; - return t; - } - option = 0; -} - -$(".options").mousedown(function() { - option = parseInt(this.getAttribute("data")); - title = this.innerHTML; - if (option >= 10 && option <= 12 && (nowNode == null || nowNode.getAttribute("id") == 0)) { - alert("No element is selected now!"); - } else if (option == 12) { - deleteElement(); - $(".options")[12].click(); - } -}); - -function bindEvents() { - // 清空原来的listener然后再添加新的listener - //以下绑定了左右键的行为 - let rect = document.getElementsByClassName('clk'); - for (let i = 0, rule; rule = rect[i++];) { - rule.removeEventListener('mousedown', elementMousedown); - rule.addEventListener('mousedown', elementMousedown); - rule.removeEventListener('click', elementClick); - rule.addEventListener('click', elementClick); - } - let arr = document.getElementsByClassName('arrow'); - for (let i = 0, rule; rule = arr[i++];) { - rule.removeEventListener('click', arrowClick); - rule.addEventListener('click', arrowClick); - rule.removeEventListener('mousedown', arrowMouseDown); - rule.addEventListener('mousedown', arrowMouseDown); - } - let branch = document.getElementsByClassName('branchAdd'); - for (let i = 0, rule; rule = branch[i++];) { - rule.removeEventListener('click', branchClick); - rule.addEventListener('click', branchClick); - rule.removeEventListener('mousedown', branchMouseDown); - rule.addEventListener('mousedown', branchMouseDown); - } -} - -//重新画图 -function refresh(nowArrowReset = true) { - $("#0").empty(); - $("#0").append(`
-

-
-

`); - actionSequence.splice(0); - queue.splice(0); - var idd = 1; - queue.push(0); - actionSequence.push(0); - while (queue.length != 0) { - var nd = queue.shift(); //取出父元素并建立对子元素的链接 - for (i = 0; i < nodeList[nd].sequence.length; i++) { - nodeList[nodeList[nd].sequence[i]].parentId = nodeList[nd].id; - nodeList[nodeList[nd].sequence[i]]["position"] = i; - nodeList[nodeList[nd].sequence[i]].id = idd++; - //检测元素是否位于循环内 - if (nodeList[nd].option == 8 || nodeList[nd].isInLoop) { - nodeList[nodeList[nd].sequence[i]].isInLoop = true; - } else { - nodeList[nodeList[nd].sequence[i]].isInLoop = false; - } - queue.push(nodeList[nd].sequence[i]); - actionSequence.push(nodeList[nd].sequence[i]); - } - } - if (nowArrowReset) //如果要重置锚点位置 - { - app._data.nowArrow = { "position": -1, "pId": 0, "num": 0 }; //设置默认要添加的位置是元素流程最开头处 - } - //第一个元素不渲染 - for (i = 1; i < actionSequence.length; i++) { - parentId = nodeList[actionSequence[i]]["parentId"]; - $("#" + parentId).append(newNode(nodeList[actionSequence[i]])); - } - bindEvents(); -} - -function deleteElement() { - if (nowNode.getAttribute("id") == 0) { - alert("No element is selected now!"); //root - return; - } - // if (nodeList[actionSequence[nowNode.getAttribute("data")]]["option"] == 1) { - // alert("Cannot delete the element of Open Page!"); - // return; - // } - let position = parseInt(nowNode.getAttribute('position')); - let pId = nowNode.getAttribute('pId'); - let tnode = nodeList[actionSequence[pId]]["sequence"].splice(position, 1); //在相应位置删除元素 - //循环的标记已经被删除的元素,因为删除循环后,循环内的元素也会 - let queue = new Array(); - queue.push(tnode[0]); - while (queue.length > 0) { - let index = queue.shift(); - nodeList[index]["id"] = -1; //标记服务已被删除 - for (let i = 0; i < nodeList[index]["sequence"].length; i++) { - queue.push(nodeList[index]["sequence"][i]); - } - } - app._data["nowNode"] = null; - app._data["nodeType"] = 0; - vueData.nowNodeIndex = 0; - if (nowNode.getAttribute("datatype") == 3) { //如果删掉的是条件分支的话 - pId = nowNode.parentNode.parentNode.getAttribute('pId'); - position = nowNode.parentNode.parentNode.getAttribute('position'); - } - app.$data.nowArrow = { position: position - 1, "pId": pId, "num": 0 }; //删除元素后锚点跳转到当前元素的上一个节点 - refresh(false); //重新渲染页面 - nowNode = null; //取消选择 -} - -document.oncontextmenu = function() { - return false; - } //屏蔽右键菜单 - //删除元素 -document.onkeydown = function(e) { - if (nowNode != null && e.keyCode == 46) { - if (confirm("Do you really want to delete the selected operation?")) { - deleteElement(); - } - } else { //ctrl+s保存服务 - var currKey = 0, - e = e || event || window.event; - currKey = e.keyCode || e.which || e.charCode; - if (currKey == 83 && (e.ctrlKey || e.metaKey)) { - $('#save').click(); - return false; - } - - } -} - -function inputDelete(e) { - if (e.keyCode == 46) { - e.stopPropagation(); //输入框按delete应该正常运行 - } -} \ No newline at end of file diff --git a/ServiceGrid/frontEnd/FlowChart_CN.html b/ServiceGrid/frontEnd/FlowChart_CN.html deleted file mode 100644 index 33b2fad8..00000000 --- a/ServiceGrid/frontEnd/FlowChart_CN.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - - - - - - 设计流程 - - - - - - -
-
-
-
工具箱
- - - - - - - - - - -
-----------------
- - - - - -
提示:点击上方操作按钮后点击要放置元素的位置处的箭头,可按取消操作按钮取消。
-
-
-
-
-
-
-

-
-
-
- -
-
- - -
- -
-
- -

使用循环内的链接

-
-
- - - - -
- - - - -
- -
-
- -

使用循环内的元素

-
-
- - -
- - - - - -
- -
-
- - - - - - -
字段名示例值操作
- - - - - - - -
- {{paras.parameters[i-1]["exampleValues"][0]["value"]}} - 修改 - 删除 - 上移 - 下移 -
-
-
- -

使用相对循环内的XPATH

- - - - - - - - - - -
- -
- - -
-
- -

使用循环内的文本

-
-
- - -
- - - -
- -
- -
- -
- -
- -
- -
- -
- - - -
- - -
-
- - -
-
- - -
- - - - - - - - - - -
- -
- -
- -
- - - - -
-
- - -
- - -
- - -
- -
- - - - - - - - - - \ No newline at end of file diff --git a/ServiceGrid/frontEnd/FlowChart_CN.js b/ServiceGrid/frontEnd/FlowChart_CN.js deleted file mode 100644 index cabcb0d6..00000000 --- a/ServiceGrid/frontEnd/FlowChart_CN.js +++ /dev/null @@ -1,561 +0,0 @@ -//处理表现层 -var nodeList = Array(); //所有新生成的节点全部存储在这里,并且有唯一索引号,所有的定位均通过index进行,即将图保存下来了 -var root = { - index: 0, //在nodeList中的索引号 - id: 0, - parentId: 0, - type: -1, - option: 0, - title: "root", - sequence: [], - parameters: { - history: 1, - tabIndex: 0, - useLoop: false, //是否使用循环中的元素 - xpath: "", //xpath - wait: 0, - }, - isInLoop: false, //是否处于循环内 -}; -nodeList.push(root); -var queue = new Array(); -var actionSequence = new Array(); //存储图结构,每个元素为在nodelist里面的索引值,下面的id和pid根据此数组进行索引,然后再在nodelist里找 -var nowNode = null; //存储现在所在的节点 -var vueData = { nowNodeIndex: 0 }; //存储目前所在节点的索引号,不能直接使用变量而需要用对象包起来 -var option = 0; //工具箱选项 -var title = ""; -var parameterNum = 1; //记录目前的参数个数 - -//处理逻辑层 -var app = new Vue({ - el: '#app', - data: { - list: { nl: nodeList }, - index: vueData, - nodeType: 0, // 当前元素的类型 - nowNode: null, // 用来临时存储元素的节点 - loopType: -1, //点击循环时候用来循环选项 - useLoop: false, //记录是否使用循环内元素 - nowArrow: { "position": -1, "pId": 0, "num": 0 }, - paras: { "parameters": [] }, //提取数据的参数列表 - TClass: -1, //条件分支的条件类别 - paraIndex: 0, //当前参数的index - }, - watch: { - nowArrow: { //变量发生变化的时候进行一些操作 - deep: true, - handler: function(newVal, oldVal) { - let arrlist = document.getElementsByClassName("arrow"); - if (oldVal != null) { - for (let i = 0; i < arrlist.length; i++) { - if (arrlist[i].getAttribute("position") == oldVal["position"] && - arrlist[i].getAttribute("pid") == oldVal["pId"]) { - arrlist[i].style.backgroundColor = ""; // 时刻指示现在应该插入的节点的位置 - break; - } - } - } - for (let i = 0; i < arrlist.length; i++) { - if (arrlist[i].getAttribute("position") == newVal["position"] && - arrlist[i].getAttribute("pid") == newVal["pId"]) { - arrlist[i].style.backgroundColor = "lavender"; // 时刻指示现在应该插入的节点的位置 - break; - } - } - } - }, - loopType: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["loopType"] = newVal; - } - }, - TClass: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["class"] = newVal; - } - }, - useLoop: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["useLoop"] = newVal; - } - }, - paras: { - handler: function(newVal, oldVal) { - this.nowNode["parameters"]["paras"] = newVal["parameters"]; - } - }, - }, - methods: { - modifyParas: function(i) { //修改第i个参数 - this.paraIndex = i; - }, - deleteParas: function(i) { //删除第i个参数 - this.nowNode["parameters"]["paras"].splice(i, 1); - //如果参数删除完了,就把提取数据也删掉 - if (this.nowNode["parameters"]["paras"].length == 0) { - deleteElement(); - } - }, - upParas: function(i) { //上移第i个参数 - if (i != 0) { - let t = this.nowNode["parameters"]["paras"].splice(i, 1)[0]; - this.nowNode["parameters"]["paras"].splice(i - 1, 0, t); - } - }, - downParas: function(i) { //下移第i个参数 - if (i != this.nowNode["parameters"]["paras"].length - 1) { - let t = this.nowNode["parameters"]["paras"].splice(i, 1)[0]; - this.nowNode["parameters"]["paras"].splice(i + 1, 0, t); - } - }, - - getType: function(nodeType, contentType) { //根据类型得到字段名称 - if (contentType == 2) { - return "InnerHTML"; - } else if (contentType == 3) { - return "OuterHTML"; - } - if (nodeType == 2) { - return "链接地址"; - } else if (nodeType == 1) { - return "链接文本"; - } else if (nodeType == 4) { - return "图片地址"; - } else { - return "文本"; - } - } - } -}) - -//深复制 -function DeepClone(obj) { - if (obj === null || typeof obj !== 'object') return obj; - var cpObj = obj instanceof Array ? [] : {}; - for (var key in obj) cpObj[key] = DeepClone(obj[key]); - return cpObj; -} - -// 根据元素类型返回不同元素的样式 -function newNode(node) { - id = node["id"]; - title = node["title"]; - type = node["type"]; - if (type == 0) //顺序 - { - return `
-
-

${title}

-
-
-

`; - } else if (type == 1) //循环 - { - return `
-

${title}

-

-
-

`; - } else if (type == 2) //判断 - { - return `
-

${title}

-

点击此处在最左边增加条件分支

-
-
-

`; - } else //判断分支 - { - return `
-

${title}

-

-
-
`; - } -} - -function elementMousedown(e) { - if (e.button == 2) //右键点击 - { - if (nowNode != null) { - nowNode.style.borderColor = "skyblue"; - } - nowNode = this; - vueData.nowNodeIndex = actionSequence[this.getAttribute("data")]; - this.style.borderColor = "blue"; - handleElement(); //处理元素 - } - e.stopPropagation(); //防止冒泡 -} - -function branchMouseDown(e) { - if (e.button == 2) //右键点击 - { - let judgeId = this.getAttribute('data'); - var l = nodeList.length; - var t = { - index: l, - id: 0, - parentId: 0, - type: 3, - option: 10, - title: "条件分支", - sequence: [], - isInLoop: false, - }; - addParameters(t) - nodeList.push(t); - nodeList[actionSequence[judgeId]]["sequence"].splice(0, 0, t.index); - refresh(); - app._data.nowArrow = { "position": -1, "pId": t["id"], "num": 0 }; - $("#" + t["id"]).click(); - } - e.stopPropagation(); //防止冒泡 -} - -function arrowMouseDown(e) { - if (e.button == 2) //右键点击 - { - if (option != 0) { - app._data.nowArrow = { "position": this.getAttribute('position'), "pId": this.getAttribute('pId'), "num": 0 }; - } - toolBoxKernel(e); - } -} -//增加分支点击事件 -function branchClick(e) { - let judgeId = this.getAttribute('data'); - var l = nodeList.length; - var t = { - index: l, - id: 0, - parentId: 0, - type: 3, - option: 10, - title: "条件分支", - sequence: [], - isInLoop: false, - }; - addParameters(t); - nodeList.push(t); - nodeList[actionSequence[judgeId]]["sequence"].splice(0, 0, t.index); - refresh(); - app._data.nowArrow = { "position": -1, "pId": t["id"], "num": 0 }; - $("#" + t["id"]).click(); - e.stopPropagation(); //防止冒泡 -} - -//元素点击事件 -function elementClick(e) { - if (nowNode != null) { - nowNode.style.borderColor = "skyblue"; - } - nowNode = this; - vueData.nowNodeIndex = actionSequence[this.getAttribute("data")]; - this.style.borderColor = "blue"; - handleElement(); //处理元素 - e.stopPropagation(); //防止冒泡 -} - -//箭头点击事件 -function arrowClick(e) { - if (option != 0) { - app._data.nowArrow = { "position": this.getAttribute('position'), "pId": this.getAttribute('pId'), "num": 0 }; - } - toolBoxKernel(e); -} - -//增加元素函数 -function addElement(op, para) { - option = op; - if (option == 1) { //打开网页选项 - title = "打开网页"; - } else { - title = $(".options")[option - 2].innerHTML; //获取新增操作名称 - } - - toolBoxKernel(null, para); -} - -// 工具箱操作函数 -function toolBoxKernel(e, para = null) { - if (option == 13) { //调整锚点 - // let tarrow = DeepClone(app.$data.nowArrow); - // refresh(); - // app._data.nowArrow =tarrow; - } else if (option == 11) { //复制操作 - if (nowNode == null) { - e.stopPropagation(); //防止冒泡 - } else if (nowNode.getAttribute("dataType") > 0) { - alert("循环和判断、条件分支不可复制!"); - e.stopPropagation(); //防止冒泡 - } else { - let position = parseInt(nowNode.getAttribute('position')); - let pId = nowNode.getAttribute('pId'); - var tt = nodeList[nodeList[actionSequence[pId]]["sequence"][position]]; //在相应位置添加新元素 - t = DeepClone(tt); //浅复制元素 - var l = nodeList.length; - t.index = l; - nodeList.push(t); - var position2 = parseInt(app._data.nowArrow['position']); - var pId2 = app._data.nowArrow['pId']; - nodeList[actionSequence[pId2]]["sequence"].splice(position2 + 1, 0, t.index); //在相应位置添加新元素 - refresh(); //重新渲染页面 - app._data.nowArrow = { "position": t["position"], "pId": t["parentId"], "num": 0 }; - $("#" + t["id"]).click(); //复制后点击复制后的元素 - e.stopPropagation(); //防止冒泡 - } - } else if (option == 10) { //剪切操作 - if (nowNode == null) { - e.stopPropagation(); //防止冒泡 - } else if ($(nowNode).is(".branch")) { - alert("判断分支不可移动!"); - e.stopPropagation(); //防止冒泡 - } else { - let position = parseInt(nowNode.getAttribute('position')); - let pId = nowNode.getAttribute('pId'); - var position2 = parseInt(app._data.nowArrow['position']); - var pId2 = app._data.nowArrow['pId']; - var id = nowNode.getAttribute('data'); - var pidt = pId2; - var move = true; - console.log(pidt, id); - while (pidt != 0) { - if (pidt == id) { - move = false; - break; - } - pidt = nodeList[actionSequence[pidt]]["parentId"]; - } - if (move) //如果自己要移动到自己节点里就不允许移动 - { - let element = nodeList[actionSequence[pId]]["sequence"].splice(position, 1); //在相应位置删除元素 - if (pId == pId2 && position < position2) //如果要移动的位置属于同一层并且是从前往后移动,注意需要控制数组插入位置向前错位 - { - position2--; - } - console.log(element); - nodeList[actionSequence[pId2]]["sequence"].splice(position2 + 1, 0, element[0]); //在相应位置添加新元素 - refresh(); //重新渲染页面 - console.log(nodeList[element[0]]); - app._data.nowArrow = { "position": nodeList[element[0]]["position"], "pId": nodeList[element[0]]["parentId"], "num": 0 }; - $("#" + nodeList[element[0]]["id"]).click(); - } else { - alert("自己不能移动到自己的节点里!"); - } - e.stopPropagation(); //防止冒泡 - } - } else if (option > 0) { //新增操作 - var l = nodeList.length; - var t = { - id: 0, - index: l, - parentId: 0, - type: 0, - option: option, - title: title, - sequence: [], - isInLoop: false, - }; - nodeList.push(t); - if (option == 8) //循环 - { - t["type"] = 1; - } else if (option == 9) //判断 - { - t["type"] = 2; - // 增加两个分支 - var nt = { - id: 0, - parentId: 0, - index: l + 1, - type: 3, - option: 10, - title: "条件分支", - sequence: [], - isInLoop: false, - }; - var nt2 = { - id: 0, - parentId: 0, - index: l + 2, - type: 3, - option: 10, - title: "条件分支", - sequence: [], - isInLoop: false, - }; - t["sequence"].push(nt.index); - t["sequence"].push(nt2.index); - nodeList.push(nt) - nodeList.push(nt2); - addParameters(nt); //增加选项的默认参数 - addParameters(nt2); //增加选项的默认参数 - } - let position = parseInt(app._data.nowArrow['position']); - let pId = app._data.nowArrow['pId']; - nodeList[actionSequence[pId]]["sequence"].splice(position + 1, 0, t.index); //在相应位置添加新元素 - refresh(); //重新渲染页面 - //下面是确定添加元素之后下一个要插入的节点的位置 - app._data.nowArrow = { "position": t["position"], "pId": t["parentId"], "num": 0 }; - addParameters(t); //增加选项的默认参数 - if (para != null) { - modifyParameters(t, para); - } - if (option == 8) //循环情况下应插入在循环里面 - { - app._data.nowArrow = { "position": -1, "pId": t["id"], "num": 0 }; - $("#" + t["id"]).click(); - } else if (option == 9) //判断插入到第一个判断条件中 - { - app._data.nowArrow = { "position": -1, "pId": nt["id"], "num": 0 }; - $("#" + nt["id"]).click(); - } else { - $("#" + t["id"]).click(); - } - - if (e != null) - e.stopPropagation(); //防止冒泡 - option = 0; - return t; - } - option = 0; -} - -$(".options").mousedown(function() { - option = parseInt(this.getAttribute("data")); - title = this.innerHTML; - if (option >= 10 && option <= 12 && (nowNode == null || nowNode.getAttribute("id") == 0)) { - alert("目前未选中元素"); - } else if (option == 12) { - deleteElement(); - $(".options")[12].click(); - } -}); - -function bindEvents() { - // 清空原来的listener然后再添加新的listener - //以下绑定了左右键的行为 - let rect = document.getElementsByClassName('clk'); - for (let i = 0, rule; rule = rect[i++];) { - rule.removeEventListener('mousedown', elementMousedown); - rule.addEventListener('mousedown', elementMousedown); - rule.removeEventListener('click', elementClick); - rule.addEventListener('click', elementClick); - } - let arr = document.getElementsByClassName('arrow'); - for (let i = 0, rule; rule = arr[i++];) { - rule.removeEventListener('click', arrowClick); - rule.addEventListener('click', arrowClick); - rule.removeEventListener('mousedown', arrowMouseDown); - rule.addEventListener('mousedown', arrowMouseDown); - } - let branch = document.getElementsByClassName('branchAdd'); - for (let i = 0, rule; rule = branch[i++];) { - rule.removeEventListener('click', branchClick); - rule.addEventListener('click', branchClick); - rule.removeEventListener('mousedown', branchMouseDown); - rule.addEventListener('mousedown', branchMouseDown); - } -} - -//重新画图 -function refresh(nowArrowReset = true) { - $("#0").empty(); - $("#0").append(`
-

-
-

`); - actionSequence.splice(0); - queue.splice(0); - var idd = 1; - queue.push(0); - actionSequence.push(0); - while (queue.length != 0) { - var nd = queue.shift(); //取出父元素并建立对子元素的链接 - for (i = 0; i < nodeList[nd].sequence.length; i++) { - nodeList[nodeList[nd].sequence[i]].parentId = nodeList[nd].id; - nodeList[nodeList[nd].sequence[i]]["position"] = i; - nodeList[nodeList[nd].sequence[i]].id = idd++; - //检测元素是否位于循环内 - if (nodeList[nd].option == 8 || nodeList[nd].isInLoop) { - nodeList[nodeList[nd].sequence[i]].isInLoop = true; - } else { - nodeList[nodeList[nd].sequence[i]].isInLoop = false; - } - queue.push(nodeList[nd].sequence[i]); - actionSequence.push(nodeList[nd].sequence[i]); - } - } - if (nowArrowReset) //如果要重置锚点位置 - { - app._data.nowArrow = { "position": -1, "pId": 0, "num": 0 }; //设置默认要添加的位置是元素流程最开头处 - } - //第一个元素不渲染 - for (i = 1; i < actionSequence.length; i++) { - parentId = nodeList[actionSequence[i]]["parentId"]; - $("#" + parentId).append(newNode(nodeList[actionSequence[i]])); - } - bindEvents(); -} - -function deleteElement() { - if (nowNode.getAttribute("id") == 0) { - alert("当前未选中元素!"); //root - return; - } - // if (nodeList[actionSequence[nowNode.getAttribute("data")]]["option"] == 1) { - // alert("打开网页操作不可删除!"); - // return; - // } - let position = parseInt(nowNode.getAttribute('position')); - let pId = nowNode.getAttribute('pId'); - let tnode = nodeList[actionSequence[pId]]["sequence"].splice(position, 1); //在相应位置删除元素 - //循环的标记已经被删除的元素,因为删除循环后,循环内的元素也会 - let queue = new Array(); - queue.push(tnode[0]); - while (queue.length > 0) { - let index = queue.shift(); - nodeList[index]["id"] = -1; //标记服务已被删除 - for (let i = 0; i < nodeList[index]["sequence"].length; i++) { - queue.push(nodeList[index]["sequence"][i]); - } - } - app._data["nowNode"] = null; - app._data["nodeType"] = 0; - vueData.nowNodeIndex = 0; - if (nowNode.getAttribute("datatype") == 3) { //如果删掉的是条件分支的话 - pId = nowNode.parentNode.parentNode.getAttribute('pId'); - position = nowNode.parentNode.parentNode.getAttribute('position'); - } - app.$data.nowArrow = { position: position - 1, "pId": pId, "num": 0 }; //删除元素后锚点跳转到当前元素的上一个节点 - refresh(false); //重新渲染页面 - nowNode = null; //取消选择 -} - -document.oncontextmenu = function() { - return false; - } //屏蔽右键菜单 - //删除元素 -document.onkeydown = function(e) { - if (nowNode != null && e.keyCode == 46) { - if (confirm("确定要删除元素吗?")) { - deleteElement(); - } - } else { //ctrl+s保存服务 - var currKey = 0, - e = e || event || window.event; - currKey = e.keyCode || e.which || e.charCode; - if (currKey == 83 && (e.ctrlKey || e.metaKey)) { - $('#save').click(); - return false; - } - - } -} - -function inputDelete(e) { - if (e.keyCode == 46) { - e.stopPropagation(); //输入框按delete应该正常运行 - } -} \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/CURD.html b/ServiceGrid/frontEnd/bootstrap/CURD.html deleted file mode 100644 index 0ff4485c..00000000 --- a/ServiceGrid/frontEnd/bootstrap/CURD.html +++ /dev/null @@ -1,525 +0,0 @@ - - - - - - - - - - 设计流程 - - - - -
-
-
-
工具箱
- - - - - - - - - - -
-----------------
- - - - -
-----------------
-
提示:点击上方操作按钮后点击要添加/剪切/复制的位置处的箭头,可按取消操作按钮取消。
-
-
-
-
-
-
-

-
-
-
- - - \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/ToolBox - linkList.html b/ServiceGrid/frontEnd/bootstrap/ToolBox - linkList.html deleted file mode 100644 index 3fc94e41..00000000 --- a/ServiceGrid/frontEnd/bootstrap/ToolBox - linkList.html +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - - - 设计流程 - - - - -
-
-
-
工具箱
- - - - - - - - - - -
-----------------
- - - - -
-----------------
-
提示:点击上方操作按钮后点击要添加/剪切/复制的位置处的箭头,可按取消操作按钮取消。
-
-
-
-
-
-
-

-
-
-
- - - \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/ToolKit.html b/ServiceGrid/frontEnd/bootstrap/ToolKit.html deleted file mode 100644 index 0a6370f1..00000000 --- a/ServiceGrid/frontEnd/bootstrap/ToolKit.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - 设计流程 - - - - - - -
-
操作提示框
-
-
- ● 请点选页面元素。 -
- -
- ● 已选中一个链接,同时发现{{num}}个同类链接,您可以: - - -
- -
- -
- - - - - \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/baozhuangscript.js b/ServiceGrid/frontEnd/bootstrap/baozhuangscript.js deleted file mode 100644 index f2292090..00000000 --- a/ServiceGrid/frontEnd/bootstrap/baozhuangscript.js +++ /dev/null @@ -1,136 +0,0 @@ -function bzreadXPath(element) { - if (element.id !== "") {//判断id属性,如果这个元素有id,则显 示//*[@id="xPath"] 形式内容 - return '//*[@id=\"' + element.id + '\"]'; - } - //这里需要需要主要字符串转译问题,可参考js 动态生成html时字符串和变量转译(注意引号的作用) - if (element == document.body) {//递归到body处,结束递归 - return '/html/' + element.tagName.toLowerCase(); - } - var ix = 1,//在nodelist中的位置,且每次点击初始化 - siblings = element.parentNode.childNodes;//同级的子元素 - - for (var i = 0, l = siblings.length; i < l; i++) { - var sibling = siblings[i]; - //如果这个元素是siblings数组中的元素,则执行递归操作 - if (sibling == element) { - return arguments.callee(element.parentNode) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']'; - //如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加 - } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) { - ix++; - } - } -}; -console.log("sdf"); -//创造div作为选中元素后的样式存在 -var bzdiv = document.createElement('div'); -bzdiv.style.zIndex=-2147483647; -bzdiv.style.position = "fixed"; -bzdiv.style.boxSizing = "border-box"; -bzdiv.style.border = "dotted"; - - -//右键菜单屏蔽 -document.oncontextmenu = () => false; -var nodeList = []; -NowNode = null; -var xnode = null; -var style = ""; //记录上个元素的颜色 -document.addEventListener("mousemove", function () { - oe = document.elementFromPoint(event.x, event.y); - NowNode = oe; - te = 0; - exist = 0; - for (o of nodeList) { - if (o["node"] == oe) { - exist = 1; - break; - } - } - // console.log(oe); - if (xnode == null) { - xnode = oe; - } - if (xnode != oe) { - xnode.style.backgroundColor = style; //上个元素改回原来元素的背景颜色 - style = oe.style.backgroundColor; - // oe.addEventListener("mousedown",addEl()); - // xnode.removeEventListener("mousedown",addEl()); - console.log(oe); - if (exist == 1) { - console.log("exist"); - } - else { - - oe.style.backgroundColor = 'rgba(221,221,255,0.8)'; //设置新元素的背景元素 - } - xnode = oe; - bzdiv.style.display = "none"; - } -}); - -//点击没反应时候的替代方案 -document.onkeydown = function (event) { - console.log("keydown"); - var e = event || window.event || arguments.callee.caller.arguments[0]; - if (e && e.keyCode == 118) { // 按 F7 - bzaddEl(); - } - else if (e && e.keyCode == 119) {//按F8 - bzclear(); - } - else if (e && e.keyCode == 120) {//按F9 - NowNode.click(); - console.log("click",NowNode); - } -}; - -//选中元素到列表中 -function bzaddEl() { - exist = 0; - for (o of nodeList) { - if (o["node"] == oe) { - exist = 1; - break; - } - } - //元素没有被添加过才去添加 - if (exist == 0) { - nodeList.push({ node: NowNode, bgcolor: style, xpath: bzreadXPath(NowNode) }); - NowNode.style.backgroundColor = "rgba(0,191,255,0.5)"; - style = "rgba(0,191,255,0.5)"; - //将虚线框显示在元素上方但屏蔽其鼠标操作 - var pos = NowNode.getBoundingClientRect(); - bzdiv.style.display="block"; - bzdiv.style.height = NowNode.offsetHeight + "px"; - bzdiv.style.width = NowNode.offsetWidth+ "px"; - bzdiv.style.left = pos.left+ "px"; - bzdiv.style.top = pos.top+ "px"; - bzdiv.style.zIndex=2147483647; - bzdiv.style.pointerEvents = "none"; - } - console.log(nodeList); - //对于可点击元素,屏蔽a标签默认点击事件 - event.stopImmediatePropagation(); - event.stopPropagation(); - event.preventDefault ? event.preventDefault() : event.returnValue = false; -} -document.addEventListener("mousedown", bzaddEl); - -//清除选择项 -function bzclear() { - //如果最后停留的元素被选中,则调整此元素的style为原始style,否则不进行调整 - for (node of nodeList) { - node["node"].style.backgroundColor = node["bgcolor"]; - if (NowNode == node["node"]) { - style = node["bgcolor"]; - } - } - nodeList.splice(0, nodeList.length); //清空数组 -} -bztimer = setInterval(function() { - if(document.body != null) - { - clearInterval(bztimer); - document.body.append(bzdiv); - } -}, 100); diff --git a/ServiceGrid/frontEnd/bootstrap/baozhuangscript3.js b/ServiceGrid/frontEnd/bootstrap/baozhuangscript3.js deleted file mode 100644 index ae0d348a..00000000 --- a/ServiceGrid/frontEnd/bootstrap/baozhuangscript3.js +++ /dev/null @@ -1,83 +0,0 @@ -function readXPath(element) { - if (element.id !== "") {//判断id属性,如果这个元素有id,则显 示//*[@id="xPath"] 形式内容 - return '//*[@id=\"' + element.id + '\"]'; - } - //这里需要需要主要字符串转译问题,可参考js 动态生成html时字符串和变量转译(注意引号的作用) - if (element == document.body) {//递归到body处,结束递归 - return '/html/' + element.tagName.toLowerCase(); - } - var ix = 1,//在nodelist中的位置,且每次点击初始化 - siblings = element.parentNode.childNodes;//同级的子元素 - - for (var i = 0, l = siblings.length; i < l; i++) { - var sibling = siblings[i]; - //如果这个元素是siblings数组中的元素,则执行递归操作 - if (sibling == element) { - return arguments.callee(element.parentNode) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']'; - //如果不符合,判断是否是element元素,并且是否是相同元素,如果是相同的就开始累加 - } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) { - ix++; - } - } -}; - - - - - -var nodeList = []; -NowNode = null; -var xnode = null; -var style = ""; //记录上个元素的颜色 -document.addEventListener("mousemove", function () { - oe = document.elementFromPoint(event.x, event.y); - NowNode = oe; - console.log(oe); - if (xnode == null) { - xnode = oe; - } - if (xnode != oe) { - xnode.style.backgroundColor = style; //上个元素改回原来元素的背景颜色 - style = oe.style.backgroundColor; - exist = 0; - for (o of nodeList) { - if (o["node"] == oe) { - exist = 1; - break; - } - } - if (exist == 1) { - } - else { - - oe.style.backgroundColor = '#DDDDFF'; //设置新元素的背景元素 - } - xnode = oe; - } - //对于可点击元素,屏蔽点击事件 - if (oe.style.cursor == "pointer" || oe.tagName == "A" || oe.tagName == "BUTTON" || oe.tagName == "INPUT" || oe.onclick) { - oe.setAttribute("disabled", true); - } -}); -document.addEventListener("click", function () { - nodeList.push({ node: NowNode, bgcolor: style, xpath: readXPath(NowNode) }); - NowNode.style.backgroundColor = "#80FFFF"; - style = "#80FFFF"; - console.log(nodeList); - //对于可点击元素,屏蔽a标签默认点击事件 - event.stopImmediatePropagation(); - event.stopPropagation(); - event.preventDefault ? event.preventDefault() : event.returnValue = false; -}); -//清除选择项 -function clear() { - //如果最后停留的元素被选中,则调整此元素的style为原始style,否则不进行调整 - for (node of nodeList) { - node["node"].style.backgroundColor = node["bgcolor"]; - if (NowNode == node["node"]) { - style = node["bgcolor"]; - } - } - nodeList.splice(0, nodeList.length); //清空数组 -} - diff --git a/ServiceGrid/frontEnd/bootstrap/content.html b/ServiceGrid/frontEnd/bootstrap/content.html deleted file mode 100644 index ded058b0..00000000 --- a/ServiceGrid/frontEnd/bootstrap/content.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - -
-
    -
  • -
    - 1 -

    2

    -

    3

    -

    4

    -

    5

    -
    tet
    - 123 - - -
    - -
  • -
  • -
    - 1 -

    2

    -

    3

    -

    4

    -

    5

    -
    tet456
    - 123 -

    zheshiceshi

    -
    - -
  • - -
-
- - - - \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css deleted file mode 100644 index 259a9e2c..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css +++ /dev/null @@ -1,3899 +0,0 @@ -/*! - * Bootstrap Grid v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -html { - box-sizing: border-box; - -ms-overflow-style: scrollbar; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -.container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid, .container-sm, .container-md, .container-lg, .container-xl { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container, .container-sm { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container, .container-sm, .container-md { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container, .container-sm, .container-md, .container-lg { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container, .container-sm, .container-md, .container-lg, .container-xl { - max-width: 1140px; - } -} - -.row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters > .col, -.no-gutters > [class*="col-"] { - padding-right: 0; - padding-left: 0; -} - -.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, -.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, -.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, -.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, -.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 15px; - padding-left: 15px; -} - -.col { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; -} - -.row-cols-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.row-cols-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.row-cols-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.row-cols-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.row-cols-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; -} - -.row-cols-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; -} - -.col-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; -} - -.col-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.col-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; -} - -.col-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; -} - -.col-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; -} - -.col-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; -} - -.col-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; -} - -.col-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - -ms-flex-order: -1; - order: -1; -} - -.order-last { - -ms-flex-order: 13; - order: 13; -} - -.order-0 { - -ms-flex-order: 0; - order: 0; -} - -.order-1 { - -ms-flex-order: 1; - order: 1; -} - -.order-2 { - -ms-flex-order: 2; - order: 2; -} - -.order-3 { - -ms-flex-order: 3; - order: 3; -} - -.order-4 { - -ms-flex-order: 4; - order: 4; -} - -.order-5 { - -ms-flex-order: 5; - order: 5; -} - -.order-6 { - -ms-flex-order: 6; - order: 6; -} - -.order-7 { - -ms-flex-order: 7; - order: 7; -} - -.order-8 { - -ms-flex-order: 8; - order: 8; -} - -.order-9 { - -ms-flex-order: 9; - order: 9; -} - -.order-10 { - -ms-flex-order: 10; - order: 10; -} - -.order-11 { - -ms-flex-order: 11; - order: 11; -} - -.order-12 { - -ms-flex-order: 12; - order: 12; -} - -.offset-1 { - margin-left: 8.333333%; -} - -.offset-2 { - margin-left: 16.666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.333333%; -} - -.offset-5 { - margin-left: 41.666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.333333%; -} - -.offset-8 { - margin-left: 66.666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.333333%; -} - -.offset-11 { - margin-left: 91.666667%; -} - -@media (min-width: 576px) { - .col-sm { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-sm-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-sm-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-sm-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-sm-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-sm-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-sm-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-sm-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-sm-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-sm-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-sm-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-sm-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-sm-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-sm-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-sm-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-sm-first { - -ms-flex-order: -1; - order: -1; - } - .order-sm-last { - -ms-flex-order: 13; - order: 13; - } - .order-sm-0 { - -ms-flex-order: 0; - order: 0; - } - .order-sm-1 { - -ms-flex-order: 1; - order: 1; - } - .order-sm-2 { - -ms-flex-order: 2; - order: 2; - } - .order-sm-3 { - -ms-flex-order: 3; - order: 3; - } - .order-sm-4 { - -ms-flex-order: 4; - order: 4; - } - .order-sm-5 { - -ms-flex-order: 5; - order: 5; - } - .order-sm-6 { - -ms-flex-order: 6; - order: 6; - } - .order-sm-7 { - -ms-flex-order: 7; - order: 7; - } - .order-sm-8 { - -ms-flex-order: 8; - order: 8; - } - .order-sm-9 { - -ms-flex-order: 9; - order: 9; - } - .order-sm-10 { - -ms-flex-order: 10; - order: 10; - } - .order-sm-11 { - -ms-flex-order: 11; - order: 11; - } - .order-sm-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.333333%; - } - .offset-sm-2 { - margin-left: 16.666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.333333%; - } - .offset-sm-5 { - margin-left: 41.666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.333333%; - } - .offset-sm-8 { - margin-left: 66.666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.333333%; - } - .offset-sm-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 768px) { - .col-md { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-md-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-md-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-md-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-md-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-md-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-md-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-md-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-md-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-md-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-md-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-md-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-md-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-md-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-md-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-md-first { - -ms-flex-order: -1; - order: -1; - } - .order-md-last { - -ms-flex-order: 13; - order: 13; - } - .order-md-0 { - -ms-flex-order: 0; - order: 0; - } - .order-md-1 { - -ms-flex-order: 1; - order: 1; - } - .order-md-2 { - -ms-flex-order: 2; - order: 2; - } - .order-md-3 { - -ms-flex-order: 3; - order: 3; - } - .order-md-4 { - -ms-flex-order: 4; - order: 4; - } - .order-md-5 { - -ms-flex-order: 5; - order: 5; - } - .order-md-6 { - -ms-flex-order: 6; - order: 6; - } - .order-md-7 { - -ms-flex-order: 7; - order: 7; - } - .order-md-8 { - -ms-flex-order: 8; - order: 8; - } - .order-md-9 { - -ms-flex-order: 9; - order: 9; - } - .order-md-10 { - -ms-flex-order: 10; - order: 10; - } - .order-md-11 { - -ms-flex-order: 11; - order: 11; - } - .order-md-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.333333%; - } - .offset-md-2 { - margin-left: 16.666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.333333%; - } - .offset-md-5 { - margin-left: 41.666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.333333%; - } - .offset-md-8 { - margin-left: 66.666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.333333%; - } - .offset-md-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-lg-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-lg-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-lg-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-lg-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-lg-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-lg-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-lg-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-lg-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-lg-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-lg-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-lg-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-lg-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-lg-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-lg-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-lg-first { - -ms-flex-order: -1; - order: -1; - } - .order-lg-last { - -ms-flex-order: 13; - order: 13; - } - .order-lg-0 { - -ms-flex-order: 0; - order: 0; - } - .order-lg-1 { - -ms-flex-order: 1; - order: 1; - } - .order-lg-2 { - -ms-flex-order: 2; - order: 2; - } - .order-lg-3 { - -ms-flex-order: 3; - order: 3; - } - .order-lg-4 { - -ms-flex-order: 4; - order: 4; - } - .order-lg-5 { - -ms-flex-order: 5; - order: 5; - } - .order-lg-6 { - -ms-flex-order: 6; - order: 6; - } - .order-lg-7 { - -ms-flex-order: 7; - order: 7; - } - .order-lg-8 { - -ms-flex-order: 8; - order: 8; - } - .order-lg-9 { - -ms-flex-order: 9; - order: 9; - } - .order-lg-10 { - -ms-flex-order: 10; - order: 10; - } - .order-lg-11 { - -ms-flex-order: 11; - order: 11; - } - .order-lg-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.333333%; - } - .offset-lg-2 { - margin-left: 16.666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.333333%; - } - .offset-lg-5 { - margin-left: 41.666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.333333%; - } - .offset-lg-8 { - margin-left: 66.666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.333333%; - } - .offset-lg-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-xl-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-xl-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-xl-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-xl-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-xl-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-xl-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-xl-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-xl-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-xl-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-xl-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-xl-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-xl-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-xl-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-xl-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-xl-first { - -ms-flex-order: -1; - order: -1; - } - .order-xl-last { - -ms-flex-order: 13; - order: 13; - } - .order-xl-0 { - -ms-flex-order: 0; - order: 0; - } - .order-xl-1 { - -ms-flex-order: 1; - order: 1; - } - .order-xl-2 { - -ms-flex-order: 2; - order: 2; - } - .order-xl-3 { - -ms-flex-order: 3; - order: 3; - } - .order-xl-4 { - -ms-flex-order: 4; - order: 4; - } - .order-xl-5 { - -ms-flex-order: 5; - order: 5; - } - .order-xl-6 { - -ms-flex-order: 6; - order: 6; - } - .order-xl-7 { - -ms-flex-order: 7; - order: 7; - } - .order-xl-8 { - -ms-flex-order: 8; - order: 8; - } - .order-xl-9 { - -ms-flex-order: 9; - order: 9; - } - .order-xl-10 { - -ms-flex-order: 10; - order: 10; - } - .order-xl-11 { - -ms-flex-order: 11; - order: 11; - } - .order-xl-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.333333%; - } - .offset-xl-2 { - margin-left: 16.666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.333333%; - } - .offset-xl-5 { - margin-left: 41.666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.333333%; - } - .offset-xl-8 { - margin-left: 66.666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.333333%; - } - .offset-xl-11 { - margin-left: 91.666667%; - } -} - -.d-none { - display: none !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: -ms-flexbox !important; - display: flex !important; -} - -.d-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; -} - -@media (min-width: 576px) { - .d-sm-none { - display: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-sm-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 768px) { - .d-md-none { - display: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-md-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 992px) { - .d-lg-none { - display: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-lg-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 1200px) { - .d-xl-none { - display: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-xl-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media print { - .d-print-none { - display: none !important; - } - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-print-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -.flex-row { - -ms-flex-direction: row !important; - flex-direction: row !important; -} - -.flex-column { - -ms-flex-direction: column !important; - flex-direction: column !important; -} - -.flex-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; -} - -.flex-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; -} - -.flex-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; -} - -.flex-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; -} - -.flex-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; -} - -.flex-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; -} - -.flex-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; -} - -.justify-content-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; -} - -.justify-content-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; -} - -.justify-content-center { - -ms-flex-pack: center !important; - justify-content: center !important; -} - -.justify-content-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; -} - -.justify-content-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; -} - -.align-items-start { - -ms-flex-align: start !important; - align-items: flex-start !important; -} - -.align-items-end { - -ms-flex-align: end !important; - align-items: flex-end !important; -} - -.align-items-center { - -ms-flex-align: center !important; - align-items: center !important; -} - -.align-items-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; -} - -.align-items-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; -} - -.align-content-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; -} - -.align-content-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; -} - -.align-content-center { - -ms-flex-line-pack: center !important; - align-content: center !important; -} - -.align-content-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; -} - -.align-content-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; -} - -.align-content-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; -} - -.align-self-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; -} - -.align-self-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; -} - -.align-self-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; -} - -.align-self-center { - -ms-flex-item-align: center !important; - align-self: center !important; -} - -.align-self-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; -} - -.align-self-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; -} - -@media (min-width: 576px) { - .flex-sm-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-sm-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-sm-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-sm-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-sm-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-sm-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-sm-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-sm-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-sm-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-sm-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-sm-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-sm-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-sm-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-sm-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-sm-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-sm-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-sm-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-sm-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-sm-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-sm-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-sm-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-sm-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-sm-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-sm-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-sm-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-sm-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-sm-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-sm-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 768px) { - .flex-md-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-md-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-md-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-md-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-md-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-md-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-md-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-md-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-md-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-md-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-md-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-md-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-md-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-md-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-md-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-md-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-md-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-md-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-md-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-md-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-md-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-md-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-md-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-md-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-md-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-md-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-md-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-md-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-md-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-md-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 992px) { - .flex-lg-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-lg-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-lg-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-lg-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-lg-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-lg-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-lg-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-lg-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-lg-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-lg-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-lg-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-lg-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-lg-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-lg-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-lg-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-lg-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-lg-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-lg-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-lg-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-lg-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-lg-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-lg-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-lg-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-lg-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-lg-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-lg-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-lg-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-lg-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 1200px) { - .flex-xl-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-xl-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-xl-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-xl-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-xl-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-xl-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-xl-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-xl-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-xl-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-xl-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-xl-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-xl-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-xl-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-xl-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-xl-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-xl-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-xl-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-xl-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-xl-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-xl-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-xl-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-xl-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-xl-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-xl-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-xl-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-xl-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-xl-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-xl-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -.m-0 { - margin: 0 !important; -} - -.mt-0, -.my-0 { - margin-top: 0 !important; -} - -.mr-0, -.mx-0 { - margin-right: 0 !important; -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important; -} - -.ml-0, -.mx-0 { - margin-left: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1, -.my-1 { - margin-top: 0.25rem !important; -} - -.mr-1, -.mx-1 { - margin-right: 0.25rem !important; -} - -.mb-1, -.my-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1, -.mx-1 { - margin-left: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2, -.my-2 { - margin-top: 0.5rem !important; -} - -.mr-2, -.mx-2 { - margin-right: 0.5rem !important; -} - -.mb-2, -.my-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2, -.mx-2 { - margin-left: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.mt-3, -.my-3 { - margin-top: 1rem !important; -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important; -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important; -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important; -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important; -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important; -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.mt-5, -.my-5 { - margin-top: 3rem !important; -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important; -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important; -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0, -.py-0 { - padding-top: 0 !important; -} - -.pr-0, -.px-0 { - padding-right: 0 !important; -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important; -} - -.pl-0, -.px-0 { - padding-left: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1, -.py-1 { - padding-top: 0.25rem !important; -} - -.pr-1, -.px-1 { - padding-right: 0.25rem !important; -} - -.pb-1, -.py-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1, -.px-1 { - padding-left: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2, -.py-2 { - padding-top: 0.5rem !important; -} - -.pr-2, -.px-2 { - padding-right: 0.5rem !important; -} - -.pb-2, -.py-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2, -.px-2 { - padding-left: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.pt-3, -.py-3 { - padding-top: 1rem !important; -} - -.pr-3, -.px-3 { - padding-right: 1rem !important; -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important; -} - -.pl-3, -.px-3 { - padding-left: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important; -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important; -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important; -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.pt-5, -.py-5 { - padding-top: 3rem !important; -} - -.pr-5, -.px-5 { - padding-right: 3rem !important; -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important; -} - -.pl-5, -.px-5 { - padding-left: 3rem !important; -} - -.m-n1 { - margin: -0.25rem !important; -} - -.mt-n1, -.my-n1 { - margin-top: -0.25rem !important; -} - -.mr-n1, -.mx-n1 { - margin-right: -0.25rem !important; -} - -.mb-n1, -.my-n1 { - margin-bottom: -0.25rem !important; -} - -.ml-n1, -.mx-n1 { - margin-left: -0.25rem !important; -} - -.m-n2 { - margin: -0.5rem !important; -} - -.mt-n2, -.my-n2 { - margin-top: -0.5rem !important; -} - -.mr-n2, -.mx-n2 { - margin-right: -0.5rem !important; -} - -.mb-n2, -.my-n2 { - margin-bottom: -0.5rem !important; -} - -.ml-n2, -.mx-n2 { - margin-left: -0.5rem !important; -} - -.m-n3 { - margin: -1rem !important; -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important; -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important; -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important; -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important; -} - -.m-n4 { - margin: -1.5rem !important; -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important; -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important; -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important; -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important; -} - -.m-n5 { - margin: -3rem !important; -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important; -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important; -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important; -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto, -.my-auto { - margin-top: auto !important; -} - -.mr-auto, -.mx-auto { - margin-right: auto !important; -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important; -} - -.ml-auto, -.mx-auto { - margin-left: auto !important; -} - -@media (min-width: 576px) { - .m-sm-0 { - margin: 0 !important; - } - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important; - } - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important; - } - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important; - } - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .mt-sm-1, - .my-sm-1 { - margin-top: 0.25rem !important; - } - .mr-sm-1, - .mx-sm-1 { - margin-right: 0.25rem !important; - } - .mb-sm-1, - .my-sm-1 { - margin-bottom: 0.25rem !important; - } - .ml-sm-1, - .mx-sm-1 { - margin-left: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .mt-sm-2, - .my-sm-2 { - margin-top: 0.5rem !important; - } - .mr-sm-2, - .mx-sm-2 { - margin-right: 0.5rem !important; - } - .mb-sm-2, - .my-sm-2 { - margin-bottom: 0.5rem !important; - } - .ml-sm-2, - .mx-sm-2 { - margin-left: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important; - } - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important; - } - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important; - } - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important; - } - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important; - } - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important; - } - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important; - } - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important; - } - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important; - } - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important; - } - .p-sm-0 { - padding: 0 !important; - } - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important; - } - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important; - } - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important; - } - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .pt-sm-1, - .py-sm-1 { - padding-top: 0.25rem !important; - } - .pr-sm-1, - .px-sm-1 { - padding-right: 0.25rem !important; - } - .pb-sm-1, - .py-sm-1 { - padding-bottom: 0.25rem !important; - } - .pl-sm-1, - .px-sm-1 { - padding-left: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .pt-sm-2, - .py-sm-2 { - padding-top: 0.5rem !important; - } - .pr-sm-2, - .px-sm-2 { - padding-right: 0.5rem !important; - } - .pb-sm-2, - .py-sm-2 { - padding-bottom: 0.5rem !important; - } - .pl-sm-2, - .px-sm-2 { - padding-left: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important; - } - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important; - } - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important; - } - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important; - } - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important; - } - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important; - } - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important; - } - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important; - } - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important; - } - .m-sm-n1 { - margin: -0.25rem !important; - } - .mt-sm-n1, - .my-sm-n1 { - margin-top: -0.25rem !important; - } - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -0.25rem !important; - } - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -0.25rem !important; - } - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -0.25rem !important; - } - .m-sm-n2 { - margin: -0.5rem !important; - } - .mt-sm-n2, - .my-sm-n2 { - margin-top: -0.5rem !important; - } - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -0.5rem !important; - } - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -0.5rem !important; - } - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -0.5rem !important; - } - .m-sm-n3 { - margin: -1rem !important; - } - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important; - } - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important; - } - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important; - } - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important; - } - .m-sm-n4 { - margin: -1.5rem !important; - } - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important; - } - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important; - } - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important; - } - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important; - } - .m-sm-n5 { - margin: -3rem !important; - } - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important; - } - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important; - } - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important; - } - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important; - } - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important; - } - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important; - } - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important; - } -} - -@media (min-width: 768px) { - .m-md-0 { - margin: 0 !important; - } - .mt-md-0, - .my-md-0 { - margin-top: 0 !important; - } - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important; - } - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important; - } - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .mt-md-1, - .my-md-1 { - margin-top: 0.25rem !important; - } - .mr-md-1, - .mx-md-1 { - margin-right: 0.25rem !important; - } - .mb-md-1, - .my-md-1 { - margin-bottom: 0.25rem !important; - } - .ml-md-1, - .mx-md-1 { - margin-left: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .mt-md-2, - .my-md-2 { - margin-top: 0.5rem !important; - } - .mr-md-2, - .mx-md-2 { - margin-right: 0.5rem !important; - } - .mb-md-2, - .my-md-2 { - margin-bottom: 0.5rem !important; - } - .ml-md-2, - .mx-md-2 { - margin-left: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important; - } - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important; - } - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important; - } - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important; - } - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important; - } - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important; - } - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important; - } - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important; - } - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important; - } - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important; - } - .p-md-0 { - padding: 0 !important; - } - .pt-md-0, - .py-md-0 { - padding-top: 0 !important; - } - .pr-md-0, - .px-md-0 { - padding-right: 0 !important; - } - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important; - } - .pl-md-0, - .px-md-0 { - padding-left: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .pt-md-1, - .py-md-1 { - padding-top: 0.25rem !important; - } - .pr-md-1, - .px-md-1 { - padding-right: 0.25rem !important; - } - .pb-md-1, - .py-md-1 { - padding-bottom: 0.25rem !important; - } - .pl-md-1, - .px-md-1 { - padding-left: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .pt-md-2, - .py-md-2 { - padding-top: 0.5rem !important; - } - .pr-md-2, - .px-md-2 { - padding-right: 0.5rem !important; - } - .pb-md-2, - .py-md-2 { - padding-bottom: 0.5rem !important; - } - .pl-md-2, - .px-md-2 { - padding-left: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important; - } - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important; - } - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important; - } - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important; - } - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important; - } - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important; - } - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important; - } - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important; - } - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important; - } - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important; - } - .m-md-n1 { - margin: -0.25rem !important; - } - .mt-md-n1, - .my-md-n1 { - margin-top: -0.25rem !important; - } - .mr-md-n1, - .mx-md-n1 { - margin-right: -0.25rem !important; - } - .mb-md-n1, - .my-md-n1 { - margin-bottom: -0.25rem !important; - } - .ml-md-n1, - .mx-md-n1 { - margin-left: -0.25rem !important; - } - .m-md-n2 { - margin: -0.5rem !important; - } - .mt-md-n2, - .my-md-n2 { - margin-top: -0.5rem !important; - } - .mr-md-n2, - .mx-md-n2 { - margin-right: -0.5rem !important; - } - .mb-md-n2, - .my-md-n2 { - margin-bottom: -0.5rem !important; - } - .ml-md-n2, - .mx-md-n2 { - margin-left: -0.5rem !important; - } - .m-md-n3 { - margin: -1rem !important; - } - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important; - } - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important; - } - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important; - } - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important; - } - .m-md-n4 { - margin: -1.5rem !important; - } - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important; - } - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important; - } - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important; - } - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important; - } - .m-md-n5 { - margin: -3rem !important; - } - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important; - } - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important; - } - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important; - } - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mt-md-auto, - .my-md-auto { - margin-top: auto !important; - } - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important; - } - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important; - } - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important; - } -} - -@media (min-width: 992px) { - .m-lg-0 { - margin: 0 !important; - } - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important; - } - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important; - } - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important; - } - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .mt-lg-1, - .my-lg-1 { - margin-top: 0.25rem !important; - } - .mr-lg-1, - .mx-lg-1 { - margin-right: 0.25rem !important; - } - .mb-lg-1, - .my-lg-1 { - margin-bottom: 0.25rem !important; - } - .ml-lg-1, - .mx-lg-1 { - margin-left: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .mt-lg-2, - .my-lg-2 { - margin-top: 0.5rem !important; - } - .mr-lg-2, - .mx-lg-2 { - margin-right: 0.5rem !important; - } - .mb-lg-2, - .my-lg-2 { - margin-bottom: 0.5rem !important; - } - .ml-lg-2, - .mx-lg-2 { - margin-left: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important; - } - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important; - } - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important; - } - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important; - } - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important; - } - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important; - } - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important; - } - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important; - } - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important; - } - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important; - } - .p-lg-0 { - padding: 0 !important; - } - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important; - } - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important; - } - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important; - } - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .pt-lg-1, - .py-lg-1 { - padding-top: 0.25rem !important; - } - .pr-lg-1, - .px-lg-1 { - padding-right: 0.25rem !important; - } - .pb-lg-1, - .py-lg-1 { - padding-bottom: 0.25rem !important; - } - .pl-lg-1, - .px-lg-1 { - padding-left: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .pt-lg-2, - .py-lg-2 { - padding-top: 0.5rem !important; - } - .pr-lg-2, - .px-lg-2 { - padding-right: 0.5rem !important; - } - .pb-lg-2, - .py-lg-2 { - padding-bottom: 0.5rem !important; - } - .pl-lg-2, - .px-lg-2 { - padding-left: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important; - } - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important; - } - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important; - } - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important; - } - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important; - } - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important; - } - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important; - } - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important; - } - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important; - } - .m-lg-n1 { - margin: -0.25rem !important; - } - .mt-lg-n1, - .my-lg-n1 { - margin-top: -0.25rem !important; - } - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -0.25rem !important; - } - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -0.25rem !important; - } - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -0.25rem !important; - } - .m-lg-n2 { - margin: -0.5rem !important; - } - .mt-lg-n2, - .my-lg-n2 { - margin-top: -0.5rem !important; - } - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -0.5rem !important; - } - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -0.5rem !important; - } - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -0.5rem !important; - } - .m-lg-n3 { - margin: -1rem !important; - } - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important; - } - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important; - } - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important; - } - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important; - } - .m-lg-n4 { - margin: -1.5rem !important; - } - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important; - } - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important; - } - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important; - } - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important; - } - .m-lg-n5 { - margin: -3rem !important; - } - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important; - } - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important; - } - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important; - } - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important; - } - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important; - } - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important; - } - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important; - } -} - -@media (min-width: 1200px) { - .m-xl-0 { - margin: 0 !important; - } - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important; - } - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important; - } - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important; - } - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .mt-xl-1, - .my-xl-1 { - margin-top: 0.25rem !important; - } - .mr-xl-1, - .mx-xl-1 { - margin-right: 0.25rem !important; - } - .mb-xl-1, - .my-xl-1 { - margin-bottom: 0.25rem !important; - } - .ml-xl-1, - .mx-xl-1 { - margin-left: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .mt-xl-2, - .my-xl-2 { - margin-top: 0.5rem !important; - } - .mr-xl-2, - .mx-xl-2 { - margin-right: 0.5rem !important; - } - .mb-xl-2, - .my-xl-2 { - margin-bottom: 0.5rem !important; - } - .ml-xl-2, - .mx-xl-2 { - margin-left: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important; - } - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important; - } - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important; - } - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important; - } - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important; - } - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important; - } - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important; - } - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important; - } - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important; - } - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important; - } - .p-xl-0 { - padding: 0 !important; - } - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important; - } - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important; - } - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important; - } - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .pt-xl-1, - .py-xl-1 { - padding-top: 0.25rem !important; - } - .pr-xl-1, - .px-xl-1 { - padding-right: 0.25rem !important; - } - .pb-xl-1, - .py-xl-1 { - padding-bottom: 0.25rem !important; - } - .pl-xl-1, - .px-xl-1 { - padding-left: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .pt-xl-2, - .py-xl-2 { - padding-top: 0.5rem !important; - } - .pr-xl-2, - .px-xl-2 { - padding-right: 0.5rem !important; - } - .pb-xl-2, - .py-xl-2 { - padding-bottom: 0.5rem !important; - } - .pl-xl-2, - .px-xl-2 { - padding-left: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important; - } - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important; - } - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important; - } - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important; - } - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important; - } - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important; - } - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important; - } - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important; - } - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important; - } - .m-xl-n1 { - margin: -0.25rem !important; - } - .mt-xl-n1, - .my-xl-n1 { - margin-top: -0.25rem !important; - } - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -0.25rem !important; - } - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -0.25rem !important; - } - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -0.25rem !important; - } - .m-xl-n2 { - margin: -0.5rem !important; - } - .mt-xl-n2, - .my-xl-n2 { - margin-top: -0.5rem !important; - } - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -0.5rem !important; - } - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -0.5rem !important; - } - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -0.5rem !important; - } - .m-xl-n3 { - margin: -1rem !important; - } - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important; - } - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important; - } - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important; - } - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important; - } - .m-xl-n4 { - margin: -1.5rem !important; - } - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important; - } - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important; - } - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important; - } - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important; - } - .m-xl-n5 { - margin: -3rem !important; - } - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important; - } - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important; - } - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important; - } - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important; - } - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important; - } - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important; - } - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important; - } -} -/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css.map b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css.map deleted file mode 100644 index 8661e3e3..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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Z;ELw1BlB;EKv1BM;IAAwB,iBADZ;IACY,QADZ;EL21BlB;EK11BM;IAAwB,iBADZ;IACY,QADZ;EL81BlB;EK71BM;IAAwB,iBADZ;IACY,QADZ;ELi2BlB;EKh2BM;IAAwB,iBADZ;IACY,QADZ;ELo2BlB;EKn2BM;IAAwB,iBADZ;IACY,QADZ;ELu2BlB;EKt2BM;IAAwB,iBADZ;IACY,QADZ;EL02BlB;EKz2BM;IAAwB,iBADZ;IACY,QADZ;EL62BlB;EK52BM;IAAwB,kBADZ;IACY,SADZ;ELg3BlB;EK/2BM;IAAwB,kBADZ;IACY,SADZ;ELm3BlB;EKl3BM;IAAwB,kBADZ;IACY,SADZ;ELs3BlB;EK/2BQ;IHRR,cAA4B;EF03B5B;EKl3BQ;IHRR,sBAA8C;EF63B9C;EKr3BQ;IHRR,uBAA8C;EFg4B9C;EKx3BQ;IHRR,gBAA8C;EFm4B9C;EK33BQ;IHRR,uBAA8C;EFs4B9C;EK93BQ;IHRR,uBAA8C;EFy4B9C;EKj4BQ;IHRR,gBAA8C;EF44B9C;EKp4BQ;IHRR,uBAA8C;EF+4B9C;EKv4BQ;IHRR,uBAA8C;EFk5B9C;EK14BQ;IHRR,gBAA8C;EFq5B9C;EK74BQ;IHRR,uBAA8C;EFw5B9C;EKh5BQ;IHRR,uBAA8C;EF25B9C;AACF;;AMx8BM;EAAwB,wBAA0B;AN48BxD;;AM58BM;EAAwB,0BAA0B;ANg9BxD;;AMh9BM;EAAwB,gCAA0B;ANo9BxD;;AMp9BM;EAAwB,yBAA0B;ANw9BxD;;AMx9BM;EAAwB,yBAA0B;AN49BxD;;AM59BM;EAAwB,6BAA0B;ANg+BxD;;AMh+BM;EAAwB,8BAA0B;ANo+BxD;;AMp+BM;EAAwB,+BAA0B;EAA1B,wBAA0B;ANw+BxD;;AMx+BM;EAAwB,sCAA0B;EAA1B,+BAA0B;AN4+BxD;;AG37BI;EGjDE;IAAwB,wBAA0B;ENi/BtD;EMj/BI;IAAwB,0BAA0B;ENo/BtD;EMp/BI;IAAwB,gCAA0B;ENu/BtD;EMv/BI;IAAwB,yBAA0B;EN0/BtD;EM1/BI;IAAwB,yBAA0B;EN6/BtD;EM7/BI;IAAwB,6BAA0B;ENggCtD;EMhgCI;IAAwB,8BAA0B;ENmgCtD;EM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A0C;ARurDpD;;AQrrDQ;;EAEE,yBAAsC;ARwrDhD;;AQvsDQ;EAAgC,0BAA4B;AR2sDpE;;AQ1sDQ;;EAEE,8BAAoC;AR6sD9C;;AQ3sDQ;;EAEE,gCAAwC;AR8sDlD;;AQ5sDQ;;EAEE,iCAA0C;AR+sDpD;;AQ7sDQ;;EAEE,+BAAsC;ARgtDhD;;AQ/tDQ;EAAgC,yBAA4B;ARmuDpE;;AQluDQ;;EAEE,6BAAoC;ARquD9C;;AQnuDQ;;EAEE,+BAAwC;ARsuDlD;;AQpuDQ;;EAEE,gCAA0C;ARuuDpD;;AQruDQ;;EAEE,8BAAsC;ARwuDhD;;AQvvDQ;EAAgC,uBAA4B;AR2vDpE;;AQ1vDQ;;EAEE,2BAAoC;AR6vD9C;;AQ3vDQ;;EAEE,6BAAwC;AR8vDlD;;AQ5vDQ;;EAEE,8BAA0C;AR+vDpD;;AQ7vDQ;;EAEE,4BAAsC;ARgwDhD;;AQ/wDQ;EAAgC,yBAA4B;ARmxDpE;;AQlxDQ;;EAEE,6BAAoC;ARqxD9C;;AQnxDQ;;EAEE,+BAAwC;ARsxDlD;;AQpxDQ;;EAEE,gCAA0C;ARuxDpD;;AQrxDQ;;EAEE,8BAAsC;ARwxDhD;;AQvyDQ;EAAgC,uBAA4B;AR2yDpE;;AQ1yDQ;;EAEE,2BAAoC;AR6yD9C;;AQ3yDQ;;EAEE,6BAAwC;AR8yDlD;;AQ5yDQ;;EAEE,8BAA0C;AR+yDpD;;AQ7yDQ;;EAEE,4BAAsC;ARgzDhD;;AQ/zDQ;EAAgC,qBAA4B;ARm0DpE;;AQl0DQ;;EAEE,yBAAoC;ARq0D9C;;AQn0DQ;;EAEE,2BAAwC;ARs0DlD;;AQp0DQ;;EAEE,4BAA0C;ARu0DpD;;AQr0DQ;;EAEE,0BAAsC;ARw0DhD;;AQv1DQ;EAAgC,2BAA4B;AR21DpE;;AQ11DQ;;EAEE,+BAAoC;AR61D9C;;AQ31DQ;;EAEE,iCAAwC;AR81DlD;;AQ51DQ;;EAEE,kCAA0C;AR+1DpD;;AQ71DQ;;EAEE,gCAAsC;ARg2DhD;;AQ/2DQ;EAAgC,0BAA4B;ARm3DpE;;AQl3DQ;;EAEE,8BAAoC;ARq3D9C;;AQn3DQ;;EAEE,gCAAwC;ARs3DlD;;AQp3DQ;;EAEE,iCAA0C;ARu3DpD;;AQr3DQ;;EAEE,+BAAsC;ARw3DhD;;AQv4DQ;EAAgC,wBAA4B;AR24DpE;;AQ14DQ;;EAEE,4BAAoC;AR64D9C;;AQ34DQ;;EAEE,8BAAwC;AR84DlD;;AQ54DQ;;EAEE,+BAA0C;AR+4DpD;;AQ74DQ;;EAEE,6BAAsC;ARg5DhD;;AQ/5DQ;EAAgC,0BAA4B;ARm6DpE;;AQl6DQ;;EAEE,8BAAoC;ARq6D9C;;AQn6DQ;;EAEE,gCAAwC;ARs6DlD;;AQp6DQ;;EAEE,iCAA0C;ARu6DpD;;AQr6DQ;;EAEE,+BAAsC;ARw6DhD;;AQv7DQ;EAAgC,wBAA4B;AR27DpE;;AQ17DQ;;EAEE,4BAAoC;AR67D9C;;AQ37DQ;;EAEE,8BAAwC;AR87DlD;;AQ57DQ;;EAEE,+BAA0C;AR+7DpD;;AQ77DQ;;EAEE,6BAAsC;ARg8DhD;;AQx7DQ;EAAwB,2BAA2B;AR47D3D;;AQ37DQ;;EAEE,+BAA+B;AR87DzC;;AQ57DQ;;EAEE,iCAAiC;AR+7D3C;;AQ77DQ;;EAEE,kCAAkC;ARg8D5C;;AQ97DQ;;EAEE,gCAAgC;ARi8D1C;;AQh9DQ;EAAwB,0BAA2B;ARo9D3D;;AQn9DQ;;EAEE,8BAA+B;ARs9DzC;;AQp9DQ;;EAEE,gCAAiC;ARu9D3C;;AQr9DQ;;EAEE,iCAAkC;ARw9D5C;;AQt9DQ;;EAEE,+BAAgC;ARy9D1C;;AQx+DQ;EAAwB,wBAA2B;AR4+D3D;;AQ3+DQ;;EAEE,4BAA+B;AR8+DzC;;AQ5+DQ;;EAEE,8BAAiC;AR++D3C;;AQ7+DQ;;EAEE,+BAAkC;ARg/D5C;;AQ9+DQ;;EAEE,6BAAgC;ARi/D1C;;AQhgEQ;EAAwB,0BAA2B;ARogE3D;;AQngEQ;;EAEE,8BAA+B;ARsgEzC;;AQpgEQ;;EAEE,gCAAiC;ARugE3C;;AQrgEQ;;EAEE,iCAAkC;ARwgE5C;;AQtgEQ;;EAEE,+BAAgC;ARygE1C;;AQxhEQ;EAAwB,wBAA2B;AR4hE3D;;AQ3hEQ;;EAEE,4BAA+B;AR8hEzC;;AQ5hEQ;;EAEE,8BAAiC;AR+hE3C;;AQ7hEQ;;EAEE,+BAAkC;ARgiE5C;;AQ9hEQ;;EAEE,6BAAgC;ARiiE1C;;AQ3hEI;EAAmB,uBAAuB;AR+hE9C;;AQ9hEI;;EAEE,2BAA2B;ARiiEjC;;AQ/hEI;;EAEE,6BAA6B;ARkiEnC;;AQhiEI;;EAEE,8BAA8B;ARmiEpC;;AQjiEI;;EAEE,4BAA4B;ARoiElC;;AG7iEI;EKlDI;IAAgC,oBAA4B;ERomElE;EQnmEM;;IAEE,wBAAoC;ERqmE5C;EQnmEM;;IAEE,0BAAwC;ERqmEhD;EQnmEM;;IAEE,2BAA0C;ERqmElD;EQnmEM;;IAEE,yBAAsC;ERqmE9C;EQpnEM;IAAgC,0BAA4B;ERunElE;EQtnEM;;IAEE,8BAAoC;ERwnE5C;EQtnEM;;IAEE,gCAAwC;ERwnEhD;EQtnEM;;IAEE,iCAA0C;ERwnElD;EQtnEM;;IAEE,+BAAsC;ERwnE9C;EQvoEM;IAAgC,yBAA4B;ER0oElE;EQzoEM;;IAEE,6BAAoC;ER2oE5C;EQzoEM;;IAEE,+BAAwC;ER2oEhD;EQzoEM;;IAEE,gCAA0C;ER2oElD;EQzoEM;;IAEE,8BAAsC;ER2oE9C;EQ1pEM;IAAgC,uBAA4B;ER6pElE;EQ5pEM;;IAEE,2BAAoC;ER8pE5C;EQ5pEM;;IAEE,6BAAwC;ER8pEhD;EQ5pEM;;IAEE,8BAA0C;ER8pElD;EQ5pEM;;IAEE,4BAAsC;ER8pE9C;EQ7qEM;IAAgC,yBAA4B;ERgrElE;EQ/qEM;;IAEE,6BAAoC;ERirE5C;EQ/qEM;;IAEE,+BAAwC;ERirEhD;EQ/qEM;;IAEE,gCAA0C;ERirElD;EQ/qEM;;IAEE,8BAAsC;ERirE9C;EQhsEM;IAAgC,uBAA4B;ERmsElE;EQlsEM;;IAEE,2BAAoC;ERosE5C;EQlsEM;;IAEE,6BAAwC;ERosEhD;EQlsEM;;IAEE,8BAA0C;ERosElD;EQlsEM;;IAEE,4BAAsC;ERosE9C;EQntEM;IAAgC,qBAA4B;ERstElE;EQrtEM;;IAEE,yBAAoC;ERutE5C;EQrtEM;;IAEE,2BAAwC;ERutEhD;EQrtEM;;IAEE,4BAA0C;ERutElD;EQrtEM;;IAEE,0BAAsC;ERutE9C;EQtuEM;IAAgC,2BAA4B;ERyuElE;EQxuEM;;IAEE,+BAAoC;ER0uE5C;EQxuEM;;IAEE,iCAAwC;ER0uEhD;EQxuEM;;IAEE,kCAA0C;ER0uElD;EQxuEM;;IAEE,gCAAsC;ER0uE9C;EQzvEM;IAAgC,0BAA4B;ER4vElE;EQ3vEM;;IAEE,8BAAoC;ER6vE5C;EQ3vEM;;IAEE,gCAAwC;ER6vEhD;EQ3vEM;;IAEE,iCAA0C;ER6vElD;EQ3vEM;;IAEE,+BAAsC;ER6vE9C;EQ5wEM;IAAgC,wBAA4B;ER+wElE;EQ9wEM;;IAEE,4BAAoC;ERgxE5C;EQ9wEM;;IAEE,8BAAwC;ERgxEhD;EQ9wEM;;IAEE,+BAA0C;ERgxElD;EQ9wEM;;IAEE,6BAAsC;ERgxE9C;EQ/xEM;IAAgC,0BAA4B;ERkyElE;EQjyEM;;IAEE,8BAAoC;ERmyE5C;EQjyEM;;IAEE,gCAAwC;ERmyEhD;EQjyEM;;IAEE,iCAA0C;ERmyElD;EQjyEM;;IAEE,+BAAsC;ERmyE9C;EQlzEM;IAAgC,wBAA4B;ERqzElE;EQpzEM;;IAEE,4BAAoC;ERszE5C;EQpzEM;;IAEE,8BAAwC;ERszEhD;EQpzEM;;IAEE,+BAA0C;ERszElD;EQpzEM;;IAEE,6BAAsC;ERszE9C;EQ9yEM;IAAwB,2BAA2B;ERizEzD;EQhzEM;;IAEE,+BAA+B;ERkzEvC;EQhzEM;;IAEE,iCAAiC;ERkzEzC;EQhzEM;;IAEE,kCAAkC;ERkzE1C;EQhzEM;;IAEE,gCAAgC;ERkzExC;EQj0EM;IAAwB,0BAA2B;ERo0EzD;EQn0EM;;IAEE,8BAA+B;ERq0EvC;EQn0EM;;IAEE,gCAAiC;ERq0EzC;EQn0EM;;IAEE,iCAAkC;ERq0E1C;EQn0EM;;IAEE,+BAAgC;ERq0ExC;EQp1EM;IAAwB,wBAA2B;ERu1EzD;EQt1EM;;IAEE,4BAA+B;ERw1EvC;EQt1EM;;IAEE,8BAAiC;ERw1EzC;EQt1EM;;IAEE,+BAAkC;ERw1E1C;EQt1EM;;IAEE,6BAAgC;ERw1ExC;EQv2EM;IAAwB,0BAA2B;ER02EzD;EQz2EM;;IAEE,8BAA+B;ER22EvC;EQz2EM;;IAEE,gCAAiC;ER22EzC;EQz2EM;;IAEE,iCAAkC;ER22E1C;EQz2EM;;IAEE,+BAAgC;ER22ExC;EQ13EM;IAAwB,wBAA2B;ER63EzD;EQ53EM;;IAEE,4BAA+B;ER83EvC;EQ53EM;;IAEE,8BAAiC;ER83EzC;EQ53EM;;IAEE,+BAAkC;ER83E1C;EQ53EM;;IAEE,6BAAgC;ER83ExC;EQx3EE;IAAmB,uBAAuB;ER23E5C;EQ13EE;;IAEE,2BAA2B;ER43E/B;EQ13EE;;IAEE,6BAA6B;ER43EjC;EQ13EE;;IAEE,8BAA8B;ER43ElC;EQ13EE;;IAEE,4BAA4B;ER43EhC;AACF;;AGt4EI;EKlDI;IAAgC,oBAA4B;ER67ElE;EQ57EM;;IAEE,wBAAoC;ER87E5C;EQ57EM;;IAEE,0BAAwC;ER87EhD;EQ57EM;;IAEE,2BAA0C;ER87ElD;EQ57EM;;IAEE,yBAAsC;ER87E9C;EQ78EM;IAAgC,0BAA4B;ERg9ElE;EQ/8EM;;IAEE,8BAAoC;ERi9E5C;EQ/8EM;;IAEE,gCAAwC;ERi9EhD;EQ/8EM;;IAEE,iCAA0C;ERi9ElD;EQ/8EM;;IAEE,+BAAsC;ERi9E9C;EQh+EM;IAAgC,yBAA4B;ERm+ElE;EQl+EM;;IAEE,6BAAoC;ERo+E5C;EQl+EM;;IAEE,+BAAwC;ERo+EhD;EQl+EM;;IAEE,gCAA0C;ERo+ElD;EQl+EM;;IAEE,8BAAsC;ERo+E9C;EQn/EM;IAAgC,uBAA4B;ERs/ElE;EQr/EM;;IAEE,2BAAoC;ERu/E5C;EQr/EM;;IAEE,6BAAwC;ERu/EhD;EQr/EM;;IAEE,8BAA0C;ERu/ElD;EQr/EM;;IAEE,4BAAsC;ERu/E9C;EQtgFM;IAAgC,yBAA4B;ERygFlE;EQxgFM;;IAEE,6BAAoC;ER0gF5C;EQxgFM;;IAEE,+BAAwC;ER0gFhD;EQxgFM;;IAEE,gCAA0C;ER0gFlD;EQxgFM;;IAEE,8BAAsC;ER0gF9C;EQzhFM;IAAgC,uBAA4B;ER4hFlE;EQ3hFM;;IAEE,2BAAoC;ER6hF5C;EQ3hFM;;IAEE,6BAAwC;ER6hFhD;EQ3hFM;;IAEE,8BAA0C;ER6hFlD;EQ3hFM;;IAEE,4BAAsC;ER6hF9C;EQ5iFM;IAAgC,qBAA4B;ER+iFlE;EQ9iFM;;IAEE,yBAAoC;ERgjF5C;EQ9iFM;;IAEE,2BAAwC;ERgjFhD;EQ9iFM;;IAEE,4BAA0C;ERgjFlD;EQ9iFM;;IAEE,0BAAsC;ERgjF9C;EQ/jFM;IAAgC,2BAA4B;ERkkFlE;EQjkFM;;IAEE,+BAAoC;ERmkF5C;EQjkFM;;IAEE,iCAAwC;ERmkFhD;EQjkFM;;IAEE,kCAA0C;ERmkFlD;EQjkFM;;IAEE,gCAAsC;ERmkF9C;EQllFM;IAAgC,0BAA4B;ERqlFlE;EQplFM;;IAEE,8BAAoC;ERslF5C;EQplFM;;IAEE,gCAAwC;ERslFhD;EQplFM;;IAEE,iCAA0C;ERslFlD;EQplFM;;IAEE,+BAAsC;ERslF9C;EQrmFM;IAAgC,wBAA4B;ERwmFlE;EQvmFM;;IAEE,4BAAoC;ERymF5C;EQvmFM;;IAEE,8BAAwC;ERymFhD;EQvmFM;;IAEE,+BAA0C;ERymFlD;EQvmFM;;IAEE,6BAAsC;ERymF9C;EQxnFM;IAAgC,0BAA4B;ER2nFlE;EQ1nFM;;IAEE,8BAAoC;ER4nF5C;EQ1nFM;;IAEE,gCAAwC;ER4nFhD;EQ1nFM;;IAEE,iCAA0C;ER4nFlD;EQ1nFM;;IAEE,+BAAsC;ER4nF9C;EQ3oFM;IAAgC,wBAA4B;ER8oFlE;EQ7oFM;;IAEE,4BAAoC;ER+oF5C;EQ7oFM;;IAEE,8BAAwC;ER+oFhD;EQ7oFM;;IAEE,+BAA0C;ER+oFlD;EQ7oFM;;IAEE,6BAAsC;ER+oF9C;EQvoFM;IAAwB,2BAA2B;ER0oFzD;EQzoFM;;IAEE,+BAA+B;ER2oFvC;EQzoFM;;IAEE,iCAAiC;ER2oFzC;EQzoFM;;IAEE,kCAAkC;ER2oF1C;EQzoFM;;IAEE,gCAAgC;ER2oFxC;EQ1pFM;IAAwB,0BAA2B;ER6pFzD;EQ5pFM;;IAEE,8BAA+B;ER8pFvC;EQ5pFM;;IAEE,gCAAiC;ER8pFzC;EQ5pFM;;IAEE,iCAAkC;ER8pF1C;EQ5pFM;;IAEE,+BAAgC;ER8pFxC;EQ7qFM;IAAwB,wBAA2B;ERgrFzD;EQ/qFM;;IAEE,4BAA+B;ERirFvC;EQ/qFM;;IAEE,8BAAiC;ERirFzC;EQ/qFM;;IAEE,+BAAkC;ERirF1C;EQ/qFM;;IAEE,6BAAgC;ERirFxC;EQhsFM;IAAwB,0BAA2B;ERmsFzD;EQlsFM;;IAEE,8BAA+B;ERosFvC;EQlsFM;;IAEE,gCAAiC;ERosFzC;EQlsFM;;IAEE,iCAAkC;ERosF1C;EQlsFM;;IAEE,+BAAgC;ERosFxC;EQntFM;IAAwB,wBAA2B;ERstFzD;EQrtFM;;IAEE,4BAA+B;ERutFvC;EQrtFM;;IAEE,8BAAiC;ERutFzC;EQrtFM;;IAEE,+BAAkC;ERutF1C;EQrtFM;;IAEE,6BAAgC;ERutFxC;EQjtFE;IAAmB,uBAAuB;ERotF5C;EQntFE;;IAEE,2BAA2B;ERqtF/B;EQntFE;;IAEE,6BAA6B;ERqtFjC;EQntFE;;IAEE,8BAA8B;ERqtFlC;EQntFE;;IAEE,4BAA4B;ERqtFhC;AACF;;AG/tFI;EKlDI;IAAgC,oBAA4B;ERsxFlE;EQrxFM;;IAEE,wBAAoC;ERuxF5C;EQrxFM;;IAEE,0BAAwC;ERuxFhD;EQrxFM;;IAEE,2BAA0C;ERuxFlD;EQrxFM;;IAEE,yBAAsC;ERuxF9C;EQtyFM;IAAgC,0BAA4B;ERyyFlE;EQxyFM;;IAEE,8BAAoC;ER0yF5C;EQxyFM;;IAEE,gCAAwC;ER0yFhD;EQxyFM;;IAEE,iCAA0C;ER0yFlD;EQxyFM;;IAEE,+BAAsC;ER0yF9C;EQzzFM;IAAgC,yBAA4B;ER4zFlE;EQ3zFM;;IAEE,6BAAoC;ER6zF5C;EQ3zFM;;IAEE,+BAAwC;ER6zFhD;EQ3zFM;;IAEE,gCAA0C;ER6zFlD;EQ3zFM;;IAEE,8BAAsC;ER6zF9C;EQ50FM;IAAgC,uBAA4B;ER+0FlE;EQ90FM;;IAEE,2BAAoC;ERg1F5C;EQ90FM;;IAEE,6BAAwC;ERg1FhD;EQ90FM;;IAEE,8BAA0C;ERg1FlD;EQ90FM;;IAEE,4BAAsC;ERg1F9C;EQ/1FM;IAAgC,yBAA4B;ERk2FlE;EQj2FM;;IAEE,6BAAoC;ERm2F5C;EQj2FM;;IAEE,+BAAwC;ERm2FhD;EQj2FM;;IAEE,gCAA0C;ERm2FlD;EQj2FM;;IAEE,8BAAsC;ERm2F9C;EQl3FM;IAAgC,uBAA4B;ERq3FlE;EQp3FM;;IAEE,2BAAoC;ERs3F5C;EQp3FM;;IAEE,6BAAwC;ERs3FhD;EQp3FM;;IAEE,8BAA0C;ERs3FlD;EQp3FM;;IAEE,4BAAsC;ERs3F9C;EQr4FM;IAAgC,qBAA4B;ERw4FlE;EQv4FM;;IAEE,yBAAoC;ERy4F5C;EQv4FM;;IAEE,2BAAwC;ERy4FhD;EQv4FM;;IAEE,4BAA0C;ERy4FlD;EQv4FM;;IAEE,0BAAsC;ERy4F9C;EQx5FM;IAAgC,2BAA4B;ER25FlE;EQ15FM;;IAEE,+BAAoC;ER45F5C;EQ15FM;;IAEE,iCAAwC;ER45FhD;EQ15FM;;IAEE,kCAA0C;ER45FlD;EQ15FM;;IAEE,gCAAsC;ER45F9C;EQ36FM;IAAgC,0BAA4B;ER86FlE;EQ76FM;;IAEE,8BAAoC;ER+6F5C;EQ76FM;;IAEE,gCAAwC;ER+6FhD;EQ76FM;;IAEE,iCAA0C;ER+6FlD;EQ76FM;;IAEE,+BAAsC;ER+6F9C;EQ97FM;IAAgC,wBAA4B;ERi8FlE;EQh8FM;;IAEE,4BAAoC;ERk8F5C;EQh8FM;;IAEE,8BAAwC;ERk8FhD;EQh8FM;;IAEE,+BAA0C;ERk8FlD;EQh8FM;;IAEE,6BAAsC;ERk8F9C;EQj9FM;IAAgC,0BAA4B;ERo9FlE;EQn9FM;;IAEE,8BAAoC;ERq9F5C;EQn9FM;;IAEE,gCAAwC;ERq9FhD;EQn9FM;;IAEE,iCAA0C;ERq9FlD;EQn9FM;;IAEE,+BAAsC;ERq9F9C;EQp+FM;IAAgC,wBAA4B;ERu+FlE;EQt+FM;;IAEE,4BAAoC;ERw+F5C;EQt+FM;;IAEE,8BAAwC;ERw+FhD;EQt+FM;;IAEE,+BAA0C;ERw+FlD;EQt+FM;;IAEE,6BAAsC;ERw+F9C;EQh+FM;IAAwB,2BAA2B;ERm+FzD;EQl+FM;;IAEE,+BAA+B;ERo+FvC;EQl+FM;;IAEE,iCAAiC;ERo+FzC;EQl+FM;;IAEE,kCAAkC;ERo+F1C;EQl+FM;;IAEE,gCAAgC;ERo+FxC;EQn/FM;IAAwB,0BAA2B;ERs/FzD;EQr/FM;;IAEE,8BAA+B;ERu/FvC;EQr/FM;;IAEE,gCAAiC;ERu/FzC;EQr/FM;;IAEE,iCAAkC;ERu/F1C;EQr/FM;;IAEE,+BAAgC;ERu/FxC;EQtgGM;IAAwB,wBAA2B;ERygGzD;EQxgGM;;IAEE,4BAA+B;ER0gGvC;EQxgGM;;IAEE,8BAAiC;ER0gGzC;EQxgGM;;IAEE,+BAAkC;ER0gG1C;EQxgGM;;IAEE,6BAAgC;ER0gGxC;EQzhGM;IAAwB,0BAA2B;ER4hGzD;EQ3hGM;;IAEE,8BAA+B;ER6hGvC;EQ3hGM;;IAEE,gCAAiC;ER6hGzC;EQ3hGM;;IAEE,iCAAkC;ER6hG1C;EQ3hGM;;IAEE,+BAAgC;ER6hGxC;EQ5iGM;IAAwB,wBAA2B;ER+iGzD;EQ9iGM;;IAEE,4BAA+B;ERgjGvC;EQ9iGM;;IAEE,8BAAiC;ERgjGzC;EQ9iGM;;IAEE,+BAAkC;ERgjG1C;EQ9iGM;;IAEE,6BAAgC;ERgjGxC;EQ1iGE;IAAmB,uBAAuB;ER6iG5C;EQ5iGE;;IAEE,2BAA2B;ER8iG/B;EQ5iGE;;IAEE,6BAA6B;ER8iGjC;EQ5iGE;;IAEE,8BAA8B;ER8iGlC;EQ5iGE;;IAEE,4BAA4B;ER8iGhC;AACF;;AGxjGI;EKlDI;IAAgC,oBAA4B;ER+mGlE;EQ9mGM;;IAEE,wBAAoC;ERgnG5C;EQ9mGM;;IAEE,0BAAwC;ERgnGhD;EQ9mGM;;IAEE,2BAA0C;ERgnGlD;EQ9mGM;;IAEE,yBAAsC;ERgnG9C;EQ/nGM;IAAgC,0BAA4B;ERkoGlE;EQjoGM;;IAEE,8BAAoC;ERmoG5C;EQjoGM;;IAEE,gCAAwC;ERmoGhD;EQjoGM;;IAEE,iCAA0C;ERmoGlD;EQjoGM;;IAEE,+BAAsC;ERmoG9C;EQlpGM;IAAgC,yBAA4B;ERqpGlE;EQppGM;;IAEE,6BAAoC;ERspG5C;EQppGM;;IAEE,+BAAwC;ERspGhD;EQppGM;;IAEE,gCAA0C;ERspGlD;EQppGM;;IAEE,8BAAsC;ERspG9C;EQrqGM;IAAgC,uBAA4B;ERwqGlE;EQvqGM;;IAEE,2BAAoC;ERyqG5C;EQvqGM;;IAEE,6BAAwC;ERyqGhD;EQvqGM;;IAEE,8BAA0C;ERyqGlD;EQvqGM;;IAEE,4BAAsC;ERyqG9C;EQxrGM;IAAgC,yBAA4B;ER2rGlE;EQ1rGM;;IAEE,6BAAoC;ER4rG5C;EQ1rGM;;IAEE,+BAAwC;ER4rGhD;EQ1rGM;;IAEE,gCAA0C;ER4rGlD;EQ1rGM;;IAEE,8BAAsC;ER4rG9C;EQ3sGM;IAAgC,uBAA4B;ER8sGlE;EQ7sGM;;IAEE,2BAAoC;ER+sG5C;EQ7sGM;;IAEE,6BAAwC;ER+sGhD;EQ7sGM;;IAEE,8BAA0C;ER+sGlD;EQ7sGM;;IAEE,4BAAsC;ER+sG9C;EQ9tGM;IAAgC,qBAA4B;ERiuGlE;EQhuGM;;IAEE,yBAAoC;ERkuG5C;EQhuGM;;IAEE,2BAAwC;ERkuGhD;EQhuGM;;IAEE,4BAA0C;ERkuGlD;EQhuGM;;IAEE,0BAAsC;ERkuG9C;EQjvGM;IAAgC,2BAA4B;ERovGlE;EQnvGM;;IAEE,+BAAoC;ERqvG5C;EQnvGM;;IAEE,iCAAwC;ERqvGhD;EQnvGM;;IAEE,kCAA0C;ERqvGlD;EQnvGM;;IAEE,gCAAsC;ERqvG9C;EQpwGM;IAAgC,0BAA4B;ERuwGlE;EQtwGM;;IAEE,8BAAoC;ERwwG5C;EQtwGM;;IAEE,gCAAwC;ERwwGhD;EQtwGM;;IAEE,iCAA0C;ERwwGlD;EQtwGM;;IAEE,+BAAsC;ERwwG9C;EQvxGM;IAAgC,wBAA4B;ER0xGlE;EQzxGM;;IAEE,4BAAoC;ER2xG5C;EQzxGM;;IAEE,8BAAwC;ER2xGhD;EQzxGM;;IAEE,+BAA0C;ER2xGlD;EQzxGM;;IAEE,6BAAsC;ER2xG9C;EQ1yGM;IAAgC,0BAA4B;ER6yGlE;EQ5yGM;;IAEE,8BAAoC;ER8yG5C;EQ5yGM;;IAEE,gCAAwC;ER8yGhD;EQ5yGM;;IAEE,iCAA0C;ER8yGlD;EQ5yGM;;IAEE,+BAAsC;ER8yG9C;EQ7zGM;IAAgC,wBAA4B;ERg0GlE;EQ/zGM;;IAEE,4BAAoC;ERi0G5C;EQ/zGM;;IAEE,8BAAwC;ERi0GhD;EQ/zGM;;IAEE,+BAA0C;ERi0GlD;EQ/zGM;;IAEE,6BAAsC;ERi0G9C;EQzzGM;IAAwB,2BAA2B;ER4zGzD;EQ3zGM;;IAEE,+BAA+B;ER6zGvC;EQ3zGM;;IAEE,iCAAiC;ER6zGzC;EQ3zGM;;IAEE,kCAAkC;ER6zG1C;EQ3zGM;;IAEE,gCAAgC;ER6zGxC;EQ50GM;IAAwB,0BAA2B;ER+0GzD;EQ90GM;;IAEE,8BAA+B;ERg1GvC;EQ90GM;;IAEE,gCAAiC;ERg1GzC;EQ90GM;;IAEE,iCAAkC;ERg1G1C;EQ90GM;;IAEE,+BAAgC;ERg1GxC;EQ/1GM;IAAwB,wBAA2B;ERk2GzD;EQj2GM;;IAEE,4BAA+B;ERm2GvC;EQj2GM;;IAEE,8BAAiC;ERm2GzC;EQj2GM;;IAEE,+BAAkC;ERm2G1C;EQj2GM;;IAEE,6BAAgC;ERm2GxC;EQl3GM;IAAwB,0BAA2B;ERq3GzD;EQp3GM;;IAEE,8BAA+B;ERs3GvC;EQp3GM;;IAEE,gCAAiC;ERs3GzC;EQp3GM;;IAEE,iCAAkC;ERs3G1C;EQp3GM;;IAEE,+BAAgC;ERs3GxC;EQr4GM;IAAwB,wBAA2B;ERw4GzD;EQv4GM;;IAEE,4BAA+B;ERy4GvC;EQv4GM;;IAEE,8BAAiC;ERy4GzC;EQv4GM;;IAEE,+BAAkC;ERy4G1C;EQv4GM;;IAEE,6BAAgC;ERy4GxC;EQn4GE;IAAmB,uBAAuB;ERs4G5C;EQr4GE;;IAEE,2BAA2B;ERu4G/B;EQr4GE;;IAEE,6BAA6B;ERu4GjC;EQr4GE;;IAEE,8BAA8B;ERu4GlC;EQr4GE;;IAEE,4BAA4B;ERu4GhC;AACF","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n @each $name, $width in $grid-breakpoints {\n @if ($container-max-width > $width or $breakpoint == $name) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n & > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\",\"%3c\"),\n (\">\",\"%3e\"),\n (\"#\",\"%23\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css deleted file mode 100644 index 6533f319..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap Grid v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}} -/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css.map b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css.map deleted file mode 100644 index 1b393db3..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-grid.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Grid v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n @each $name, $width in $grid-breakpoints {\n @if ($container-max-width > $width or $breakpoint == $name) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n & > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css deleted file mode 100644 index 91b0fc4c..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css +++ /dev/null @@ -1,327 +0,0 @@ -/*! - * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) - */ -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { - display: block; -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #fff; -} - -[tabindex="-1"]:focus:not(:focus-visible) { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: .5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -.25em; -} - -sup { - top: -.5em; -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; -} - -a:hover { - color: #0056b3; - text-decoration: underline; -} - -a:not([href]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; - border-style: none; -} - -svg { - overflow: hidden; - vertical-align: middle; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -select { - word-wrap: normal; -} - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -button:not(:disabled), -[type="button"]:not(:disabled), -[type="reset"]:not(:disabled), -[type="submit"]:not(:disabled) { - cursor: pointer; -} - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - padding: 0; - border-style: none; -} - -input[type="radio"], -input[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - -webkit-appearance: listbox; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -summary { - display: list-item; - cursor: pointer; -} - -template { - display: none; -} - -[hidden] { - display: none !important; -} -/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css.map b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css.map deleted file mode 100644 index 701f6715..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-reboot.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\",\"%3c\"),\n (\">\",\"%3e\"),\n (\"#\",\"%23\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css deleted file mode 100644 index 5308df61..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) - */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} -/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css.map b/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css.map deleted file mode 100644 index b8551f7c..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap-reboot.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap.css b/ServiceGrid/frontEnd/bootstrap/css/bootstrap.css deleted file mode 100644 index f13449bf..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap.css +++ /dev/null @@ -1,10594 +0,0 @@ -/*! - * Bootstrap v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #007bff; - --secondary: #6c757d; - --success: #28a745; - --info: #17a2b8; - --warning: #ffc107; - --danger: #dc3545; - --light: #f8f9fa; - --dark: #343a40; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block; -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #fff; -} - -[tabindex="-1"]:focus:not(:focus-visible) { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: .5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -.25em; -} - -sup { - top: -.5em; -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; -} - -a:hover { - color: #0056b3; - text-decoration: underline; -} - -a:not([href]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; - border-style: none; -} - -svg { - overflow: hidden; - vertical-align: middle; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -select { - word-wrap: normal; -} - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -button:not(:disabled), -[type="button"]:not(:disabled), -[type="reset"]:not(:disabled), -[type="submit"]:not(:disabled) { - cursor: pointer; -} - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - padding: 0; - border-style: none; -} - -input[type="radio"], -input[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - -webkit-appearance: listbox; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -summary { - display: list-item; - cursor: pointer; -} - -template { - display: none; -} - -[hidden] { - display: none !important; -} - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - margin-bottom: 0.5rem; - font-weight: 500; - line-height: 1.2; -} - -h1, -.h1 { - font-size: 2.5rem; -} - -h2, -.h2 { - font-size: 2rem; -} - -h3, -.h3 { - font-size: 1.75rem; -} - -h4, -.h4 { - font-size: 1.5rem; -} - -h5, -.h5 { - font-size: 1.25rem; -} - -h6, -.h6 { - font-size: 1rem; -} - -.lead { - font-size: 1.25rem; - font-weight: 300; -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2; -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2; -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, 0.1); -} - -small, -.small { - font-size: 80%; - font-weight: 400; -} - -mark, -.mark { - padding: 0.2em; - background-color: #fcf8e3; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} - -.list-inline-item:not(:last-child) { - margin-right: 0.5rem; -} - -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem; -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d; -} - -.blockquote-footer::before { - content: "\2014\00A0"; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 0.25rem; - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 90%; - color: #6c757d; -} - -code { - font-size: 87.5%; - color: #e83e8c; - word-wrap: break-word; -} - -a>code { - color: inherit; -} - -kbd { - padding: 0.2rem 0.4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: 0.2rem; -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; -} - -pre { - display: block; - font-size: 87.5%; - color: #212529; -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid, -.container-sm, -.container-md, -.container-lg, -.container-xl { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container, - .container-sm { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container, - .container-sm, - .container-md { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container, - .container-sm, - .container-md, - .container-lg { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container, - .container-sm, - .container-md, - .container-lg, - .container-xl { - max-width: 1140px; - } -} - -.row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters>.col, -.no-gutters>[class*="col-"] { - padding-right: 0; - padding-left: 0; -} - -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12, -.col, -.col-auto, -.col-sm-1, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm, -.col-sm-auto, -.col-md-1, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md, -.col-md-auto, -.col-lg-1, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg, -.col-lg-auto, -.col-xl-1, -.col-xl-2, -.col-xl-3, -.col-xl-4, -.col-xl-5, -.col-xl-6, -.col-xl-7, -.col-xl-8, -.col-xl-9, -.col-xl-10, -.col-xl-11, -.col-xl-12, -.col-xl, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 15px; - padding-left: 15px; -} - -.col { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; -} - -.row-cols-1>* { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.row-cols-2>* { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.row-cols-3>* { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.row-cols-4>* { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.row-cols-5>* { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; -} - -.row-cols-6>* { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; -} - -.col-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; -} - -.col-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.col-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; -} - -.col-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; -} - -.col-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; -} - -.col-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; -} - -.col-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; -} - -.col-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - -ms-flex-order: -1; - order: -1; -} - -.order-last { - -ms-flex-order: 13; - order: 13; -} - -.order-0 { - -ms-flex-order: 0; - order: 0; -} - -.order-1 { - -ms-flex-order: 1; - order: 1; -} - -.order-2 { - -ms-flex-order: 2; - order: 2; -} - -.order-3 { - -ms-flex-order: 3; - order: 3; -} - -.order-4 { - -ms-flex-order: 4; - order: 4; -} - -.order-5 { - -ms-flex-order: 5; - order: 5; -} - -.order-6 { - -ms-flex-order: 6; - order: 6; -} - -.order-7 { - -ms-flex-order: 7; - order: 7; -} - -.order-8 { - -ms-flex-order: 8; - order: 8; -} - -.order-9 { - -ms-flex-order: 9; - order: 9; -} - -.order-10 { - -ms-flex-order: 10; - order: 10; -} - -.order-11 { - -ms-flex-order: 11; - order: 11; -} - -.order-12 { - -ms-flex-order: 12; - order: 12; -} - -.offset-1 { - margin-left: 8.333333%; -} - -.offset-2 { - margin-left: 16.666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.333333%; -} - -.offset-5 { - margin-left: 41.666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.333333%; -} - -.offset-8 { - margin-left: 66.666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.333333%; -} - -.offset-11 { - margin-left: 91.666667%; -} - -@media (min-width: 576px) { - .col-sm { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-sm-1>* { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-sm-2>* { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-sm-3>* { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-sm-4>* { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-sm-5>* { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-sm-6>* { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-sm-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-sm-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-sm-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-sm-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-sm-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-sm-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-sm-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-sm-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-sm-first { - -ms-flex-order: -1; - order: -1; - } - .order-sm-last { - -ms-flex-order: 13; - order: 13; - } - .order-sm-0 { - -ms-flex-order: 0; - order: 0; - } - .order-sm-1 { - -ms-flex-order: 1; - order: 1; - } - .order-sm-2 { - -ms-flex-order: 2; - order: 2; - } - .order-sm-3 { - -ms-flex-order: 3; - order: 3; - } - .order-sm-4 { - -ms-flex-order: 4; - order: 4; - } - .order-sm-5 { - -ms-flex-order: 5; - order: 5; - } - .order-sm-6 { - -ms-flex-order: 6; - order: 6; - } - .order-sm-7 { - -ms-flex-order: 7; - order: 7; - } - .order-sm-8 { - -ms-flex-order: 8; - order: 8; - } - .order-sm-9 { - -ms-flex-order: 9; - order: 9; - } - .order-sm-10 { - -ms-flex-order: 10; - order: 10; - } - .order-sm-11 { - -ms-flex-order: 11; - order: 11; - } - .order-sm-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.333333%; - } - .offset-sm-2 { - margin-left: 16.666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.333333%; - } - .offset-sm-5 { - margin-left: 41.666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.333333%; - } - .offset-sm-8 { - margin-left: 66.666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.333333%; - } - .offset-sm-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 768px) { - .col-md { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-md-1>* { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-md-2>* { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-md-3>* { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-md-4>* { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-md-5>* { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-md-6>* { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-md-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-md-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-md-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-md-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-md-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-md-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-md-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-md-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-md-first { - -ms-flex-order: -1; - order: -1; - } - .order-md-last { - -ms-flex-order: 13; - order: 13; - } - .order-md-0 { - -ms-flex-order: 0; - order: 0; - } - .order-md-1 { - -ms-flex-order: 1; - order: 1; - } - .order-md-2 { - -ms-flex-order: 2; - order: 2; - } - .order-md-3 { - -ms-flex-order: 3; - order: 3; - } - .order-md-4 { - -ms-flex-order: 4; - order: 4; - } - .order-md-5 { - -ms-flex-order: 5; - order: 5; - } - .order-md-6 { - -ms-flex-order: 6; - order: 6; - } - .order-md-7 { - -ms-flex-order: 7; - order: 7; - } - .order-md-8 { - -ms-flex-order: 8; - order: 8; - } - .order-md-9 { - -ms-flex-order: 9; - order: 9; - } - .order-md-10 { - -ms-flex-order: 10; - order: 10; - } - .order-md-11 { - -ms-flex-order: 11; - order: 11; - } - .order-md-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.333333%; - } - .offset-md-2 { - margin-left: 16.666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.333333%; - } - .offset-md-5 { - margin-left: 41.666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.333333%; - } - .offset-md-8 { - margin-left: 66.666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.333333%; - } - .offset-md-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-lg-1>* { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-lg-2>* { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-lg-3>* { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-lg-4>* { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-lg-5>* { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-lg-6>* { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-lg-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-lg-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-lg-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-lg-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-lg-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-lg-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-lg-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-lg-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-lg-first { - -ms-flex-order: -1; - order: -1; - } - .order-lg-last { - -ms-flex-order: 13; - order: 13; - } - .order-lg-0 { - -ms-flex-order: 0; - order: 0; - } - .order-lg-1 { - -ms-flex-order: 1; - order: 1; - } - .order-lg-2 { - -ms-flex-order: 2; - order: 2; - } - .order-lg-3 { - -ms-flex-order: 3; - order: 3; - } - .order-lg-4 { - -ms-flex-order: 4; - order: 4; - } - .order-lg-5 { - -ms-flex-order: 5; - order: 5; - } - .order-lg-6 { - -ms-flex-order: 6; - order: 6; - } - .order-lg-7 { - -ms-flex-order: 7; - order: 7; - } - .order-lg-8 { - -ms-flex-order: 8; - order: 8; - } - .order-lg-9 { - -ms-flex-order: 9; - order: 9; - } - .order-lg-10 { - -ms-flex-order: 10; - order: 10; - } - .order-lg-11 { - -ms-flex-order: 11; - order: 11; - } - .order-lg-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.333333%; - } - .offset-lg-2 { - margin-left: 16.666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.333333%; - } - .offset-lg-5 { - margin-left: 41.666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.333333%; - } - .offset-lg-8 { - margin-left: 66.666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.333333%; - } - .offset-lg-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-xl-1>* { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-xl-2>* { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-xl-3>* { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-xl-4>* { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-xl-5>* { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-xl-6>* { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-xl-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-xl-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-xl-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-xl-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-xl-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-xl-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-xl-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-xl-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-xl-first { - -ms-flex-order: -1; - order: -1; - } - .order-xl-last { - -ms-flex-order: 13; - order: 13; - } - .order-xl-0 { - -ms-flex-order: 0; - order: 0; - } - .order-xl-1 { - -ms-flex-order: 1; - order: 1; - } - .order-xl-2 { - -ms-flex-order: 2; - order: 2; - } - .order-xl-3 { - -ms-flex-order: 3; - order: 3; - } - .order-xl-4 { - -ms-flex-order: 4; - order: 4; - } - .order-xl-5 { - -ms-flex-order: 5; - order: 5; - } - .order-xl-6 { - -ms-flex-order: 6; - order: 6; - } - .order-xl-7 { - -ms-flex-order: 7; - order: 7; - } - .order-xl-8 { - -ms-flex-order: 8; - order: 8; - } - .order-xl-9 { - -ms-flex-order: 9; - order: 9; - } - .order-xl-10 { - -ms-flex-order: 10; - order: 10; - } - .order-xl-11 { - -ms-flex-order: 11; - order: 11; - } - .order-xl-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.333333%; - } - .offset-xl-2 { - margin-left: 16.666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.333333%; - } - .offset-xl-5 { - margin-left: 41.666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.333333%; - } - .offset-xl-8 { - margin-left: 66.666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.333333%; - } - .offset-xl-11 { - margin-left: 91.666667%; - } -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529; -} - -.table th, -.table td { - padding: 0.75rem; - vertical-align: top; - border-top: 1px solid #dee2e6; -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #dee2e6; -} - -.table tbody+tbody { - border-top: 2px solid #dee2e6; -} - -.table-sm th, -.table-sm td { - padding: 0.3rem; -} - -.table-bordered { - border: 1px solid #dee2e6; -} - -.table-bordered th, -.table-bordered td { - border: 1px solid #dee2e6; -} - -.table-bordered thead th, -.table-bordered thead td { - border-bottom-width: 2px; -} - -.table-borderless th, -.table-borderless td, -.table-borderless thead th, -.table-borderless tbody+tbody { - border: 0; -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.05); -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: rgba(0, 0, 0, 0.075); -} - -.table-primary, -.table-primary>th, -.table-primary>td { - background-color: #b8daff; -} - -.table-primary th, -.table-primary td, -.table-primary thead th, -.table-primary tbody+tbody { - border-color: #7abaff; -} - -.table-hover .table-primary:hover { - background-color: #9fcdff; -} - -.table-hover .table-primary:hover>td, -.table-hover .table-primary:hover>th { - background-color: #9fcdff; -} - -.table-secondary, -.table-secondary>th, -.table-secondary>td { - background-color: #d6d8db; -} - -.table-secondary th, -.table-secondary td, -.table-secondary thead th, -.table-secondary tbody+tbody { - border-color: #b3b7bb; -} - -.table-hover .table-secondary:hover { - background-color: #c8cbcf; -} - -.table-hover .table-secondary:hover>td, -.table-hover .table-secondary:hover>th { - background-color: #c8cbcf; -} - -.table-success, -.table-success>th, -.table-success>td { - background-color: #c3e6cb; -} - -.table-success th, -.table-success td, -.table-success thead th, -.table-success tbody+tbody { - border-color: #8fd19e; -} - -.table-hover .table-success:hover { - background-color: #b1dfbb; -} - -.table-hover .table-success:hover>td, -.table-hover .table-success:hover>th { - background-color: #b1dfbb; -} - -.table-info, -.table-info>th, -.table-info>td { - background-color: #bee5eb; -} - -.table-info th, -.table-info td, -.table-info thead th, -.table-info tbody+tbody { - border-color: #86cfda; -} - -.table-hover .table-info:hover { - background-color: #abdde5; -} - -.table-hover .table-info:hover>td, -.table-hover .table-info:hover>th { - background-color: #abdde5; -} - -.table-warning, -.table-warning>th, -.table-warning>td { - background-color: #ffeeba; -} - -.table-warning th, -.table-warning td, -.table-warning thead th, -.table-warning tbody+tbody { - border-color: #ffdf7e; -} - -.table-hover .table-warning:hover { - background-color: #ffe8a1; -} - -.table-hover .table-warning:hover>td, -.table-hover .table-warning:hover>th { - background-color: #ffe8a1; -} - -.table-danger, -.table-danger>th, -.table-danger>td { - background-color: #f5c6cb; -} - -.table-danger th, -.table-danger td, -.table-danger thead th, -.table-danger tbody+tbody { - border-color: #ed969e; -} - -.table-hover .table-danger:hover { - background-color: #f1b0b7; -} - -.table-hover .table-danger:hover>td, -.table-hover .table-danger:hover>th { - background-color: #f1b0b7; -} - -.table-light, -.table-light>th, -.table-light>td { - background-color: #fdfdfe; -} - -.table-light th, -.table-light td, -.table-light thead th, -.table-light tbody+tbody { - border-color: #fbfcfc; -} - -.table-hover .table-light:hover { - background-color: #ececf6; -} - -.table-hover .table-light:hover>td, -.table-hover .table-light:hover>th { - background-color: #ececf6; -} - -.table-dark, -.table-dark>th, -.table-dark>td { - background-color: #c6c8ca; -} - -.table-dark th, -.table-dark td, -.table-dark thead th, -.table-dark tbody+tbody { - border-color: #95999c; -} - -.table-hover .table-dark:hover { - background-color: #b9bbbe; -} - -.table-hover .table-dark:hover>td, -.table-hover .table-dark:hover>th { - background-color: #b9bbbe; -} - -.table-active, -.table-active>th, -.table-active>td { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover>td, -.table-hover .table-active:hover>th { - background-color: rgba(0, 0, 0, 0.075); -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55; -} - -.table .thead-light th { - color: #495057; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.table-dark { - color: #fff; - background-color: #343a40; -} - -.table-dark th, -.table-dark td, -.table-dark thead th { - border-color: #454d55; -} - -.table-dark.table-bordered { - border: 0; -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, 0.05); -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, 0.075); -} - -@media (max-width: 575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-sm>.table-bordered { - border: 0; - } -} - -@media (max-width: 767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-md>.table-bordered { - border: 0; - } -} - -@media (max-width: 991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-lg>.table-bordered { - border: 0; - } -} - -@media (max-width: 1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-xl>.table-bordered { - border: 0; - } -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} - -.table-responsive>.table-bordered { - border: 0; -} - -.form-control { - display: block; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - padding: 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} - -.form-control:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #495057; -} - -.form-control:focus { - color: #495057; - background-color: #fff; - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #e9ecef; - opacity: 1; -} - -select.form-control:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.form-control-file, -.form-control-range { - display: block; - width: 100%; -} - -.col-form-label { - padding-top: calc(0.375rem + 1px); - padding-bottom: calc(0.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + 1px); - padding-bottom: calc(0.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + 1px); - padding-bottom: calc(0.25rem + 1px); - font-size: 0.875rem; - line-height: 1.5; -} - -.form-control-plaintext { - display: block; - width: 100%; - padding: 0.375rem 0; - margin-bottom: 0; - font-size: 1rem; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} - -.form-control-plaintext.form-control-sm, -.form-control-plaintext.form-control-lg { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm { - height: calc(1.5em + 0.5rem + 2px); - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -select.form-control[size], -select.form-control[multiple] { - height: auto; -} - -textarea.form-control { - height: auto; -} - -.form-group { - margin-bottom: 1rem; -} - -.form-text { - display: block; - margin-top: 0.25rem; -} - -.form-row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px; -} - -.form-row>.col, -.form-row>[class*="col-"] { - padding-right: 5px; - padding-left: 5px; -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem; -} - -.form-check-input { - position: absolute; - margin-top: 0.3rem; - margin-left: -1.25rem; -} - -.form-check-input[disabled]~.form-check-label, -.form-check-input:disabled~.form-check-label { - color: #6c757d; -} - -.form-check-label { - margin-bottom: 0; -} - -.form-check-inline { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - padding-left: 0; - margin-right: 0.75rem; -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: 0.3125rem; - margin-left: 0; -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #28a745; -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: .1rem; - font-size: 0.875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(40, 167, 69, 0.9); - border-radius: 0.25rem; -} - -.was-validated :valid~.valid-feedback, -.was-validated :valid~.valid-tooltip, -.is-valid~.valid-feedback, -.is-valid~.valid-tooltip { - display: block; -} - -.was-validated .form-control:valid, -.form-control.is-valid { - border-color: #28a745; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .form-control:valid:focus, -.form-control.is-valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated textarea.form-control:valid, -textarea.form-control.is-valid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .custom-select:valid, -.custom-select.is-valid { - border-color: #28a745; - padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .custom-select:valid:focus, -.custom-select.is-valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .form-check-input:valid~.form-check-label, -.form-check-input.is-valid~.form-check-label { - color: #28a745; -} - -.was-validated .form-check-input:valid~.valid-feedback, -.was-validated .form-check-input:valid~.valid-tooltip, -.form-check-input.is-valid~.valid-feedback, -.form-check-input.is-valid~.valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid~.custom-control-label, -.custom-control-input.is-valid~.custom-control-label { - color: #28a745; -} - -.was-validated .custom-control-input:valid~.custom-control-label::before, -.custom-control-input.is-valid~.custom-control-label::before { - border-color: #28a745; -} - -.was-validated .custom-control-input:valid:checked~.custom-control-label::before, -.custom-control-input.is-valid:checked~.custom-control-label::before { - border-color: #34ce57; - background-color: #34ce57; -} - -.was-validated .custom-control-input:valid:focus~.custom-control-label::before, -.custom-control-input.is-valid:focus~.custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before, -.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before { - border-color: #28a745; -} - -.was-validated .custom-file-input:valid~.custom-file-label, -.custom-file-input.is-valid~.custom-file-label { - border-color: #28a745; -} - -.was-validated .custom-file-input:valid:focus~.custom-file-label, -.custom-file-input.is-valid:focus~.custom-file-label { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #dc3545; -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: .1rem; - font-size: 0.875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(220, 53, 69, 0.9); - border-radius: 0.25rem; -} - -.was-validated :invalid~.invalid-feedback, -.was-validated :invalid~.invalid-tooltip, -.is-invalid~.invalid-feedback, -.is-invalid~.invalid-tooltip { - display: block; -} - -.was-validated .form-control:invalid, -.form-control.is-invalid { - border-color: #dc3545; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .form-control:invalid:focus, -.form-control.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated textarea.form-control:invalid, -textarea.form-control.is-invalid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .custom-select:invalid, -.custom-select.is-invalid { - border-color: #dc3545; - padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .custom-select:invalid:focus, -.custom-select.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .form-check-input:invalid~.form-check-label, -.form-check-input.is-invalid~.form-check-label { - color: #dc3545; -} - -.was-validated .form-check-input:invalid~.invalid-feedback, -.was-validated .form-check-input:invalid~.invalid-tooltip, -.form-check-input.is-invalid~.invalid-feedback, -.form-check-input.is-invalid~.invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid~.custom-control-label, -.custom-control-input.is-invalid~.custom-control-label { - color: #dc3545; -} - -.was-validated .custom-control-input:invalid~.custom-control-label::before, -.custom-control-input.is-invalid~.custom-control-label::before { - border-color: #dc3545; -} - -.was-validated .custom-control-input:invalid:checked~.custom-control-label::before, -.custom-control-input.is-invalid:checked~.custom-control-label::before { - border-color: #e4606d; - background-color: #e4606d; -} - -.was-validated .custom-control-input:invalid:focus~.custom-control-label::before, -.custom-control-input.is-invalid:focus~.custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before, -.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before { - border-color: #dc3545; -} - -.was-validated .custom-file-input:invalid~.custom-file-label, -.custom-file-input.is-invalid~.custom-file-label { - border-color: #dc3545; -} - -.was-validated .custom-file-input:invalid:focus~.custom-file-label, -.custom-file-input.is-invalid:focus~.custom-file-label { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.form-inline { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -ms-flex-align: center; - align-items: center; -} - -.form-inline .form-check { - width: 100%; -} - -@media (min-width: 576px) { - .form-inline label { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - margin-bottom: 0; - } - .form-inline .form-group { - display: -ms-flexbox; - display: flex; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -ms-flex-align: center; - align-items: center; - margin-bottom: 0; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-plaintext { - display: inline-block; - } - .form-inline .input-group, - .form-inline .custom-select { - width: auto; - } - .form-inline .form-check { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - width: auto; - padding-left: 0; - } - .form-inline .form-check-input { - position: relative; - -ms-flex-negative: 0; - flex-shrink: 0; - margin-top: 0; - margin-right: 0.25rem; - margin-left: 0; - } - .form-inline .custom-control { - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - } - .form-inline .custom-control-label { - margin-bottom: 0; - } -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} - -.btn:hover { - color: #212529; - text-decoration: none; -} - -.btn:focus, -.btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.btn.disabled, -.btn:disabled { - opacity: 0.65; -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none; -} - -.btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:hover { - color: #fff; - background-color: #0069d9; - border-color: #0062cc; -} - -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #0069d9; - border-color: #0062cc; - box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); -} - -.btn-primary.disabled, -.btn-primary:disabled { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:not(:disabled):not(.disabled):active, -.btn-primary:not(:disabled):not(.disabled).active, -.show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #0062cc; - border-color: #005cbf; -} - -.btn-primary:not(:disabled):not(.disabled):active:focus, -.btn-primary:not(:disabled):not(.disabled).active:focus, -.show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); -} - -.btn-secondary { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:hover { - color: #fff; - background-color: #5a6268; - border-color: #545b62; -} - -.btn-secondary:focus, -.btn-secondary.focus { - color: #fff; - background-color: #5a6268; - border-color: #545b62; - box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); -} - -.btn-secondary.disabled, -.btn-secondary:disabled { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:not(:disabled):not(.disabled):active, -.btn-secondary:not(:disabled):not(.disabled).active, -.show>.btn-secondary.dropdown-toggle { - color: #fff; - background-color: #545b62; - border-color: #4e555b; -} - -.btn-secondary:not(:disabled):not(.disabled):active:focus, -.btn-secondary:not(:disabled):not(.disabled).active:focus, -.show>.btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); -} - -.btn-success { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:hover { - color: #fff; - background-color: #218838; - border-color: #1e7e34; -} - -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #218838; - border-color: #1e7e34; - box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); -} - -.btn-success.disabled, -.btn-success:disabled { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:not(:disabled):not(.disabled):active, -.btn-success:not(:disabled):not(.disabled).active, -.show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #1e7e34; - border-color: #1c7430; -} - -.btn-success:not(:disabled):not(.disabled):active:focus, -.btn-success:not(:disabled):not(.disabled).active:focus, -.show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); -} - -.btn-info { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:hover { - color: #fff; - background-color: #138496; - border-color: #117a8b; -} - -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #138496; - border-color: #117a8b; - box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); -} - -.btn-info.disabled, -.btn-info:disabled { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:not(:disabled):not(.disabled):active, -.btn-info:not(:disabled):not(.disabled).active, -.show>.btn-info.dropdown-toggle { - color: #fff; - background-color: #117a8b; - border-color: #10707f; -} - -.btn-info:not(:disabled):not(.disabled):active:focus, -.btn-info:not(:disabled):not(.disabled).active:focus, -.show>.btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); -} - -.btn-warning { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:hover { - color: #212529; - background-color: #e0a800; - border-color: #d39e00; -} - -.btn-warning:focus, -.btn-warning.focus { - color: #212529; - background-color: #e0a800; - border-color: #d39e00; - box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); -} - -.btn-warning.disabled, -.btn-warning:disabled { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:not(:disabled):not(.disabled):active, -.btn-warning:not(:disabled):not(.disabled).active, -.show>.btn-warning.dropdown-toggle { - color: #212529; - background-color: #d39e00; - border-color: #c69500; -} - -.btn-warning:not(:disabled):not(.disabled):active:focus, -.btn-warning:not(:disabled):not(.disabled).active:focus, -.show>.btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); -} - -.btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:hover { - color: #fff; - background-color: #c82333; - border-color: #bd2130; -} - -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c82333; - border-color: #bd2130; - box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); -} - -.btn-danger.disabled, -.btn-danger:disabled { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:not(:disabled):not(.disabled):active, -.btn-danger:not(:disabled):not(.disabled).active, -.show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #bd2130; - border-color: #b21f2d; -} - -.btn-danger:not(:disabled):not(.disabled):active:focus, -.btn-danger:not(:disabled):not(.disabled).active:focus, -.show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); -} - -.btn-light { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:hover { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; -} - -.btn-light:focus, -.btn-light.focus { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; - box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); -} - -.btn-light.disabled, -.btn-light:disabled { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:not(:disabled):not(.disabled):active, -.btn-light:not(:disabled):not(.disabled).active, -.show>.btn-light.dropdown-toggle { - color: #212529; - background-color: #dae0e5; - border-color: #d3d9df; -} - -.btn-light:not(:disabled):not(.disabled):active:focus, -.btn-light:not(:disabled):not(.disabled).active:focus, -.show>.btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); -} - -.btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:hover { - color: #fff; - background-color: #23272b; - border-color: #1d2124; -} - -.btn-dark:focus, -.btn-dark.focus { - color: #fff; - background-color: #23272b; - border-color: #1d2124; - box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); -} - -.btn-dark.disabled, -.btn-dark:disabled { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:not(:disabled):not(.disabled):active, -.btn-dark:not(:disabled):not(.disabled).active, -.show>.btn-dark.dropdown-toggle { - color: #fff; - background-color: #1d2124; - border-color: #171a1d; -} - -.btn-dark:not(:disabled):not(.disabled):active:focus, -.btn-dark:not(:disabled):not(.disabled).active:focus, -.show>.btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); -} - -.btn-outline-primary { - color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:hover { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); - border-color: #007bff; -} - -.btn-outline-primary:focus, -.btn-outline-primary.focus { - background-color: #007bff; - color: #fff; -} - -.btn-outline-primary2 { - color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary2:hover { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); - border-color: #007bff; -} - -.btn-outline-primary2:focus, -.btn-outline-primary.focus { - box-shadow: none; -} - -.btn-outline-primary.disabled, -.btn-outline-primary:disabled { - color: #007bff; - background-color: transparent; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active, -.btn-outline-primary:not(:disabled):not(.disabled).active, -.show>.btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active:focus, -.btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-secondary { - color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:focus, -.btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-secondary.disabled, -.btn-outline-secondary:disabled { - color: #6c757d; - background-color: transparent; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active, -.btn-outline-secondary:not(:disabled):not(.disabled).active, -.show>.btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, -.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-success { - color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:hover { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:focus, -.btn-outline-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-success.disabled, -.btn-outline-success:disabled { - color: #28a745; - background-color: transparent; -} - -.btn-outline-success:not(:disabled):not(.disabled):active, -.btn-outline-success:not(:disabled):not(.disabled).active, -.show>.btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:not(:disabled):not(.disabled):active:focus, -.btn-outline-success:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-info { - color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:hover { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:focus, -.btn-outline-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-info.disabled, -.btn-outline-info:disabled { - color: #17a2b8; - background-color: transparent; -} - -.btn-outline-info:not(:disabled):not(.disabled):active, -.btn-outline-info:not(:disabled):not(.disabled).active, -.show>.btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:not(:disabled):not(.disabled):active:focus, -.btn-outline-info:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-warning { - color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:focus, -.btn-outline-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-warning.disabled, -.btn-outline-warning:disabled { - color: #ffc107; - background-color: transparent; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active, -.btn-outline-warning:not(:disabled):not(.disabled).active, -.show>.btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active:focus, -.btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-danger { - color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:focus, -.btn-outline-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-danger.disabled, -.btn-outline-danger:disabled { - color: #dc3545; - background-color: transparent; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active, -.btn-outline-danger:not(:disabled):not(.disabled).active, -.show>.btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active:focus, -.btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-light { - color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:hover { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:focus, -.btn-outline-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-light.disabled, -.btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} - -.btn-outline-light:not(:disabled):not(.disabled):active, -.btn-outline-light:not(:disabled):not(.disabled).active, -.show>.btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:not(:disabled):not(.disabled):active:focus, -.btn-outline-light:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-dark { - color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:focus, -.btn-outline-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-dark.disabled, -.btn-outline-dark:disabled { - color: #343a40; - background-color: transparent; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active, -.btn-outline-dark:not(:disabled):not(.disabled).active, -.show>.btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active:focus, -.btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.show>.btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-link { - font-weight: 400; - color: #007bff; - text-decoration: none; -} - -.btn-link:hover { - color: #0056b3; - text-decoration: underline; -} - -.btn-link:focus, -.btn-link.focus { - text-decoration: underline; - box-shadow: none; -} - -.btn-link:disabled, -.btn-link.disabled { - color: #6c757d; - pointer-events: none; -} - -.btn-lg, -.btn-group-lg>.btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.btn-sm, -.btn-group-sm>.btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block+.btn-block { - margin-top: 0.5rem; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - transition: opacity 0.15s linear; -} - -@media (prefers-reduced-motion: reduce) { - .fade { - transition: none; - } -} - -.fade:not(.show) { - opacity: 0; -} - -.collapse:not(.show) { - display: none; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} - -@media (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} - -.dropup, -.dropright, -.dropdown, -.dropleft { - position: relative; -} - -.dropdown-toggle { - white-space: nowrap; -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} - -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0.125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; -} - -.dropdown-menu-left { - right: auto; - left: 0; -} - -.dropdown-menu-right { - right: 0; - left: auto; -} - -@media (min-width: 576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0; - } - .dropdown-menu-sm-right { - right: 0; - left: auto; - } -} - -@media (min-width: 768px) { - .dropdown-menu-md-left { - right: auto; - left: 0; - } - .dropdown-menu-md-right { - right: 0; - left: auto; - } -} - -@media (min-width: 992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0; - } - .dropdown-menu-lg-right { - right: 0; - left: auto; - } -} - -@media (min-width: 1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0; - } - .dropdown-menu-xl-right { - right: 0; - left: auto; - } -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: 0.125rem; -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: 0.125rem; -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0; - border-bottom: 0.3em solid transparent; - border-left: 0.3em solid; -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-toggle::after { - vertical-align: 0; -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: 0.125rem; -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} - -.dropleft .dropdown-toggle::after { - display: none; -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-menu[x-placement^="top"], -.dropdown-menu[x-placement^="right"], -.dropdown-menu[x-placement^="bottom"], -.dropdown-menu[x-placement^="left"] { - right: auto; - bottom: auto; -} - -.dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef; -} - -.dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0; -} - -.dropdown-item:hover, -.dropdown-item:focus { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa; -} - -.dropdown-item.active, -.dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff; -} - -.dropdown-item.disabled, -.dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: 0.5rem 1.5rem; - margin-bottom: 0; - font-size: 0.875rem; - color: #6c757d; - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: 0.25rem 1.5rem; - color: #212529; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -ms-inline-flexbox; - display: inline-flex; - vertical-align: middle; -} - -.btn-group>.btn, -.btn-group-vertical>.btn { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; -} - -.btn-group>.btn:hover, -.btn-group-vertical>.btn:hover { - z-index: 1; -} - -.btn-group>.btn:focus, -.btn-group>.btn:active, -.btn-group>.btn.active, -.btn-group-vertical>.btn:focus, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn.active { - z-index: 1; -} - -.btn-toolbar { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.btn-toolbar .input-group { - width: auto; -} - -.btn-group>.btn:not(:first-child), -.btn-group>.btn-group:not(:first-child) { - margin-left: -1px; -} - -.btn-group>.btn:not(:last-child):not(.dropdown-toggle), -.btn-group>.btn-group:not(:last-child)>.btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group>.btn:not(:first-child), -.btn-group>.btn-group:not(:first-child)>.btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.dropdown-toggle-split { - padding-right: 0.5625rem; - padding-left: 0.5625rem; -} - -.dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0; -} - -.btn-sm+.dropdown-toggle-split, -.btn-group-sm>.btn+.dropdown-toggle-split { - padding-right: 0.375rem; - padding-left: 0.375rem; -} - -.btn-lg+.dropdown-toggle-split, -.btn-group-lg>.btn+.dropdown-toggle-split { - padding-right: 0.75rem; - padding-left: 0.75rem; -} - -.btn-group-vertical { - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: center; - justify-content: center; -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group { - width: 100%; -} - -.btn-group-vertical>.btn:not(:first-child), -.btn-group-vertical>.btn-group:not(:first-child) { - margin-top: -1px; -} - -.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle), -.btn-group-vertical>.btn-group:not(:last-child)>.btn { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical>.btn:not(:first-child), -.btn-group-vertical>.btn-group:not(:first-child)>.btn { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.btn-group-toggle>.btn, -.btn-group-toggle>.btn-group>.btn { - margin-bottom: 0; -} - -.btn-group-toggle>.btn input[type="radio"], -.btn-group-toggle>.btn input[type="checkbox"], -.btn-group-toggle>.btn-group>.btn input[type="radio"], -.btn-group-toggle>.btn-group>.btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} - -.input-group { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100%; -} - -.input-group>.form-control, -.input-group>.form-control-plaintext, -.input-group>.custom-select, -.input-group>.custom-file { - position: relative; - -ms-flex: 1 1 0%; - flex: 1 1 0%; - min-width: 0; - margin-bottom: 0; -} - -.input-group>.form-control+.form-control, -.input-group>.form-control+.custom-select, -.input-group>.form-control+.custom-file, -.input-group>.form-control-plaintext+.form-control, -.input-group>.form-control-plaintext+.custom-select, -.input-group>.form-control-plaintext+.custom-file, -.input-group>.custom-select+.form-control, -.input-group>.custom-select+.custom-select, -.input-group>.custom-select+.custom-file, -.input-group>.custom-file+.form-control, -.input-group>.custom-file+.custom-select, -.input-group>.custom-file+.custom-file { - margin-left: -1px; -} - -.input-group>.form-control:focus, -.input-group>.custom-select:focus, -.input-group>.custom-file .custom-file-input:focus~.custom-file-label { - z-index: 3; -} - -.input-group>.custom-file .custom-file-input:focus { - z-index: 4; -} - -.input-group>.form-control:not(:last-child), -.input-group>.custom-select:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group>.form-control:not(:first-child), -.input-group>.custom-select:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group>.custom-file { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; -} - -.input-group>.custom-file:not(:last-child) .custom-file-label, -.input-group>.custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group>.custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group-prepend, -.input-group-append { - display: -ms-flexbox; - display: flex; -} - -.input-group-prepend .btn, -.input-group-append .btn { - position: relative; - z-index: 2; -} - -.input-group-prepend .btn:focus, -.input-group-append .btn:focus { - z-index: 3; -} - -.input-group-prepend .btn+.btn, -.input-group-prepend .btn+.input-group-text, -.input-group-prepend .input-group-text+.input-group-text, -.input-group-prepend .input-group-text+.btn, -.input-group-append .btn+.btn, -.input-group-append .btn+.input-group-text, -.input-group-append .input-group-text+.input-group-text, -.input-group-append .input-group-text+.btn { - margin-left: -1px; -} - -.input-group-prepend { - margin-right: -1px; -} - -.input-group-append { - margin-left: -1px; -} - -.input-group-text { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - padding: 0.375rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.input-group-text input[type="radio"], -.input-group-text input[type="checkbox"] { - margin-top: 0; -} - -.input-group-lg>.form-control:not(textarea), -.input-group-lg>.custom-select { - height: calc(1.5em + 1rem + 2px); -} - -.input-group-lg>.form-control, -.input-group-lg>.custom-select, -.input-group-lg>.input-group-prepend>.input-group-text, -.input-group-lg>.input-group-append>.input-group-text, -.input-group-lg>.input-group-prepend>.btn, -.input-group-lg>.input-group-append>.btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.input-group-sm>.form-control:not(textarea), -.input-group-sm>.custom-select { - height: calc(1.5em + 0.5rem + 2px); -} - -.input-group-sm>.form-control, -.input-group-sm>.custom-select, -.input-group-sm>.input-group-prepend>.input-group-text, -.input-group-sm>.input-group-append>.input-group-text, -.input-group-sm>.input-group-prepend>.btn, -.input-group-sm>.input-group-append>.btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.input-group-lg>.custom-select, -.input-group-sm>.custom-select { - padding-right: 1.75rem; -} - -.input-group>.input-group-prepend>.btn, -.input-group>.input-group-prepend>.input-group-text, -.input-group>.input-group-append:not(:last-child)>.btn, -.input-group>.input-group-append:not(:last-child)>.input-group-text, -.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle), -.input-group>.input-group-append:last-child>.input-group-text:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group>.input-group-append>.btn, -.input-group>.input-group-append>.input-group-text, -.input-group>.input-group-prepend:not(:first-child)>.btn, -.input-group>.input-group-prepend:not(:first-child)>.input-group-text, -.input-group>.input-group-prepend:first-child>.btn:not(:first-child), -.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.custom-control { - position: relative; - display: block; - min-height: 1.5rem; - padding-left: 1.5rem; -} - -.custom-control-inline { - display: -ms-inline-flexbox; - display: inline-flex; - margin-right: 1rem; -} - -.custom-control-input { - position: absolute; - left: 0; - z-index: -1; - width: 1rem; - height: 1.25rem; - opacity: 0; -} - -.custom-control-input:checked~.custom-control-label::before { - color: #fff; - border-color: #007bff; - background-color: #007bff; -} - -.custom-control-input:focus~.custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-control-input:focus:not(:checked)~.custom-control-label::before { - border-color: #80bdff; -} - -.custom-control-input:not(:disabled):active~.custom-control-label::before { - color: #fff; - background-color: #b3d7ff; - border-color: #b3d7ff; -} - -.custom-control-input[disabled]~.custom-control-label, -.custom-control-input:disabled~.custom-control-label { - color: #6c757d; -} - -.custom-control-input[disabled]~.custom-control-label::before, -.custom-control-input:disabled~.custom-control-label::before { - background-color: #e9ecef; -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top; -} - -.custom-control-label::before { - position: absolute; - top: 0.25rem; - left: -1.5rem; - display: block; - width: 1rem; - height: 1rem; - pointer-events: none; - content: ""; - background-color: #fff; - border: #adb5bd solid 1px; -} - -.custom-control-label::after { - position: absolute; - top: 0.25rem; - left: -1.5rem; - display: block; - width: 1rem; - height: 1rem; - content: ""; - background: no-repeat 50% / 50% 50%; -} - -.custom-checkbox .custom-control-label::before { - border-radius: 0.25rem; -} - -.custom-checkbox .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before { - border-color: #007bff; - background-color: #007bff; -} - -.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); -} - -.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-radio .custom-control-label::before { - border-radius: 50%; -} - -.custom-radio .custom-control-input:checked~.custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); -} - -.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-switch { - padding-left: 2.25rem; -} - -.custom-switch .custom-control-label::before { - left: -2.25rem; - width: 1.75rem; - pointer-events: all; - border-radius: 0.5rem; -} - -.custom-switch .custom-control-label::after { - top: calc(0.25rem + 2px); - left: calc(-2.25rem + 2px); - width: calc(1rem - 4px); - height: calc(1rem - 4px); - background-color: #adb5bd; - border-radius: 0.5rem; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; - transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .custom-switch .custom-control-label::after { - transition: none; - } -} - -.custom-switch .custom-control-input:checked~.custom-control-label::after { - background-color: #fff; - -webkit-transform: translateX(0.75rem); - transform: translateX(0.75rem); -} - -.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - padding: 0.375rem 1.75rem 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-select:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.custom-select[multiple], -.custom-select[size]:not([size="1"]) { - height: auto; - padding-right: 0.75rem; - background-image: none; -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef; -} - -.custom-select::-ms-expand { - display: none; -} - -.custom-select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #495057; -} - -.custom-select-sm { - height: calc(1.5em + 0.5rem + 2px); - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.5rem; - font-size: 0.875rem; -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - font-size: 1.25rem; -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - margin-bottom: 0; -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - margin: 0; - opacity: 0; -} - -.custom-file-input:focus~.custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-file-input[disabled]~.custom-file-label, -.custom-file-input:disabled~.custom-file-label { - background-color: #e9ecef; -} - -.custom-file-input:lang(en)~.custom-file-label::after { - content: "Browse"; -} - -.custom-file-input~.custom-file-label[data-browse]::after { - content: attr(data-browse); -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.5em + 0.75rem + 2px); - padding: 0.375rem 0.75rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.5em + 0.75rem); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - content: "Browse"; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 0.25rem 0.25rem 0; -} - -.custom-range { - width: 100%; - height: 1.4rem; - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-range:focus { - outline: none; -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-moz-focus-outer { - border: 0; -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - -webkit-appearance: none; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none; - } -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - -moz-appearance: none; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-moz-range-thumb { - -moz-transition: none; - transition: none; - } -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: 0.2rem; - margin-left: 0.2rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-ms-thumb { - -ms-transition: none; - transition: none; - } -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-ms-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: 0.5rem; -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd; -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default; -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd; -} - -.custom-range:disabled::-moz-range-track { - cursor: default; -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd; -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - transition: none; - } -} - -.nav { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: block; - padding: 0.5rem 1rem; -} - -.nav-link:hover, -.nav-link:focus { - text-decoration: none; -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default; -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6; -} - -.nav-tabs .nav-item { - margin-bottom: -1px; -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.nav-tabs .nav-link:hover, -.nav-tabs .nav-link:focus { - border-color: #e9ecef #e9ecef #dee2e6; -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav-pills .nav-link { - border-radius: 0.25rem; -} - -.nav-pills .nav-link.active, -.nav-pills .show>.nav-link { - color: #fff; - background-color: #007bff; -} - -.nav-fill .nav-item { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - text-align: center; -} - -.nav-justified .nav-item { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - text-align: center; -} - -.tab-content>.tab-pane { - display: none; -} - -.tab-content>.active { - display: block; -} - -.navbar { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 0.5rem 1rem; -} - -.navbar .container, -.navbar .container-fluid, -.navbar .container-sm, -.navbar .container-md, -.navbar .container-lg, -.navbar .container-xl { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.navbar-brand { - display: inline-block; - padding-top: 0.3125rem; - padding-bottom: 0.3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap; -} - -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} - -.navbar-nav { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0; -} - -.navbar-nav .dropdown-menu { - position: static; - float: none; -} - -.navbar-text { - display: inline-block; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.navbar-collapse { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-align: center; - align-items: center; -} - -.navbar-toggler { - padding: 0.25rem 0.75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.navbar-toggler:hover, -.navbar-toggler:focus { - text-decoration: none; -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: ""; - background: no-repeat center center; - background-size: 100% 100%; -} - -@media (max-width: 575.98px) { - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid, - .navbar-expand-sm>.container-sm, - .navbar-expand-sm>.container-md, - .navbar-expand-sm>.container-lg, - .navbar-expand-sm>.container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 576px) { - .navbar-expand-sm { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-sm .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-sm>.container, - .navbar-expand-sm>.container-fluid, - .navbar-expand-sm>.container-sm, - .navbar-expand-sm>.container-md, - .navbar-expand-sm>.container-lg, - .navbar-expand-sm>.container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-sm .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-sm .navbar-toggler { - display: none; - } -} - -@media (max-width: 767.98px) { - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid, - .navbar-expand-md>.container-sm, - .navbar-expand-md>.container-md, - .navbar-expand-md>.container-lg, - .navbar-expand-md>.container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 768px) { - .navbar-expand-md { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-md .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-md>.container, - .navbar-expand-md>.container-fluid, - .navbar-expand-md>.container-sm, - .navbar-expand-md>.container-md, - .navbar-expand-md>.container-lg, - .navbar-expand-md>.container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-md .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-md .navbar-toggler { - display: none; - } -} - -@media (max-width: 991.98px) { - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid, - .navbar-expand-lg>.container-sm, - .navbar-expand-lg>.container-md, - .navbar-expand-lg>.container-lg, - .navbar-expand-lg>.container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 992px) { - .navbar-expand-lg { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-lg .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-lg>.container, - .navbar-expand-lg>.container-fluid, - .navbar-expand-lg>.container-sm, - .navbar-expand-lg>.container-md, - .navbar-expand-lg>.container-lg, - .navbar-expand-lg>.container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-lg .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-lg .navbar-toggler { - display: none; - } -} - -@media (max-width: 1199.98px) { - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid, - .navbar-expand-xl>.container-sm, - .navbar-expand-xl>.container-md, - .navbar-expand-xl>.container-lg, - .navbar-expand-xl>.container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 1200px) { - .navbar-expand-xl { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-xl .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-xl>.container, - .navbar-expand-xl>.container-fluid, - .navbar-expand-xl>.container-sm, - .navbar-expand-xl>.container-md, - .navbar-expand-xl>.container-lg, - .navbar-expand-xl>.container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-xl .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-xl .navbar-toggler { - display: none; - } -} - -.navbar-expand { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid, -.navbar-expand>.container-sm, -.navbar-expand>.container-md, -.navbar-expand>.container-lg, -.navbar-expand>.container-xl { - padding-right: 0; - padding-left: 0; -} - -.navbar-expand .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; -} - -.navbar-expand>.container, -.navbar-expand>.container-fluid, -.navbar-expand>.container-sm, -.navbar-expand>.container-md, -.navbar-expand>.container-lg, -.navbar-expand>.container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; -} - -.navbar-expand .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; -} - -.navbar-expand .navbar-toggler { - display: none; -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-brand:hover, -.navbar-light .navbar-brand:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-nav .nav-link:hover, -.navbar-light .navbar-nav .nav-link:focus { - color: rgba(0, 0, 0, 0.7); -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, 0.3); -} - -.navbar-light .navbar-nav .show>.nav-link, -.navbar-light .navbar-nav .active>.nav-link, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .nav-link.active { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, 0.5); - border-color: rgba(0, 0, 0, 0.1); -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-text a:hover, -.navbar-light .navbar-text a:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-dark .navbar-brand { - color: #fff; -} - -.navbar-dark .navbar-brand:hover, -.navbar-dark .navbar-brand:focus { - color: #fff; -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-nav .nav-link:hover, -.navbar-dark .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.75); -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, 0.25); -} - -.navbar-dark .navbar-nav .show>.nav-link, -.navbar-dark .navbar-nav .active>.nav-link, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .nav-link.active { - color: #fff; -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.5); - border-color: rgba(255, 255, 255, 0.1); -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-text a { - color: #fff; -} - -.navbar-dark .navbar-text a:hover, -.navbar-dark .navbar-text a:focus { - color: #fff; -} - -.card { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25rem; -} - -.card>hr { - margin-right: 0; - margin-left: 0; -} - -.card>.list-group:first-child .list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.card>.list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.card-body { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - min-height: 1px; - padding: 1.25rem; -} - -.card-title { - margin-bottom: 0.75rem; -} - -.card-subtitle { - margin-top: -0.375rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} - -.card-link+.card-link { - margin-left: 1.25rem; -} - -.card-header { - padding: 0.75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-header:first-child { - border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; -} - -.card-header+.list-group .list-group-item:first-child { - border-top: 0; -} - -.card-footer { - padding: 0.75rem 1.25rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); -} - -.card-header-tabs { - margin-right: -0.625rem; - margin-bottom: -0.75rem; - margin-left: -0.625rem; - border-bottom: 0; -} - -.card-header-pills { - margin-right: -0.625rem; - margin-left: -0.625rem; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem; -} - -.card-img, -.card-img-top, -.card-img-bottom { - -ms-flex-negative: 0; - flex-shrink: 0; - width: 100%; -} - -.card-img, -.card-img-top { - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.card-img, -.card-img-bottom { - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} - -.card-deck .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-deck { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px; - } - .card-deck .card { - -ms-flex: 1 0 0%; - flex: 1 0 0%; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px; - } -} - -.card-group>.card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-group { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - } - .card-group>.card { - -ms-flex: 1 0 0%; - flex: 1 0 0%; - margin-bottom: 0; - } - .card-group>.card+.card { - margin-left: 0; - border-left: 0; - } - .card-group>.card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - .card-group>.card:not(:last-child) .card-img-top, - .card-group>.card:not(:last-child) .card-header { - border-top-right-radius: 0; - } - .card-group>.card:not(:last-child) .card-img-bottom, - .card-group>.card:not(:last-child) .card-footer { - border-bottom-right-radius: 0; - } - .card-group>.card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - .card-group>.card:not(:first-child) .card-img-top, - .card-group>.card:not(:first-child) .card-header { - border-top-left-radius: 0; - } - .card-group>.card:not(:first-child) .card-img-bottom, - .card-group>.card:not(:first-child) .card-footer { - border-bottom-left-radius: 0; - } -} - -.card-columns .card { - margin-bottom: 0.75rem; -} - -@media (min-width: 576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1; - } - .card-columns .card { - display: inline-block; - width: 100%; - } -} - -.accordion>.card { - overflow: hidden; -} - -.accordion>.card:not(:last-of-type) { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.accordion>.card:not(:first-of-type) { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.accordion>.card>.card-header { - border-radius: 0; - margin-bottom: -1px; -} - -.breadcrumb { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding: 0.75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.breadcrumb-item+.breadcrumb-item { - padding-left: 0.5rem; -} - -.breadcrumb-item+.breadcrumb-item::before { - display: inline-block; - padding-right: 0.5rem; - color: #6c757d; - content: "/"; -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: underline; -} - -.breadcrumb-item+.breadcrumb-item:hover::before { - text-decoration: none; -} - -.breadcrumb-item.active { - color: #6c757d; -} - -.pagination { - display: -ms-flexbox; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 0.25rem; -} - -.page-link { - position: relative; - display: block; - padding: 0.5rem 0.75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6; -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.page-link:focus { - z-index: 3; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.page-item:last-child .page-link { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.page-item.active .page-link { - z-index: 3; - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6; -} - -.pagination-lg .page-link { - padding: 0.75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5; -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 0.3rem; - border-bottom-left-radius: 0.3rem; -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 0.3rem; - border-bottom-right-radius: 0.3rem; -} - -.pagination-sm .page-link { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: 0.2rem; - border-bottom-left-radius: 0.2rem; -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: 0.2rem; - border-bottom-right-radius: 0.2rem; -} - -.badge { - display: inline-block; - padding: 0.25em 0.4em; - font-size: 75%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .badge { - transition: none; - } -} - -a.badge:hover, -a.badge:focus { - text-decoration: none; -} - -.badge:empty { - display: none; -} - -.btn .badge { - position: relative; - top: -1px; -} - -.badge-pill { - padding-right: 0.6em; - padding-left: 0.6em; - border-radius: 10rem; -} - -.badge-primary { - color: #fff; - background-color: #007bff; -} - -a.badge-primary:hover, -a.badge-primary:focus { - color: #fff; - background-color: #0062cc; -} - -a.badge-primary:focus, -a.badge-primary.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.badge-secondary { - color: #fff; - background-color: #6c757d; -} - -a.badge-secondary:hover, -a.badge-secondary:focus { - color: #fff; - background-color: #545b62; -} - -a.badge-secondary:focus, -a.badge-secondary.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.badge-success { - color: #fff; - background-color: #28a745; -} - -a.badge-success:hover, -a.badge-success:focus { - color: #fff; - background-color: #1e7e34; -} - -a.badge-success:focus, -a.badge-success.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.badge-info { - color: #fff; - background-color: #17a2b8; -} - -a.badge-info:hover, -a.badge-info:focus { - color: #fff; - background-color: #117a8b; -} - -a.badge-info:focus, -a.badge-info.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.badge-warning { - color: #212529; - background-color: #ffc107; -} - -a.badge-warning:hover, -a.badge-warning:focus { - color: #212529; - background-color: #d39e00; -} - -a.badge-warning:focus, -a.badge-warning.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.badge-danger { - color: #fff; - background-color: #dc3545; -} - -a.badge-danger:hover, -a.badge-danger:focus { - color: #fff; - background-color: #bd2130; -} - -a.badge-danger:focus, -a.badge-danger.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.badge-light { - color: #212529; - background-color: #f8f9fa; -} - -a.badge-light:hover, -a.badge-light:focus { - color: #212529; - background-color: #dae0e5; -} - -a.badge-light:focus, -a.badge-light.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.badge-dark { - color: #fff; - background-color: #343a40; -} - -a.badge-dark:hover, -a.badge-dark:focus { - color: #fff; - background-color: #1d2124; -} - -a.badge-dark:focus, -a.badge-dark.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 0.3rem; -} - -@media (min-width: 576px) { - .jumbotron { - padding: 4rem 2rem; - } -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} - -.alert { - position: relative; - padding: 0.75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 4rem; -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; -} - -.alert-primary { - color: #004085; - background-color: #cce5ff; - border-color: #b8daff; -} - -.alert-primary hr { - border-top-color: #9fcdff; -} - -.alert-primary .alert-link { - color: #002752; -} - -.alert-secondary { - color: #383d41; - background-color: #e2e3e5; - border-color: #d6d8db; -} - -.alert-secondary hr { - border-top-color: #c8cbcf; -} - -.alert-secondary .alert-link { - color: #202326; -} - -.alert-success { - color: #155724; - background-color: #d4edda; - border-color: #c3e6cb; -} - -.alert-success hr { - border-top-color: #b1dfbb; -} - -.alert-success .alert-link { - color: #0b2e13; -} - -.alert-info { - color: #0c5460; - background-color: #d1ecf1; - border-color: #bee5eb; -} - -.alert-info hr { - border-top-color: #abdde5; -} - -.alert-info .alert-link { - color: #062c33; -} - -.alert-warning { - color: #856404; - background-color: #fff3cd; - border-color: #ffeeba; -} - -.alert-warning hr { - border-top-color: #ffe8a1; -} - -.alert-warning .alert-link { - color: #533f03; -} - -.alert-danger { - color: #721c24; - background-color: #f8d7da; - border-color: #f5c6cb; -} - -.alert-danger hr { - border-top-color: #f1b0b7; -} - -.alert-danger .alert-link { - color: #491217; -} - -.alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} - -.alert-light hr { - border-top-color: #ececf6; -} - -.alert-light .alert-link { - color: #686868; -} - -.alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} - -.alert-dark hr { - border-top-color: #b9bbbe; -} - -.alert-dark .alert-link { - color: #040505; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -.progress { - display: -ms-flexbox; - display: flex; - height: 1rem; - overflow: hidden; - font-size: 0.75rem; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.progress-bar { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-pack: center; - justify-content: center; - overflow: hidden; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - transition: width 0.6s ease; -} - -@media (prefers-reduced-motion: reduce) { - .progress-bar { - transition: none; - } -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite; -} - -@media (prefers-reduced-motion: reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none; - } -} - -.media { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; -} - -.media-body { - -ms-flex: 1; - flex: 1; -} - -.list-group { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} - -.list-group-item-action:hover, -.list-group-item-action:focus { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef; -} - -.list-group-item { - position: relative; - display: block; - padding: 0.75rem 1.25rem; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); -} - -.list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.list-group-item:last-child { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.list-group-item.disabled, -.list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff; -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.list-group-item+.list-group-item { - border-top-width: 0; -} - -.list-group-item+.list-group-item.active { - margin-top: -1px; - border-top-width: 1px; -} - -.list-group-horizontal { - -ms-flex-direction: row; - flex-direction: row; -} - -.list-group-horizontal .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; -} - -.list-group-horizontal .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; -} - -.list-group-horizontal .list-group-item.active { - margin-top: 0; -} - -.list-group-horizontal .list-group-item+.list-group-item { - border-top-width: 1px; - border-left-width: 0; -} - -.list-group-horizontal .list-group-item+.list-group-item.active { - margin-left: -1px; - border-left-width: 1px; -} - -@media (min-width: 576px) { - .list-group-horizontal-sm { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-sm .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-sm .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-sm .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-sm .list-group-item+.list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-sm .list-group-item+.list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -@media (min-width: 768px) { - .list-group-horizontal-md { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-md .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-md .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-md .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-md .list-group-item+.list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-md .list-group-item+.list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -@media (min-width: 992px) { - .list-group-horizontal-lg { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-lg .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-lg .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-lg .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-lg .list-group-item+.list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-lg .list-group-item+.list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -@media (min-width: 1200px) { - .list-group-horizontal-xl { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-xl .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-xl .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-xl .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xl .list-group-item+.list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-xl .list-group-item+.list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -.list-group-flush .list-group-item { - border-right-width: 0; - border-left-width: 0; - border-radius: 0; -} - -.list-group-flush .list-group-item:first-child { - border-top-width: 0; -} - -.list-group-flush:last-child .list-group-item:last-child { - border-bottom-width: 0; -} - -.list-group-item-primary { - color: #004085; - background-color: #b8daff; -} - -.list-group-item-primary.list-group-item-action:hover, -.list-group-item-primary.list-group-item-action:focus { - color: #004085; - background-color: #9fcdff; -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #004085; - border-color: #004085; -} - -.list-group-item-secondary { - color: #383d41; - background-color: #d6d8db; -} - -.list-group-item-secondary.list-group-item-action:hover, -.list-group-item-secondary.list-group-item-action:focus { - color: #383d41; - background-color: #c8cbcf; -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #383d41; - border-color: #383d41; -} - -.list-group-item-success { - color: #155724; - background-color: #c3e6cb; -} - -.list-group-item-success.list-group-item-action:hover, -.list-group-item-success.list-group-item-action:focus { - color: #155724; - background-color: #b1dfbb; -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #155724; - border-color: #155724; -} - -.list-group-item-info { - color: #0c5460; - background-color: #bee5eb; -} - -.list-group-item-info.list-group-item-action:hover, -.list-group-item-info.list-group-item-action:focus { - color: #0c5460; - background-color: #abdde5; -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #0c5460; - border-color: #0c5460; -} - -.list-group-item-warning { - color: #856404; - background-color: #ffeeba; -} - -.list-group-item-warning.list-group-item-action:hover, -.list-group-item-warning.list-group-item-action:focus { - color: #856404; - background-color: #ffe8a1; -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #856404; - border-color: #856404; -} - -.list-group-item-danger { - color: #721c24; - background-color: #f5c6cb; -} - -.list-group-item-danger.list-group-item-action:hover, -.list-group-item-danger.list-group-item-action:focus { - color: #721c24; - background-color: #f1b0b7; -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #721c24; - border-color: #721c24; -} - -.list-group-item-light { - color: #818182; - background-color: #fdfdfe; -} - -.list-group-item-light.list-group-item-action:hover, -.list-group-item-light.list-group-item-action:focus { - color: #818182; - background-color: #ececf6; -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #818182; - border-color: #818182; -} - -.list-group-item-dark { - color: #1b1e21; - background-color: #c6c8ca; -} - -.list-group-item-dark.list-group-item-action:hover, -.list-group-item-dark.list-group-item-action:focus { - color: #1b1e21; - background-color: #b9bbbe; -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #1b1e21; - border-color: #1b1e21; -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5; -} - -.close:hover { - color: #000; - text-decoration: none; -} - -.close:not(:disabled):not(.disabled):hover, -.close:not(:disabled):not(.disabled):focus { - opacity: .75; -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -a.close.disabled { - pointer-events: none; -} - -.toast { - max-width: 350px; - overflow: hidden; - font-size: 0.875rem; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.1); - box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - opacity: 0; - border-radius: 0.25rem; -} - -.toast:not(:last-child) { - margin-bottom: 0.75rem; -} - -.toast.showing { - opacity: 1; -} - -.toast.show { - display: block; - opacity: 1; -} - -.toast.hide { - display: none; -} - -.toast-header { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - padding: 0.25rem 0.75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); -} - -.toast-body { - padding: 0.75rem; -} - -.modal-open { - overflow: hidden; -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0; -} - -.modal-dialog { - position: relative; - width: auto; - margin: 0.5rem; - pointer-events: none; -} - -.modal.fade .modal-dialog { - transition: -webkit-transform 0.3s ease-out; - transition: transform 0.3s ease-out; - transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; - -webkit-transform: translate(0, -50px); - transform: translate(0, -50px); -} - -@media (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} - -.modal.show .modal-dialog { - -webkit-transform: none; - transform: none; -} - -.modal.modal-static .modal-dialog { - -webkit-transform: scale(1.02); - transform: scale(1.02); -} - -.modal-dialog-scrollable { - display: -ms-flexbox; - display: flex; - max-height: calc(100% - 1rem); -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden; -} - -.modal-dialog-scrollable .modal-header, -.modal-dialog-scrollable .modal-footer { - -ms-flex-negative: 0; - flex-shrink: 0; -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto; -} - -.modal-dialog-centered { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - min-height: calc(100% - 1rem); -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - content: ""; -} - -.modal-dialog-centered.modal-dialog-scrollable { - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-pack: center; - justify-content: center; - height: 100%; -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none; -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none; -} - -.modal-content { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop.show { - opacity: 0.5; -} - -.modal-header { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto; -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5; -} - -.modal-body { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - padding: 1rem; -} - -.modal-footer { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: end; - justify-content: flex-end; - padding: 0.75rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: calc(0.3rem - 1px); - border-bottom-left-radius: calc(0.3rem - 1px); -} - -.modal-footer>* { - margin: 0.25rem; -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem); - } - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem); - } - .modal-dialog-centered { - min-height: calc(100% - 3.5rem); - } - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem); - } - .modal-sm { - max-width: 300px; - } -} - -@media (min-width: 992px) { - .modal-lg, - .modal-xl { - max-width: 800px; - } -} - -@media (min-width: 1200px) { - .modal-xl { - max-width: 1140px; - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.875rem; - word-wrap: break-word; - opacity: 0; -} - -.tooltip.show { - opacity: 0.9; -} - -.tooltip .arrow { - position: absolute; - display: block; - width: 0.8rem; - height: 0.4rem; -} - -.tooltip .arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-tooltip-top, -.bs-tooltip-auto[x-placement^="top"] { - padding: 0.4rem 0; -} - -.bs-tooltip-top .arrow, -.bs-tooltip-auto[x-placement^="top"] .arrow { - bottom: 0; -} - -.bs-tooltip-top .arrow::before, -.bs-tooltip-auto[x-placement^="top"] .arrow::before { - top: 0; - border-width: 0.4rem 0.4rem 0; - border-top-color: #000; -} - -.bs-tooltip-right, -.bs-tooltip-auto[x-placement^="right"] { - padding: 0 0.4rem; -} - -.bs-tooltip-right .arrow, -.bs-tooltip-auto[x-placement^="right"] .arrow { - left: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-right .arrow::before, -.bs-tooltip-auto[x-placement^="right"] .arrow::before { - right: 0; - border-width: 0.4rem 0.4rem 0.4rem 0; - border-right-color: #000; -} - -.bs-tooltip-bottom, -.bs-tooltip-auto[x-placement^="bottom"] { - padding: 0.4rem 0; -} - -.bs-tooltip-bottom .arrow, -.bs-tooltip-auto[x-placement^="bottom"] .arrow { - top: 0; -} - -.bs-tooltip-bottom .arrow::before, -.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { - bottom: 0; - border-width: 0 0.4rem 0.4rem; - border-bottom-color: #000; -} - -.bs-tooltip-left, -.bs-tooltip-auto[x-placement^="left"] { - padding: 0 0.4rem; -} - -.bs-tooltip-left .arrow, -.bs-tooltip-auto[x-placement^="left"] .arrow { - right: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-left .arrow::before, -.bs-tooltip-auto[x-placement^="left"] .arrow::before { - left: 0; - border-width: 0.4rem 0 0.4rem 0.4rem; - border-left-color: #000; -} - -.tooltip-inner { - max-width: 200px; - padding: 0.25rem 0.5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 0.25rem; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: 0.5rem; - margin: 0 0.3rem; -} - -.popover .arrow::before, -.popover .arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-popover-top, -.bs-popover-auto[x-placement^="top"] { - margin-bottom: 0.5rem; -} - -.bs-popover-top>.arrow, -.bs-popover-auto[x-placement^="top"]>.arrow { - bottom: calc(-0.5rem - 1px); -} - -.bs-popover-top>.arrow::before, -.bs-popover-auto[x-placement^="top"]>.arrow::before { - bottom: 0; - border-width: 0.5rem 0.5rem 0; - border-top-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-top>.arrow::after, -.bs-popover-auto[x-placement^="top"]>.arrow::after { - bottom: 1px; - border-width: 0.5rem 0.5rem 0; - border-top-color: #fff; -} - -.bs-popover-right, -.bs-popover-auto[x-placement^="right"] { - margin-left: 0.5rem; -} - -.bs-popover-right>.arrow, -.bs-popover-auto[x-placement^="right"]>.arrow { - left: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-right>.arrow::before, -.bs-popover-auto[x-placement^="right"]>.arrow::before { - left: 0; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-right>.arrow::after, -.bs-popover-auto[x-placement^="right"]>.arrow::after { - left: 1px; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: #fff; -} - -.bs-popover-bottom, -.bs-popover-auto[x-placement^="bottom"] { - margin-top: 0.5rem; -} - -.bs-popover-bottom>.arrow, -.bs-popover-auto[x-placement^="bottom"]>.arrow { - top: calc(-0.5rem - 1px); -} - -.bs-popover-bottom>.arrow::before, -.bs-popover-auto[x-placement^="bottom"]>.arrow::before { - top: 0; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-bottom>.arrow::after, -.bs-popover-auto[x-placement^="bottom"]>.arrow::after { - top: 1px; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: #fff; -} - -.bs-popover-bottom .popover-header::before, -.bs-popover-auto[x-placement^="bottom"] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -0.5rem; - content: ""; - border-bottom: 1px solid #f7f7f7; -} - -.bs-popover-left, -.bs-popover-auto[x-placement^="left"] { - margin-right: 0.5rem; -} - -.bs-popover-left>.arrow, -.bs-popover-auto[x-placement^="left"]>.arrow { - right: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-left>.arrow::before, -.bs-popover-auto[x-placement^="left"]>.arrow::before { - right: 0; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-left>.arrow::after, -.bs-popover-auto[x-placement^="left"]>.arrow::after { - right: 1px; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: #fff; -} - -.popover-header { - padding: 0.5rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.popover-header:empty { - display: none; -} - -.popover-body { - padding: 0.5rem 0.75rem; - color: #212529; -} - -.carousel { - position: relative; -} - -.carousel.pointer-event { - -ms-touch-action: pan-y; - touch-action: pan-y; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner::after { - display: block; - clear: both; - content: ""; -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transition: -webkit-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -.carousel-item-next:not(.carousel-item-left), -.active.carousel-item-right { - -webkit-transform: translateX(100%); - transform: translateX(100%); -} - -.carousel-item-prev:not(.carousel-item-right), -.active.carousel-item-left { - -webkit-transform: translateX(-100%); - transform: translateX(-100%); -} - -.carousel-fade .carousel-item { - opacity: 0; - transition-property: opacity; - -webkit-transform: none; - transform: none; -} - -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right { - z-index: 1; - opacity: 1; -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - transition: opacity 0s 0.6s; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - transition: none; - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: 0.5; - transition: opacity 0.15s ease; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-control-prev, - .carousel-control-next { - transition: none; - } -} - -.carousel-control-prev:hover, -.carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #fff; - text-decoration: none; - outline: 0; - opacity: 0.9; -} - -.carousel-control-prev { - left: 0; -} - -.carousel-control-next { - right: 0; -} - -.carousel-control-prev-icon, -.carousel-control-next-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50% / 100% 100%; -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: -ms-flexbox; - display: flex; - -ms-flex-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none; -} - -.carousel-indicators li { - box-sizing: content-box; - -ms-flex: 0 1 auto; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - transition: opacity 0.6s ease; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-indicators li { - transition: none; - } -} - -.carousel-indicators .active { - opacity: 1; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; -} - -@-webkit-keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: 0.25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite; -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: 0.2em; -} - -@-webkit-keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - opacity: 1; - } -} - -@keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - opacity: 1; - } -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite; -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem; -} - -.align-baseline { - vertical-align: baseline !important; -} - -.align-top { - vertical-align: top !important; -} - -.align-middle { - vertical-align: middle !important; -} - -.align-bottom { - vertical-align: bottom !important; -} - -.align-text-bottom { - vertical-align: text-bottom !important; -} - -.align-text-top { - vertical-align: text-top !important; -} - -.bg-primary { - background-color: #007bff !important; -} - -a.bg-primary:hover, -a.bg-primary:focus, -button.bg-primary:hover, -button.bg-primary:focus { - background-color: #0062cc !important; -} - -.bg-secondary { - background-color: #6c757d !important; -} - -a.bg-secondary:hover, -a.bg-secondary:focus, -button.bg-secondary:hover, -button.bg-secondary:focus { - background-color: #545b62 !important; -} - -.bg-success { - background-color: #28a745 !important; -} - -a.bg-success:hover, -a.bg-success:focus, -button.bg-success:hover, -button.bg-success:focus { - background-color: #1e7e34 !important; -} - -.bg-info { - background-color: #17a2b8 !important; -} - -a.bg-info:hover, -a.bg-info:focus, -button.bg-info:hover, -button.bg-info:focus { - background-color: #117a8b !important; -} - -.bg-warning { - background-color: #ffc107 !important; -} - -a.bg-warning:hover, -a.bg-warning:focus, -button.bg-warning:hover, -button.bg-warning:focus { - background-color: #d39e00 !important; -} - -.bg-danger { - background-color: #dc3545 !important; -} - -a.bg-danger:hover, -a.bg-danger:focus, -button.bg-danger:hover, -button.bg-danger:focus { - background-color: #bd2130 !important; -} - -.bg-light { - background-color: #f8f9fa !important; -} - -a.bg-light:hover, -a.bg-light:focus, -button.bg-light:hover, -button.bg-light:focus { - background-color: #dae0e5 !important; -} - -.bg-dark { - background-color: #343a40 !important; -} - -a.bg-dark:hover, -a.bg-dark:focus, -button.bg-dark:hover, -button.bg-dark:focus { - background-color: #1d2124 !important; -} - -.bg-white { - background-color: #fff !important; -} - -.bg-transparent { - background-color: transparent !important; -} - -.border { - border: 1px solid #dee2e6 !important; -} - -.border-top { - border-top: 1px solid #dee2e6 !important; -} - -.border-right { - border-right: 1px solid #dee2e6 !important; -} - -.border-bottom { - border-bottom: 1px solid #dee2e6 !important; -} - -.border-left { - border-left: 1px solid #dee2e6 !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-right-0 { - border-right: 0 !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-left-0 { - border-left: 0 !important; -} - -.border-primary { - border-color: #007bff !important; -} - -.border-secondary { - border-color: #6c757d !important; -} - -.border-success { - border-color: #28a745 !important; -} - -.border-info { - border-color: #17a2b8 !important; -} - -.border-warning { - border-color: #ffc107 !important; -} - -.border-danger { - border-color: #dc3545 !important; -} - -.border-light { - border-color: #f8f9fa !important; -} - -.border-dark { - border-color: #343a40 !important; -} - -.border-white { - border-color: #fff !important; -} - -.rounded-sm { - border-radius: 0.2rem !important; -} - -.rounded { - border-radius: 0.25rem !important; -} - -.rounded-top { - border-top-left-radius: 0.25rem !important; - border-top-right-radius: 0.25rem !important; -} - -.rounded-right { - border-top-right-radius: 0.25rem !important; - border-bottom-right-radius: 0.25rem !important; -} - -.rounded-bottom { - border-bottom-right-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-left { - border-top-left-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-lg { - border-radius: 0.3rem !important; -} - -.rounded-circle { - border-radius: 50% !important; -} - -.rounded-pill { - border-radius: 50rem !important; -} - -.rounded-0 { - border-radius: 0 !important; -} - -.clearfix::after { - display: block; - clear: both; - content: ""; -} - -.d-none { - display: none !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: -ms-flexbox !important; - display: flex !important; -} - -.d-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; -} - -@media (min-width: 576px) { - .d-sm-none { - display: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-sm-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 768px) { - .d-md-none { - display: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-md-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 992px) { - .d-lg-none { - display: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-lg-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 1200px) { - .d-xl-none { - display: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-xl-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media print { - .d-print-none { - display: none !important; - } - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-print-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden; -} - -.embed-responsive::before { - display: block; - content: ""; -} - -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} - -.embed-responsive-21by9::before { - padding-top: 42.857143%; -} - -.embed-responsive-16by9::before { - padding-top: 56.25%; -} - -.embed-responsive-4by3::before { - padding-top: 75%; -} - -.embed-responsive-1by1::before { - padding-top: 100%; -} - -.flex-row { - -ms-flex-direction: row !important; - flex-direction: row !important; -} - -.flex-column { - -ms-flex-direction: column !important; - flex-direction: column !important; -} - -.flex-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; -} - -.flex-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; -} - -.flex-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; -} - -.flex-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; -} - -.flex-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; -} - -.flex-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; -} - -.flex-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; -} - -.justify-content-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; -} - -.justify-content-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; -} - -.justify-content-center { - -ms-flex-pack: center !important; - justify-content: center !important; -} - -.justify-content-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; -} - -.justify-content-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; -} - -.align-items-start { - -ms-flex-align: start !important; - align-items: flex-start !important; -} - -.align-items-end { - -ms-flex-align: end !important; - align-items: flex-end !important; -} - -.align-items-center { - -ms-flex-align: center !important; - align-items: center !important; -} - -.align-items-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; -} - -.align-items-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; -} - -.align-content-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; -} - -.align-content-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; -} - -.align-content-center { - -ms-flex-line-pack: center !important; - align-content: center !important; -} - -.align-content-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; -} - -.align-content-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; -} - -.align-content-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; -} - -.align-self-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; -} - -.align-self-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; -} - -.align-self-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; -} - -.align-self-center { - -ms-flex-item-align: center !important; - align-self: center !important; -} - -.align-self-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; -} - -.align-self-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; -} - -@media (min-width: 576px) { - .flex-sm-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-sm-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-sm-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-sm-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-sm-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-sm-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-sm-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-sm-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-sm-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-sm-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-sm-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-sm-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-sm-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-sm-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-sm-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-sm-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-sm-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-sm-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-sm-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-sm-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-sm-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-sm-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-sm-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-sm-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-sm-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-sm-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-sm-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-sm-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 768px) { - .flex-md-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-md-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-md-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-md-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-md-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-md-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-md-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-md-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-md-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-md-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-md-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-md-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-md-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-md-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-md-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-md-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-md-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-md-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-md-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-md-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-md-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-md-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-md-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-md-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-md-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-md-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-md-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-md-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-md-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-md-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 992px) { - .flex-lg-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-lg-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-lg-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-lg-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-lg-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-lg-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-lg-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-lg-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-lg-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-lg-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-lg-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-lg-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-lg-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-lg-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-lg-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-lg-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-lg-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-lg-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-lg-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-lg-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-lg-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-lg-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-lg-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-lg-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-lg-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-lg-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-lg-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-lg-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 1200px) { - .flex-xl-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-xl-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-xl-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-xl-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-xl-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-xl-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-xl-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-xl-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-xl-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-xl-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-xl-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-xl-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-xl-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-xl-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-xl-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-xl-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-xl-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-xl-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-xl-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-xl-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-xl-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-xl-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-xl-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-xl-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-xl-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-xl-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-xl-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-xl-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -.float-left { - float: left !important; -} - -.float-right { - float: right !important; -} - -.float-none { - float: none !important; -} - -@media (min-width: 576px) { - .float-sm-left { - float: left !important; - } - .float-sm-right { - float: right !important; - } - .float-sm-none { - float: none !important; - } -} - -@media (min-width: 768px) { - .float-md-left { - float: left !important; - } - .float-md-right { - float: right !important; - } - .float-md-none { - float: none !important; - } -} - -@media (min-width: 992px) { - .float-lg-left { - float: left !important; - } - .float-lg-right { - float: right !important; - } - .float-lg-none { - float: none !important; - } -} - -@media (min-width: 1200px) { - .float-xl-left { - float: left !important; - } - .float-xl-right { - float: right !important; - } - .float-xl-none { - float: none !important; - } -} - -.overflow-auto { - overflow: auto !important; -} - -.overflow-hidden { - overflow: hidden !important; -} - -.position-static { - position: static !important; -} - -.position-relative { - position: relative !important; -} - -.position-absolute { - position: absolute !important; -} - -.position-fixed { - position: fixed !important; -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important; -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; -} - -@supports ((position: -webkit-sticky) or (position: sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; -} - -.shadow-none { - box-shadow: none !important; -} - -.w-25 { - width: 25% !important; -} - -.w-50 { - width: 50% !important; -} - -.w-75 { - width: 75% !important; -} - -.w-100 { - width: 100% !important; -} - -.w-auto { - width: auto !important; -} - -.h-25 { - height: 25% !important; -} - -.h-50 { - height: 50% !important; -} - -.h-75 { - height: 75% !important; -} - -.h-100 { - height: 100% !important; -} - -.h-auto { - height: auto !important; -} - -.mw-100 { - max-width: 100% !important; -} - -.mh-100 { - max-height: 100% !important; -} - -.min-vw-100 { - min-width: 100vw !important; -} - -.min-vh-100 { - min-height: 100vh !important; -} - -.vw-100 { - width: 100vw !important; -} - -.vh-100 { - height: 100vh !important; -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: ""; - background-color: rgba(0, 0, 0, 0); -} - -.m-0 { - margin: 0 !important; -} - -.mt-0, -.my-0 { - margin-top: 0 !important; -} - -.mr-0, -.mx-0 { - margin-right: 0 !important; -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important; -} - -.ml-0, -.mx-0 { - margin-left: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1, -.my-1 { - margin-top: 0.25rem !important; -} - -.mr-1, -.mx-1 { - margin-right: 0.25rem !important; -} - -.mb-1, -.my-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1, -.mx-1 { - margin-left: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2, -.my-2 { - margin-top: 0.5rem !important; -} - -.mr-2, -.mx-2 { - margin-right: 0.5rem !important; -} - -.mb-2, -.my-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2, -.mx-2 { - margin-left: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.mt-3, -.my-3 { - margin-top: 1rem !important; -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important; -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important; -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important; -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important; -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important; -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.mt-5, -.my-5 { - margin-top: 3rem !important; -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important; -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important; -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0, -.py-0 { - padding-top: 0 !important; -} - -.pr-0, -.px-0 { - padding-right: 0 !important; -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important; -} - -.pl-0, -.px-0 { - padding-left: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1, -.py-1 { - padding-top: 0.25rem !important; -} - -.pr-1, -.px-1 { - padding-right: 0.25rem !important; -} - -.pb-1, -.py-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1, -.px-1 { - padding-left: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2, -.py-2 { - padding-top: 0.5rem !important; -} - -.pr-2, -.px-2 { - padding-right: 0.5rem !important; -} - -.pb-2, -.py-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2, -.px-2 { - padding-left: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.pt-3, -.py-3 { - padding-top: 1rem !important; -} - -.pr-3, -.px-3 { - padding-right: 1rem !important; -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important; -} - -.pl-3, -.px-3 { - padding-left: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important; -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important; -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important; -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.pt-5, -.py-5 { - padding-top: 3rem !important; -} - -.pr-5, -.px-5 { - padding-right: 3rem !important; -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important; -} - -.pl-5, -.px-5 { - padding-left: 3rem !important; -} - -.m-n1 { - margin: -0.25rem !important; -} - -.mt-n1, -.my-n1 { - margin-top: -0.25rem !important; -} - -.mr-n1, -.mx-n1 { - margin-right: -0.25rem !important; -} - -.mb-n1, -.my-n1 { - margin-bottom: -0.25rem !important; -} - -.ml-n1, -.mx-n1 { - margin-left: -0.25rem !important; -} - -.m-n2 { - margin: -0.5rem !important; -} - -.mt-n2, -.my-n2 { - margin-top: -0.5rem !important; -} - -.mr-n2, -.mx-n2 { - margin-right: -0.5rem !important; -} - -.mb-n2, -.my-n2 { - margin-bottom: -0.5rem !important; -} - -.ml-n2, -.mx-n2 { - margin-left: -0.5rem !important; -} - -.m-n3 { - margin: -1rem !important; -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important; -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important; -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important; -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important; -} - -.m-n4 { - margin: -1.5rem !important; -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important; -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important; -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important; -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important; -} - -.m-n5 { - margin: -3rem !important; -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important; -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important; -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important; -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto, -.my-auto { - margin-top: auto !important; -} - -.mr-auto, -.mx-auto { - margin-right: auto !important; -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important; -} - -.ml-auto, -.mx-auto { - margin-left: auto !important; -} - -@media (min-width: 576px) { - .m-sm-0 { - margin: 0 !important; - } - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important; - } - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important; - } - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important; - } - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .mt-sm-1, - .my-sm-1 { - margin-top: 0.25rem !important; - } - .mr-sm-1, - .mx-sm-1 { - margin-right: 0.25rem !important; - } - .mb-sm-1, - .my-sm-1 { - margin-bottom: 0.25rem !important; - } - .ml-sm-1, - .mx-sm-1 { - margin-left: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .mt-sm-2, - .my-sm-2 { - margin-top: 0.5rem !important; - } - .mr-sm-2, - .mx-sm-2 { - margin-right: 0.5rem !important; - } - .mb-sm-2, - .my-sm-2 { - margin-bottom: 0.5rem !important; - } - .ml-sm-2, - .mx-sm-2 { - margin-left: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important; - } - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important; - } - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important; - } - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important; - } - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important; - } - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important; - } - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important; - } - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important; - } - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important; - } - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important; - } - .p-sm-0 { - padding: 0 !important; - } - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important; - } - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important; - } - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important; - } - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .pt-sm-1, - .py-sm-1 { - padding-top: 0.25rem !important; - } - .pr-sm-1, - .px-sm-1 { - padding-right: 0.25rem !important; - } - .pb-sm-1, - .py-sm-1 { - padding-bottom: 0.25rem !important; - } - .pl-sm-1, - .px-sm-1 { - padding-left: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .pt-sm-2, - .py-sm-2 { - padding-top: 0.5rem !important; - } - .pr-sm-2, - .px-sm-2 { - padding-right: 0.5rem !important; - } - .pb-sm-2, - .py-sm-2 { - padding-bottom: 0.5rem !important; - } - .pl-sm-2, - .px-sm-2 { - padding-left: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important; - } - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important; - } - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important; - } - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important; - } - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important; - } - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important; - } - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important; - } - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important; - } - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important; - } - .m-sm-n1 { - margin: -0.25rem !important; - } - .mt-sm-n1, - .my-sm-n1 { - margin-top: -0.25rem !important; - } - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -0.25rem !important; - } - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -0.25rem !important; - } - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -0.25rem !important; - } - .m-sm-n2 { - margin: -0.5rem !important; - } - .mt-sm-n2, - .my-sm-n2 { - margin-top: -0.5rem !important; - } - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -0.5rem !important; - } - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -0.5rem !important; - } - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -0.5rem !important; - } - .m-sm-n3 { - margin: -1rem !important; - } - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important; - } - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important; - } - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important; - } - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important; - } - .m-sm-n4 { - margin: -1.5rem !important; - } - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important; - } - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important; - } - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important; - } - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important; - } - .m-sm-n5 { - margin: -3rem !important; - } - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important; - } - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important; - } - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important; - } - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important; - } - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important; - } - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important; - } - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important; - } -} - -@media (min-width: 768px) { - .m-md-0 { - margin: 0 !important; - } - .mt-md-0, - .my-md-0 { - margin-top: 0 !important; - } - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important; - } - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important; - } - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .mt-md-1, - .my-md-1 { - margin-top: 0.25rem !important; - } - .mr-md-1, - .mx-md-1 { - margin-right: 0.25rem !important; - } - .mb-md-1, - .my-md-1 { - margin-bottom: 0.25rem !important; - } - .ml-md-1, - .mx-md-1 { - margin-left: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .mt-md-2, - .my-md-2 { - margin-top: 0.5rem !important; - } - .mr-md-2, - .mx-md-2 { - margin-right: 0.5rem !important; - } - .mb-md-2, - .my-md-2 { - margin-bottom: 0.5rem !important; - } - .ml-md-2, - .mx-md-2 { - margin-left: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important; - } - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important; - } - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important; - } - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important; - } - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important; - } - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important; - } - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important; - } - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important; - } - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important; - } - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important; - } - .p-md-0 { - padding: 0 !important; - } - .pt-md-0, - .py-md-0 { - padding-top: 0 !important; - } - .pr-md-0, - .px-md-0 { - padding-right: 0 !important; - } - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important; - } - .pl-md-0, - .px-md-0 { - padding-left: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .pt-md-1, - .py-md-1 { - padding-top: 0.25rem !important; - } - .pr-md-1, - .px-md-1 { - padding-right: 0.25rem !important; - } - .pb-md-1, - .py-md-1 { - padding-bottom: 0.25rem !important; - } - .pl-md-1, - .px-md-1 { - padding-left: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .pt-md-2, - .py-md-2 { - padding-top: 0.5rem !important; - } - .pr-md-2, - .px-md-2 { - padding-right: 0.5rem !important; - } - .pb-md-2, - .py-md-2 { - padding-bottom: 0.5rem !important; - } - .pl-md-2, - .px-md-2 { - padding-left: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important; - } - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important; - } - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important; - } - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important; - } - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important; - } - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important; - } - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important; - } - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important; - } - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important; - } - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important; - } - .m-md-n1 { - margin: -0.25rem !important; - } - .mt-md-n1, - .my-md-n1 { - margin-top: -0.25rem !important; - } - .mr-md-n1, - .mx-md-n1 { - margin-right: -0.25rem !important; - } - .mb-md-n1, - .my-md-n1 { - margin-bottom: -0.25rem !important; - } - .ml-md-n1, - .mx-md-n1 { - margin-left: -0.25rem !important; - } - .m-md-n2 { - margin: -0.5rem !important; - } - .mt-md-n2, - .my-md-n2 { - margin-top: -0.5rem !important; - } - .mr-md-n2, - .mx-md-n2 { - margin-right: -0.5rem !important; - } - .mb-md-n2, - .my-md-n2 { - margin-bottom: -0.5rem !important; - } - .ml-md-n2, - .mx-md-n2 { - margin-left: -0.5rem !important; - } - .m-md-n3 { - margin: -1rem !important; - } - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important; - } - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important; - } - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important; - } - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important; - } - .m-md-n4 { - margin: -1.5rem !important; - } - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important; - } - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important; - } - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important; - } - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important; - } - .m-md-n5 { - margin: -3rem !important; - } - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important; - } - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important; - } - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important; - } - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mt-md-auto, - .my-md-auto { - margin-top: auto !important; - } - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important; - } - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important; - } - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important; - } -} - -@media (min-width: 992px) { - .m-lg-0 { - margin: 0 !important; - } - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important; - } - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important; - } - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important; - } - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .mt-lg-1, - .my-lg-1 { - margin-top: 0.25rem !important; - } - .mr-lg-1, - .mx-lg-1 { - margin-right: 0.25rem !important; - } - .mb-lg-1, - .my-lg-1 { - margin-bottom: 0.25rem !important; - } - .ml-lg-1, - .mx-lg-1 { - margin-left: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .mt-lg-2, - .my-lg-2 { - margin-top: 0.5rem !important; - } - .mr-lg-2, - .mx-lg-2 { - margin-right: 0.5rem !important; - } - .mb-lg-2, - .my-lg-2 { - margin-bottom: 0.5rem !important; - } - .ml-lg-2, - .mx-lg-2 { - margin-left: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important; - } - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important; - } - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important; - } - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important; - } - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important; - } - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important; - } - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important; - } - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important; - } - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important; - } - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important; - } - .p-lg-0 { - padding: 0 !important; - } - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important; - } - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important; - } - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important; - } - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .pt-lg-1, - .py-lg-1 { - padding-top: 0.25rem !important; - } - .pr-lg-1, - .px-lg-1 { - padding-right: 0.25rem !important; - } - .pb-lg-1, - .py-lg-1 { - padding-bottom: 0.25rem !important; - } - .pl-lg-1, - .px-lg-1 { - padding-left: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .pt-lg-2, - .py-lg-2 { - padding-top: 0.5rem !important; - } - .pr-lg-2, - .px-lg-2 { - padding-right: 0.5rem !important; - } - .pb-lg-2, - .py-lg-2 { - padding-bottom: 0.5rem !important; - } - .pl-lg-2, - .px-lg-2 { - padding-left: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important; - } - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important; - } - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important; - } - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important; - } - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important; - } - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important; - } - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important; - } - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important; - } - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important; - } - .m-lg-n1 { - margin: -0.25rem !important; - } - .mt-lg-n1, - .my-lg-n1 { - margin-top: -0.25rem !important; - } - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -0.25rem !important; - } - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -0.25rem !important; - } - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -0.25rem !important; - } - .m-lg-n2 { - margin: -0.5rem !important; - } - .mt-lg-n2, - .my-lg-n2 { - margin-top: -0.5rem !important; - } - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -0.5rem !important; - } - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -0.5rem !important; - } - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -0.5rem !important; - } - .m-lg-n3 { - margin: -1rem !important; - } - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important; - } - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important; - } - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important; - } - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important; - } - .m-lg-n4 { - margin: -1.5rem !important; - } - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important; - } - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important; - } - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important; - } - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important; - } - .m-lg-n5 { - margin: -3rem !important; - } - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important; - } - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important; - } - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important; - } - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important; - } - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important; - } - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important; - } - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important; - } -} - -@media (min-width: 1200px) { - .m-xl-0 { - margin: 0 !important; - } - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important; - } - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important; - } - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important; - } - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .mt-xl-1, - .my-xl-1 { - margin-top: 0.25rem !important; - } - .mr-xl-1, - .mx-xl-1 { - margin-right: 0.25rem !important; - } - .mb-xl-1, - .my-xl-1 { - margin-bottom: 0.25rem !important; - } - .ml-xl-1, - .mx-xl-1 { - margin-left: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .mt-xl-2, - .my-xl-2 { - margin-top: 0.5rem !important; - } - .mr-xl-2, - .mx-xl-2 { - margin-right: 0.5rem !important; - } - .mb-xl-2, - .my-xl-2 { - margin-bottom: 0.5rem !important; - } - .ml-xl-2, - .mx-xl-2 { - margin-left: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important; - } - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important; - } - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important; - } - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important; - } - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important; - } - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important; - } - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important; - } - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important; - } - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important; - } - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important; - } - .p-xl-0 { - padding: 0 !important; - } - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important; - } - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important; - } - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important; - } - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .pt-xl-1, - .py-xl-1 { - padding-top: 0.25rem !important; - } - .pr-xl-1, - .px-xl-1 { - padding-right: 0.25rem !important; - } - .pb-xl-1, - .py-xl-1 { - padding-bottom: 0.25rem !important; - } - .pl-xl-1, - .px-xl-1 { - padding-left: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .pt-xl-2, - .py-xl-2 { - padding-top: 0.5rem !important; - } - .pr-xl-2, - .px-xl-2 { - padding-right: 0.5rem !important; - } - .pb-xl-2, - .py-xl-2 { - padding-bottom: 0.5rem !important; - } - .pl-xl-2, - .px-xl-2 { - padding-left: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important; - } - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important; - } - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important; - } - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important; - } - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important; - } - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important; - } - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important; - } - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important; - } - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important; - } - .m-xl-n1 { - margin: -0.25rem !important; - } - .mt-xl-n1, - .my-xl-n1 { - margin-top: -0.25rem !important; - } - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -0.25rem !important; - } - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -0.25rem !important; - } - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -0.25rem !important; - } - .m-xl-n2 { - margin: -0.5rem !important; - } - .mt-xl-n2, - .my-xl-n2 { - margin-top: -0.5rem !important; - } - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -0.5rem !important; - } - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -0.5rem !important; - } - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -0.5rem !important; - } - .m-xl-n3 { - margin: -1rem !important; - } - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important; - } - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important; - } - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important; - } - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important; - } - .m-xl-n4 { - margin: -1.5rem !important; - } - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important; - } - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important; - } - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important; - } - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important; - } - .m-xl-n5 { - margin: -3rem !important; - } - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important; - } - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important; - } - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important; - } - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important; - } - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important; - } - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important; - } - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important; - } -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; -} - -.text-justify { - text-align: justify !important; -} - -.text-wrap { - white-space: normal !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.text-left { - text-align: left !important; -} - -.text-right { - text-align: right !important; -} - -.text-center { - text-align: center !important; -} - -@media (min-width: 576px) { - .text-sm-left { - text-align: left !important; - } - .text-sm-right { - text-align: right !important; - } - .text-sm-center { - text-align: center !important; - } -} - -@media (min-width: 768px) { - .text-md-left { - text-align: left !important; - } - .text-md-right { - text-align: right !important; - } - .text-md-center { - text-align: center !important; - } -} - -@media (min-width: 992px) { - .text-lg-left { - text-align: left !important; - } - .text-lg-right { - text-align: right !important; - } - .text-lg-center { - text-align: center !important; - } -} - -@media (min-width: 1200px) { - .text-xl-left { - text-align: left !important; - } - .text-xl-right { - text-align: right !important; - } - .text-xl-center { - text-align: center !important; - } -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.font-weight-light { - font-weight: 300 !important; -} - -.font-weight-lighter { - font-weight: lighter !important; -} - -.font-weight-normal { - font-weight: 400 !important; -} - -.font-weight-bold { - font-weight: 700 !important; -} - -.font-weight-bolder { - font-weight: bolder !important; -} - -.font-italic { - font-style: italic !important; -} - -.text-white { - color: #fff !important; -} - -.text-primary { - color: #007bff !important; -} - -a.text-primary:hover, -a.text-primary:focus { - color: #0056b3 !important; -} - -.text-secondary { - color: #6c757d !important; -} - -a.text-secondary:hover, -a.text-secondary:focus { - color: #494f54 !important; -} - -.text-success { - color: #28a745 !important; -} - -a.text-success:hover, -a.text-success:focus { - color: #19692c !important; -} - -.text-info { - color: #17a2b8 !important; -} - -a.text-info:hover, -a.text-info:focus { - color: #0f6674 !important; -} - -.text-warning { - color: #ffc107 !important; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #ba8b00 !important; -} - -.text-danger { - color: #dc3545 !important; -} - -a.text-danger:hover, -a.text-danger:focus { - color: #a71d2a !important; -} - -.text-light { - color: #f8f9fa !important; -} - -a.text-light:hover, -a.text-light:focus { - color: #cbd3da !important; -} - -.text-dark { - color: #343a40 !important; -} - -a.text-dark:hover, -a.text-dark:focus { - color: #121416 !important; -} - -.text-body { - color: #212529 !important; -} - -.text-muted { - color: #6c757d !important; -} - -.text-black-50 { - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.text-decoration-none { - text-decoration: none !important; -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important; -} - -.text-reset { - color: inherit !important; -} - -.visible { - visibility: visible !important; -} - -.invisible { - visibility: hidden !important; -} - -@media print { - *, - *::before, - *::after { - text-shadow: none !important; - box-shadow: none !important; - } - a:not(.btn) { - text-decoration: underline; - } - abbr[title]::after { - content: " (" attr(title) ")"; - } - pre { - white-space: pre-wrap !important; - } - pre, - blockquote { - border: 1px solid #adb5bd; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - @page { - size: a3; - } - body { - min-width: 992px !important; - } - .container { - min-width: 992px !important; - } - .navbar { - display: none; - } - .badge { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #dee2e6 !important; - } - .table-dark { - color: inherit; - } - .table-dark th, - .table-dark td, - .table-dark thead th, - .table-dark tbody+tbody { - border-color: #dee2e6; - } - .table .thead-dark th { - color: inherit; - border-color: #dee2e6; - } -} - - -/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/ServiceGrid/frontEnd/bootstrap/css/bootstrap.css.map b/ServiceGrid/frontEnd/bootstrap/css/bootstrap.css.map deleted file mode 100644 index 521afc5b..00000000 --- a/ServiceGrid/frontEnd/bootstrap/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","bootstrap.css","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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AAwB;AFpH1B;;AE4HA;EACE,aAAa;EACb,0BAA0B;AFzH5B;;AEgIA;EACE,qBAAqB;AF7HvB;;AEgIA;EACE,kBAAkB;EAClB,eAAe;AF7HjB;;AEgIA;EACE,aAAa;AF7Hf;;AAEA;EEiIE,wBAAwB;AF/H1B;;AM3VA;;EAEE,qBHySuC;EGvSvC,gBHyS+B;EGxS/B,gBHyS+B;AHoDjC;;AMzVA;EFgHM,iBAtCY;AJmRlB;;AM5VA;EF+GM,eAtCY;AJuRlB;;AM/VA;EF8GM,kBAtCY;AJ2RlB;;AMlWA;EF6GM,iBAtCY;AJ+RlB;;AMrWA;EF4GM,kBAtCY;AJmSlB;;AMxWA;EF2GM,eAtCY;AJuSlB;;AM1WA;EFyGM,kBAtCY;EEjEhB,gBH2S+B;AHkEjC;;AMzWA;EFmGM,eAtCY;EE3DhB,gBH8R+B;EG7R/B,gBHqR+B;AHuFjC;;AM1WA;EF8FM,iBAtCY;EEtDhB,gBH0R+B;EGzR/B,gBHgR+B;AH6FjC;;AM3WA;EFyFM,iBAtCY;EEjDhB,gBHsR+B;EGrR/B,gBH2Q+B;AHmGjC;;AM5WA;EFoFM,iBAtCY;EE5ChB,gBHkR+B;EGjR/B,gBHsQ+B;AHyGjC;;AElVA;EIpBE,gBHiFW;EGhFX,mBHgFW;EG/EX,SAAS;EACT,wCHzCa;AHmZf;;AMlWA;;EFMI,cAAW;EEHb,gBH8N+B;AHuIjC;;AMlWA;;EAEE,cHsQgC;EGrQhC,yBH8QmC;AHuFrC;;AM7VA;EC/EE,eAAe;EACf,gBAAgB;APgblB;;AM7VA;ECpFE,eAAe;EACf,gBAAgB;APqblB;;AM/VA;EACE,qBAAqB;ANkWvB;;AMnWA;EAII,oBHwP+B;AH2GnC;;AMzVA;EFjCI,cAAW;EEmCb,yBAAyB;AN4V3B;;AMxVA;EACE,mBHwBW;ECTP,kBAtCY;AJmXlB;;AMxVA;EACE,cAAc;EF7CZ,cAAW;EE+Cb,cH1GgB;AHqclB;;AM9VA;EAMI,qBAAqB;AN4VzB;;AQ/cA;ECIE,eAAe;EAGf,YAAY;AT6cd;;AQ9cA;EACE,gBLigCwC;EKhgCxC,sBLRa;EKSb,yBLNgB;EOLd,sBP6OgC;EMvOlC,eAAe;EAGf,YAAY;ATsdd;;AQxcA;EAEE,qBAAqB;AR0cvB;;AQvcA;EACE,qBAA0B;EAC1B,cAAc;AR0chB;;AQvcA;EJkCI,cAAW;EIhCb,cL3BgB;AHqelB;;AWjfA;EPuEI,gBAAW;EOrEb,cRoCe;EQnCf,qBAAqB;AXofvB;;AWjfE;EACE,cAAc;AXoflB;;AW/eA;EACE,sBRqlCuC;EC3hCrC,gBAAW;EOxDb,WRTa;EQUb,yBRDgB;EOXd,qBP+O+B;AHgRnC;;AWvfA;EASI,UAAU;EPkDV,eAAW;EOhDX,gBR4Q6B;AHsOjC;;AE1SA;ESjME,cAAc;EPyCZ,gBAAW;EOvCb,cRjBgB;AHggBlB;;AWlfA;EP0CI,kBAAW;EOlCX,cAAc;EACd,kBAAkB;AX+etB;;AW1eA;EACE,iBR4jCuC;EQ3jCvC,kBAAkB;AX6epB;;AYrhBE;ECDA,WAAW;EACX,mBAA0B;EAC1B,kBAAyB;EACzB,kBAAkB;EAClB,iBAAiB;Ab0hBnB;;AcveI;EFtDF;ICWI,gBVqMK;EHkVT;AACF;;Ac7eI;EFtDF;ICWI,gBVsMK;EHuVT;AACF;;AcnfI;EFtDF;ICWI,gBVuMK;EH4VT;AACF;;AczfI;EFtDF;ICWI,iBVwMM;EHiWV;AACF;;AY/iBE;ECPA,WAAW;EACX,mBAA0B;EAC1B,kBAAyB;EACzB,kBAAkB;EAClB,iBAAiB;Ab0jBnB;;AcvgBI;EFrCE;IACE,gBT8LG;EHkXT;AACF;;Ac7gBI;EFrCE;IACE,gBT+LG;EHuXT;AACF;;AcnhBI;EFrCE;IACE,gBTgMG;EH4XT;AACF;;AczhBI;EFrCE;IACE,iBTiMI;EHiYV;AACF;;AY/iBE;ECrBA,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,mBAA0B;EAC1B,kBAAyB;AbwkB3B;;AYhjBE;EACE,eAAe;EACf,cAAc;AZmjBlB;;AYrjBE;;EAMI,gBAAgB;EAChB,eAAe;AZojBrB;;AetmBE;;;;;;EACE,kBAAkB;EAClB,WAAW;EACX,mBAA0B;EAC1B,kBAAyB;Af8mB7B;;Ae3lBM;EACE,0BAAa;EAAb,aAAa;EACb,oBAAY;EAAZ,YAAY;EACZ,eAAe;Af8lBvB;;Ae1lBQ;EF4BJ,kBAAuB;EAA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en5CQ;IFRR,uBAA8C;Eb85C9C;Eet5CQ;IFRR,gBAA8C;Ebi6C9C;Eez5CQ;IFRR,uBAA8C;Ebo6C9C;Ee55CQ;IFRR,uBAA8C;Ebu6C9C;AACF;;AgB39CA;EACE,WAAW;EACX,mBbkIW;EajIX,cbSgB;AHq9ClB;;AgBj+CA;;EAQI,gBbsVgC;EarVhC,mBAAmB;EACnB,6BbJc;AHk+ClB;;AgBx+CA;EAcI,sBAAsB;EACtB,gCbTc;AHu+ClB;;AgB7+CA;EAmBI,6Bbbc;AH2+ClB;;AgBr9CA;;EAGI,ebgU+B;AHupCnC;;AgB98CA;EACE,yBbnCgB;AHo/ClB;;AgBl9CA;;EAKI,yBbvCc;AHy/ClB;;AgBv9CA;;EAWM,wBAA4C;AhBi9ClD;;AgB58CA;;;;EAKI,SAAS;AhB88Cb;;AgBt8CA;EAEI,qCb1DW;AHkgDf;;AKvgDE;EW2EI,cbvEY;EawEZ,sCbvES;AHugDf;;AiBnhDE;;;EAII,yBCsF4D;AlB+7ClE;;AiBzhDE;;;;EAYM,qBC8E0D;AlBs8ClE;;AKzhDE;EYiBM,yBAJsC;AjBghD9C;;AiBjhDE;;EASQ,yBARoC;AjBqhD9C;;AiBziDE;;;EAII,yBCsF4D;AlBq9ClE;;AiB/iDE;;;;EAYM,qBC8E0D;AlB49ClE;;AK/iDE;EYiBM,yBAJsC;AjBsiD9C;;AiBviDE;;EASQ,yBARoC;AjB2iD9C;;AiB/jDE;;;EAII,yBCsF4D;AlB2+ClE;;AiBrkDE;;;;EAYM,qBC8E0D;AlBk/ClE;;AKrkDE;EYiBM,yBAJsC;AjB4jD9C;;AiB7jDE;;EASQ,yBARoC;AjBikD9C;;AiBrlDE;;;EAII,yBCsF4D;AlBigDlE;;AiB3lDE;;;;EAYM,qBC8E0D;AlBwgDlE;;AK3lDE;EYiBM,yBAJsC;AjBklD9C;;AiBnlDE;;EASQ,yBARoC;AjBulD9C;;AiB3mDE;;;EAII,yBCsF4D;AlBuhDlE;;AiBjnDE;;;;EAYM,qBC8E0D;AlB8hDlE;;AKjnDE;EYiBM,yBAJsC;AjBwmD9C;;AiBzmDE;;EASQ,yBARoC;AjB6mD9C;;AiBjoDE;;;EAII,yBCsF4D;AlB6iDlE;;AiBvoDE;;;;EAYM,qBC8E0D;AlBojDlE;;AKvoDE;EYiBM,yBAJsC;AjB8nD9C;;AiB/nDE;;EASQ,yBARoC;AjBmoD9C;;AiBvpDE;;;EAII,yBCsF4D;AlBmkDlE;;AiB7pDE;;;;EAYM,qBC8E0D;AlB0kDlE;;AK7pDE;EYiBM,yBAJsC;AjBopD9C;;AiBrpDE;;EASQ,yBARoC;AjBypD9C;;AiB7qDE;;;EAII,yBCsF4D;AlBylDlE;;AiBnrDE;;;;EAYM,qBC8E0D;AlBgmDlE;;AKnrDE;EYiBM,yBAJsC;AjB0qD9C;;AiB3qDE;;EASQ,yBARoC;AjB+qD9C;;AiBnsDE;;;EAII,sCdQS;AH6rDf;;AKlsDE;EYiBM,sCAJsC;AjByrD9C;;AiB1rDE;;EASQ,sCARoC;AjB8rD9C;;AgBxmDA;EAGM,Wb3GS;Ea4GT,yBbpGY;EaqGZ,qBbmQqD;AHs2C3D;;AgB9mDA;EAWM,cb5GY;Ea6GZ,yBblHY;EamHZ,qBblHY;AHytDlB;;AgBlmDA;EACE,Wb3Ha;Ea4Hb,yBbpHgB;AHytDlB;;AgBvmDA;;;EAOI,qBb+OuD;AHu3C3D;;AgB7mDA;EAWI,SAAS;AhBsmDb;;AgBjnDA;EAgBM,2Cb1IS;AH+uDf;;AK1uDE;EW4IM,WbjJO;EakJP,4CblJO;AHovDf;;AclrDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBolDvC;EgBzlDG;IASK,SAAS;EhBmlDjB;AACF;;Ac9rDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBgmDvC;EgBrmDG;IASK,SAAS;EhB+lDjB;AACF;;Ac1sDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB4mDvC;EgBjnDG;IASK,SAAS;EhB2mDjB;AACF;;ActtDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBwnDvC;EgB7nDG;IASK,SAAS;EhBunDjB;AACF;;AgBtoDA;EAOQ,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iCAAiC;AhBmoDzC;;AgB7oDA;EAcU,SAAS;AhBmoDnB;;AmBhzDA;EACE,cAAc;EACd,WAAW;EACX,mCDuG8D;ECtG9D,yBhB4XkC;ECvQ9B,eAtCY;Ee5EhB,gBhBsR+B;EgBrR/B,gBhB0R+B;EgBzR/B,chBDgB;EgBEhB,sBhBTa;EgBUb,4BAA4B;EAC5B,yBhBPgB;EONd,sBP6OgC;EiB5O9B,wEjBof4F;AH40ClG;;AoB3zDI;EDLJ;ICMM,gBAAgB;EpB+zDpB;AACF;;AmBt0DA;EAsBI,6BAA6B;EAC7B,SAAS;AnBozDb;;AmB30DA;EA4BI,kBAAkB;EAClB,0BhBrBc;AHw0DlB;;AqBz0DE;EACE,clBAc;EkBCd,sBlBRW;EkBSX,qBlBwdsE;EkBvdtE,UAAU;EAKR,gDlBcW;AH0zDjB;;AmBx1DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAiDI,yBhB9Cc;EgBgDd,UAAU;AnB+yDd;;AmB3yDA;EAOI,chBtDc;EgBuDd,sBhB9DW;AHs2Df;;AmBnyDA;;EAEE,cAAc;EACd,WAAW;AnBsyDb;;AmB5xDA;EACE,iCDwB8D;ECvB9D,oCDuB8D;ECtB9D,gBAAgB;EflBd,kBAAW;EeoBb,gBhB4M+B;AHmlDjC;;AmB5xDA;EACE,+BDgB8D;ECf9D,kCDe8D;Ede1D,kBAtCY;EeUhB,gBhByI+B;AHspDjC;;AmB5xDA;EACE,gCDS8D;ECR9D,mCDQ8D;Ede1D,mBAtCY;EeiBhB,gBhBmI+B;AH4pDjC;;AmBtxDA;EACE,cAAc;EACd,WAAW;EACX,mBAA2B;EAC3B,gBAAgB;EfQZ,eAtCY;EegChB,gBhB+K+B;EgB9K/B,chB1GgB;EgB2GhB,6BAA6B;EAC7B,yBAAyB;EACzB,mBAAmC;AnByxDrC;;AmBnyDA;EAcI,gBAAgB;EAChB,eAAe;AnByxDnB;;AmB7wDA;EACE,kCD/B8D;ECgC9D,uBhBgQiC;ECjR7B,mBAtCY;EeyDhB,gBhB2F+B;EOxO7B,qBP+O+B;AH+qDnC;;AmB7wDA;EACE,gCDvC8D;ECwC9D,oBhB6PgC;ECtR5B,kBAtCY;EeiEhB,gBhBkF+B;EOvO7B,qBP8O+B;AHwrDnC;;AmB5wDA;EAGI,YAAY;AnB6wDhB;;AmBzwDA;EACE,YAAY;AnB4wDd;;AmBpwDA;EACE,mBhBsV0C;AHi7C5C;;AmBpwDA;EACE,cAAc;EACd,mBhBuU4C;AHg8C9C;;AmB/vDA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,kBAA0C;EAC1C,iBAAyC;AnBkwD3C;;AmBtwDA;;EAQI,kBAA0C;EAC1C,iBAAyC;AnBmwD7C;;AmB1vDA;EACE,kBAAkB;EAClB,cAAc;EACd,qBhB4S6C;AHi9C/C;;AmB1vDA;EACE,kBAAkB;EAClB,kBhBwS2C;EgBvS3C,qBhBsS6C;AHu9C/C;;AmBhwDA;;EAQI,chBhNc;AH68DlB;;AmBzvDA;EACE,gBAAgB;AnB4vDlB;;AmBzvDA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,sBAAmB;EAAnB,mBAAmB;EACnB,eAAe;EACf,qBhByR4C;AHm+C9C;;AmBhwDA;EAQI,gBAAgB;EAChB,aAAa;EACb,uBhBoR4C;EgBnR5C,cAAc;AnB4vDlB;;AqBh8DE;EACE,aAAa;EACb,WAAW;EACX,mBlB6c0C;ECpb1C,cAAW;EiBvBX,clBNa;AHy8DjB;;AqBh8DE;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBmyBqC;EkBlyBrC,iBAAiB;EjBoEf,mBAtCY;EiB5Bd,gBlB2O6B;EkB1O7B,WlBvDW;EkBwDX,wClBpBa;EOtCb,sBP6OgC;AHixDpC;;AqBn+DI;;;;EAsCE,cAAc;ArBo8DpB;;AqB1+DI;EA4CE,qBlBjCW;EkBoCT,oCHiCwD;EGhCxD,iRHpCmI;EGqCnI,4BAA4B;EAC5B,2DAA6D;EAC7D,gEH6BwD;AlBm6DhE;;AqBn/DI;EAuDI,qBlB5CS;EkB6CT,gDlB7CS;AH6+DjB;;AqBx/DI;EAiEI,oCHewD;EGdxD,kFHcwD;AlB66DhE;;AqB7/DI;EAyEE,qBlB9DW;EkBiET,uCHIwD;EGHxD,ujBAA8J;ArBs7DtK;;AqBngEI;EAiFI,qBlBtES;EkBuET,gDlBvES;AH6/DjB;;AqBxgEI;EA0FI,clB/ES;AHigEjB;;AqB5gEI;;;EA+FI,cAAc;ArBm7DtB;;AqBlhEI;EAuGI,clB5FS;AH2gEjB;;AqBthEI;EA0GM,qBlB/FO;AH+gEjB;;AqB1hEI;EAgHM,qBAAkC;EC1IxC,yBD2I+C;ArB86DnD;;AqB/hEI;EAuHM,gDlB5GO;AHwhEjB;;AqBniEI;EA2HM,qBlBhHO;AH4hEjB;;AqBviEI;EAqII,qBlB1HS;AHgiEjB;;AqB3iEI;EA0IM,qBlB/HO;EkBgIP,gDlBhIO;AHqiEjB;;AqBpiEE;EACE,aAAa;EACb,WAAW;EACX,mBlB6c0C;ECpb1C,cAAW;EiBvBX,clBTa;AHgjEjB;;AqBpiEE;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBmyBqC;EkBlyBrC,iBAAiB;EjBoEf,mBAtCY;EiB5Bd,gBlB2O6B;EkB1O7B,WlBvDW;EkBwDX,wClBvBa;EOnCb,sBP6OgC;AHq3DpC;;AqBvkEI;;;;EAsCE,cAAc;ArBwiEpB;;AqB9kEI;EA4CE,qBlBpCW;EkBuCT,oCHiCwD;EGhCxD,4UHpCmI;EGqCnI,4BAA4B;EAC5B,2DAA6D;EAC7D,gEH6BwD;AlBugEhE;;AqBvlEI;EAuDI,qBlB/CS;EkBgDT,gDlBhDS;AHolEjB;;AqB5lEI;EAiEI,oCHewD;EGdxD,kFHcwD;AlBihEhE;;AqBjmEI;EAyEE,qBlBjEW;EkBoET,uCHIwD;EGHxD,knBAA8J;ArB0hEtK;;AqBvmEI;EAiFI,qBlBzES;EkB0ET,gDlB1ES;AHomEjB;;AqB5mEI;EA0FI,clBlFS;AHwmEjB;;AqBhnEI;;;EA+FI,cAAc;ArBuhEtB;;AqBtnEI;EAuGI,clB/FS;AHknEjB;;AqB1nEI;EA0GM,qBlBlGO;AHsnEjB;;AqB9nEI;EAgHM,qBAAkC;EC1IxC,yBD2I+C;ArBkhEnD;;AqBnoEI;EAuHM,gDlB/GO;AH+nEjB;;AqBvoEI;EA2HM,qBlBnHO;AHmoEjB;;AqB3oEI;EAqII,qBlB7HS;AHuoEjB;;AqB/oEI;EA0IM,qBlBlIO;EkBmIP,gDlBnIO;AH4oEjB;;AmB36DA;EACE,oBAAa;EAAb,aAAa;EACb,uBAAmB;EAAnB,mBAAmB;EACnB,sBAAmB;EAAnB,mBAAmB;AnB86DrB;;AmBj7DA;EASI,WAAW;AnB46Df;;AcloEI;EK6MJ;IAeM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,gBAAgB;EnB26DpB;EmB77DF;IAuBM,oBAAa;IAAb,aAAa;IACb,kBAAc;IAAd,cAAc;IACd,uBAAmB;IAAnB,mBAAmB;IACnB,sBAAmB;IAAnB,mBAAmB;IACnB,gBAAgB;EnBy6DpB;EmBp8DF;IAgCM,qBAAqB;IACrB,WAAW;IACX,sBAAsB;EnBu6D1B;EmBz8DF;IAuCM,qBAAqB;EnBq6DzB;EmB58DF;;IA4CM,WAAW;EnBo6Df;EmBh9DF;IAkDM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,WAAW;IACX,eAAe;EnBi6DnB;EmBv9DF;IAyDM,kBAAkB;IAClB,oBAAc;IAAd,cAAc;IACd,aAAa;IACb,qBhB2LwC;IgB1LxC,cAAc;EnBi6DlB;EmB99DF;IAiEM,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;EnBg6D3B;EmBl+DF;IAqEM,gBAAgB;EnBg6DpB;AACF;;AuBzuEA;EACE,qBAAqB;EAErB,gBpB0R+B;EoBzR/B,cpBMgB;EoBLhB,kBAAkB;EAElB,sBAAsB;EACtB,eAAsD;EACtD,yBAAiB;EAAjB,sBAAiB;EAAjB,qBAAiB;EAAjB,iBAAiB;EACjB,6BAA6B;EAC7B,6BAA2C;ECuF3C,yBrB8RkC;ECvQ9B,eAtCY;EoBiBhB,gBrB8L+B;EOnS7B,sBP6OgC;EiB5O9B,qIjB6b6I;AH6zDnJ;;AoBrvEI;EGLJ;IHMM,gBAAgB;EpByvEpB;AACF;;AK1vEE;EkBUE,cpBNc;EoBOd,qBAAqB;AvBovEzB;;AuBrwEA;EAsBI,UAAU;EACV,gDpBOa;AH4uEjB;;AuB1wEA;EA6BI,apBoZ6B;AH61DjC;;AuBluEA;;EAEE,oBAAoB;AvBquEtB;;AuB5tEE;ECvDA,WrBCa;EmBDX,yBnB8Ba;EqB5Bf,qBrB4Be;AH2vEjB;;AKnxEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBgyE7H;;AwBpxEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBkxEvF;;AwB7wEE;EAEE,WrB1BW;EqB2BX,yBrBEa;EqBDb,qBrBCa;AH8wEjB;;AwBxwEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBozEnN;;AwBrwEI;;EAKI,gDAAiF;AxBqwEzF;;AuBjwEE;ECvDA,WrBCa;EmBDX,yBnBOc;EqBLhB,qBrBKgB;AHuzElB;;AKxzEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBq0E7H;;AwBzzEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBuzEvF;;AwBlzEE;EAEE,WrB1BW;EqB2BX,yBrBrBc;EqBsBd,qBrBtBc;AH00ElB;;AwB7yEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBy1EnN;;AwB1yEI;;EAKI,iDAAiF;AxB0yEzF;;AuBtyEE;ECvDA,WrBCa;EmBDX,yBnBqCa;EqBnCf,qBrBmCe;AH8zEjB;;AK71EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB02E7H;;AwB91EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxB41EvF;;AwBv1EE;EAEE,WrB1BW;EqB2BX,yBrBSa;EqBRb,qBrBQa;AHi1EjB;;AwBl1EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB83EnN;;AwB/0EI;;EAKI,+CAAiF;AxB+0EzF;;AuB30EE;ECvDA,WrBCa;EmBDX,yBnBuCa;EqBrCf,qBrBqCe;AHi2EjB;;AKl4EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB+4E7H;;AwBn4EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBi4EvF;;AwB53EE;EAEE,WrB1BW;EqB2BX,yBrBWa;EqBVb,qBrBUa;AHo3EjB;;AwBv3EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBm6EnN;;AwBp3EI;;EAKI,gDAAiF;AxBo3EzF;;AuBh3EE;ECvDA,crBUgB;EmBVd,yBnBoCa;EqBlCf,qBrBkCe;AHy4EjB;;AKv6EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxBo7E7H;;AwBx6EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBs6EvF;;AwBj6EE;EAEE,crBjBc;EqBkBd,yBrBQa;EqBPb,qBrBOa;AH45EjB;;AwB55EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBw8EnN;;AwBz5EI;;EAKI,gDAAiF;AxBy5EzF;;AuBr5EE;ECvDA,WrBCa;EmBDX,yBnBkCa;EqBhCf,qBrBgCe;AHg7EjB;;AK58EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBy9E7H;;AwB78EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxB28EvF;;AwBt8EE;EAEE,WrB1BW;EqB2BX,yBrBMa;EqBLb,qBrBKa;AHm8EjB;;AwBj8EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB6+EnN;;AwB97EI;;EAKI,+CAAiF;AxB87EzF;;AuB17EE;ECvDA,crBUgB;EmBVd,yBnBEc;EqBAhB,qBrBAgB;AHq/ElB;;AKj/EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxB8/E7H;;AwBl/EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBg/EvF;;AwB3+EE;EAEE,crBjBc;EqBkBd,yBrB1Bc;EqB2Bd,qBrB3Bc;AHwgFlB;;AwBt+EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBkhFnN;;AwBn+EI;;EAKI,iDAAiF;AxBm+EzF;;AuB/9EE;ECvDA,WrBCa;EmBDX,yBnBSc;EqBPhB,qBrBOgB;AHmhFlB;;AKthFE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBmiF7H;;AwBvhFE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,8CAAiF;AxBqhFvF;;AwBhhFE;EAEE,WrB1BW;EqB2BX,yBrBnBc;EqBoBd,qBrBpBc;AHsiFlB;;AwB3gFE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBujFnN;;AwBxgFI;;EAKI,8CAAiF;AxBwgFzF;;AuB9/EE;ECHA,crB5Be;EqB6Bf,qBrB7Be;AHkiFjB;;AK1jFE;EmBwDE,WrB7DW;EqB8DX,yBrBjCa;EqBkCb,qBrBlCa;AHwiFjB;;AwBngFE;EAEE,+CrBvCa;AH4iFjB;;AwBlgFE;EAEE,crB5Ca;EqB6Cb,6BAA6B;AxBogFjC;;AwBjgFE;;EAGE,WrBhFW;EqBiFX,yBrBpDa;EqBqDb,qBrBrDa;AHwjFjB;;AwBjgFI;;EAKI,+CrB5DS;AH6jFjB;;AuB9hFE;ECHA,crBnDgB;EqBoDhB,qBrBpDgB;AHylFlB;;AK1lFE;EmBwDE,WrB7DW;EqB8DX,yBrBxDc;EqByDd,qBrBzDc;AH+lFlB;;AwBniFE;EAEE,iDrB9Dc;AHmmFlB;;AwBliFE;EAEE,crBnEc;EqBoEd,6BAA6B;AxBoiFjC;;AwBjiFE;;EAGE,WrBhFW;EqBiFX,yBrB3Ec;EqB4Ed,qBrB5Ec;AH+mFlB;;AwBjiFI;;EAKI,iDrBnFU;AHonFlB;;AuB9jFE;ECHA,crBrBe;EqBsBf,qBrBtBe;AH2lFjB;;AK1nFE;EmBwDE,WrB7DW;EqB8DX,yBrB1Ba;EqB2Bb,qBrB3Ba;AHimFjB;;AwBnkFE;EAEE,+CrBhCa;AHqmFjB;;AwBlkFE;EAEE,crBrCa;EqBsCb,6BAA6B;AxBokFjC;;AwBjkFE;;EAGE,WrBhFW;EqBiFX,yBrB7Ca;EqB8Cb,qBrB9Ca;AHinFjB;;AwBjkFI;;EAKI,+CrBrDS;AHsnFjB;;AuB9lFE;ECHA,crBnBe;EqBoBf,qBrBpBe;AHynFjB;;AK1pFE;EmBwDE,WrB7DW;EqB8DX,yBrBxBa;EqByBb,qBrBzBa;AH+nFjB;;AwBnmFE;EAEE,gDrB9Ba;AHmoFjB;;AwBlmFE;EAEE,crBnCa;EqBoCb,6BAA6B;AxBomFjC;;AwBjmFE;;EAGE,WrBhFW;EqBiFX,yBrB3Ca;EqB4Cb,qBrB5Ca;AH+oFjB;;AwBjmFI;;EAKI,gDrBnDS;AHopFjB;;AuB9nFE;ECHA,crBtBe;EqBuBf,qBrBvBe;AH4pFjB;;AK1rFE;EmBwDE,crBpDc;EqBqDd,yBrB3Ba;EqB4Bb,qBrB5Ba;AHkqFjB;;AwBnoFE;EAEE,+CrBjCa;AHsqFjB;;AwBloFE;EAEE,crBtCa;EqBuCb,6BAA6B;AxBooFjC;;AwBjoFE;;EAGE,crBvEc;EqBwEd,yBrB9Ca;EqB+Cb,qBrB/Ca;AHkrFjB;;AwBjoFI;;EAKI,+CrBtDS;AHurFjB;;AuB9pFE;ECHA,crBxBe;EqByBf,qBrBzBe;AH8rFjB;;AK1tFE;EmBwDE,WrB7DW;EqB8DX,yBrB7Ba;EqB8Bb,qBrB9Ba;AHosFjB;;AwBnqFE;EAEE,+CrBnCa;AHwsFjB;;AwBlqFE;EAEE,crBxCa;EqByCb,6BAA6B;AxBoqFjC;;AwBjqFE;;EAGE,WrBhFW;EqBiFX,yBrBhDa;EqBiDb,qBrBjDa;AHotFjB;;AwBjqFI;;EAKI,+CrBxDS;AHytFjB;;AuB9rFE;ECHA,crBxDgB;EqByDhB,qBrBzDgB;AH8vFlB;;AK1vFE;EmBwDE,crBpDc;EqBqDd,yBrB7Dc;EqB8Dd,qBrB9Dc;AHowFlB;;AwBnsFE;EAEE,iDrBnEc;AHwwFlB;;AwBlsFE;EAEE,crBxEc;EqByEd,6BAA6B;AxBosFjC;;AwBjsFE;;EAGE,crBvEc;EqBwEd,yBrBhFc;EqBiFd,qBrBjFc;AHoxFlB;;AwBjsFI;;EAKI,iDrBxFU;AHyxFlB;;AuB9tFE;ECHA,crBjDgB;EqBkDhB,qBrBlDgB;AHuxFlB;;AK1xFE;EmBwDE,WrB7DW;EqB8DX,yBrBtDc;EqBuDd,qBrBvDc;AH6xFlB;;AwBnuFE;EAEE,8CrB5Dc;AHiyFlB;;AwBluFE;EAEE,crBjEc;EqBkEd,6BAA6B;AxBouFjC;;AwBjuFE;;EAGE,WrBhFW;EqBiFX,yBrBzEc;EqB0Ed,qBrB1Ec;AH6yFlB;;AwBjuFI;;EAKI,8CrBjFU;AHkzFlB;;AuBnvFA;EACE,gBpBoN+B;EoBnN/B,cpB5Ce;EoB6Cf,qBpBkG4C;AHopF9C;;AK3zFE;EkBwEE,cpBgG8D;EoB/F9D,0BpBgG+C;AHupFnD;;AuB9vFA;EAYI,0BpB2F+C;EoB1F/C,gBAAgB;AvBsvFpB;;AuBnwFA;EAkBI,cpBnFc;EoBoFd,oBAAoB;AvBqvFxB;;AuB1uFA;ECJE,oBrB6SgC;ECtR5B,kBAtCY;EoBiBhB,gBrBkI+B;EOvO7B,qBP8O+B;AH0mFnC;;AuB7uFA;ECRE,uBrBwSiC;ECjR7B,mBAtCY;EoBiBhB,gBrBmI+B;EOxO7B,qBP+O+B;AHgnFnC;;AuB3uFA;EACE,cAAc;EACd,WAAW;AvB8uFb;;AuBhvFA;EAMI,kBpB6T+B;AHi7EnC;;AuBzuFA;;;EAII,WAAW;AvB2uFf;;AyBn3FA;ELMM,gCjB8P2C;AHmnFjD;;AoB52FI;EKXJ;ILYM,gBAAgB;EpBg3FpB;AACF;;AyB73FA;EAII,UAAU;AzB63Fd;;AyBz3FA;EAEI,aAAa;AzB23FjB;;AyBv3FA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;ELXZ,6BjB+PwC;AHuoF9C;;AoBj4FI;EKGJ;ILFM,gBAAgB;EpBq4FpB;AACF;;A0Bj5FA;;;;EAIE,kBAAkB;A1Bo5FpB;;A0Bj5FA;EACE,mBAAmB;A1Bo5FrB;;A2Bh4FI;EACE,qBAAqB;EACrB,oBxBkO0C;EwBjO1C,uBxBgO0C;EwB/N1C,WAAW;EAhCf,uBAA8B;EAC9B,qCAA4C;EAC5C,gBAAgB;EAChB,oCAA2C;A3Bo6F7C;;A2B/2FI;EACE,cAAc;A3Bk3FpB;;A0B55FA;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,avB4pBsC;EuB3pBtC,aAAa;EACb,WAAW;EACX,gBvBkuBuC;EuBjuBvC,iBAA8B;EAC9B,oBAA4B;EtBsGxB,eAtCY;EsB9DhB,cvBXgB;EuBYhB,gBAAgB;EACh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uB,kB3BqJU;AHwnGjC;;A8B5wGA;EAAsB,iB3BoJW;AH4nGjC;;A8BxwGA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,yB3BgSkC;E2B/RlC,gBAAgB;E1BwBZ,eAtCY;E0BgBhB,gB3B0L+B;E2BzL/B,gB3B8L+B;E2B7L/B,c3B7FgB;E2B8FhB,kBAAkB;EAClB,mBAAmB;EACnB,yB3BrGgB;E2BsGhB,yB3BpGgB;EONd,sBP6OgC;AHyoGpC;;A8BxxGA;;EAkBI,aAAa;A9B2wGjB;;A8BjwGA;;EAEE,gCZjB8D;AlBqxGhE;;A8BjwGA;;;;;;EAME,oB3B2QgC;ECtR5B,kBAtCY;E0BmDhB,gB3BgG+B;EOvO7B,qBP8O+B;AH8pGnC;;A8BjwGA;;EAEE,kCZlC8D;AlBsyGhE;;A8BjwGA;;;;;;EAME,uB3BqPiC;ECjR7B,mBAtCY;E0BoEhB,gB3BgF+B;EOxO7B,qBP+O+B;AH8qGnC;;A8BjwGA;;EAEE,sBAA0E;A9BowG5E;;A8BzvGA;;;;;;EpBzJI,0BoB+J4B;EpB9J5B,6BoB8J4B;A9B6vGhC;;A8B1vGA;;;;;;EpBpJI,yBoB0J2B;EpBzJ3B,4BoByJ2B;A9B8vG/B;;A+Bl7GA;EACE,kBAAkB;EAClB,cAAc;EACd,kBAA+C;EAC/C,oBAAqE;A/Bq7GvE;;A+Bl7GA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,kB5B6f0C;AHw7F5C;;A+Bl7GA;EACE,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,W5Byf0C;E4Bxf1C,eAAkF;EAClF,UAAU;A/Bq7GZ;;A+B37GA;EASI,W5BvBW;E4BwBX,qB5BKa;EmB9Bb,yBnB8Ba;AHk7GjB;;A+Bj8GA;EAoBM,gD5BLW;AHs7GjB;;A+Br8GA;EAyBI,qB5B0bsE;AHs/F1E;;A+Bz8GA;EA6BI,W5B3CW;E4B4CX,yB5Bsf8E;E4Brf9E,qB5Bqf8E;AH27FlF;;A+B/8GA;EAuCM,c5B/CY;AH29GlB;;A+Bn9GA;EA0CQ,yB5BtDU;AHm+GlB;;A+Bn6GA;EACE,kBAAkB;EAClB,gBAAgB;EAEhB,mBAAmB;A/Bq6GrB;;A+Bz6GA;EASI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5B4bwC;E4B3bxC,Y5B2bwC;E4B1bxC,oBAAoB;EACpB,WAAW;EACX,sB5BnFW;E4BoFX,yB5BoJ6B;AHgxGjC;;A+Bt7GA;EAwBI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5B6awC;E4B5axC,Y5B4awC;E4B3axC,WAAW;EACX,mCAAgE;A/Bk6GpE;;A+Bz5GA;ErB5GI,sBP6OgC;AH4xGpC;;A+B75GA;EAOM,kOb5EqI;AlBs+G3I;;A+Bj6GA;EAaM,qB5B1FW;EmB9Bb,yBnB8Ba;AHm/GjB;;A+Bt6GA;EAkBM,+KbvFqI;AlB++G3I;;A+B16GA;EAwBM,wC5BrGW;AH2/GjB;;A+B96GA;EA2BM,wC5BxGW;AH+/GjB;;A+B94GA;EAGI,kB5B8Z+C;AHi/FnD;;A+Bl5GA;EAQM,8KbjHqI;AlB+/G3I;;A+Bt5GA;EAcM,wC5B/HW;AH2gHjB;;A+Bl4GA;EACE,qBAA2D;A/Bq4G7D;;A+Bt4GA;EAKM,cAAqD;EACrD,c5BsY+E;E4BrY/E,mBAAmB;EAEnB,qB5BoY4E;AHggGlF;;A+B74GA;EAaM,wBb1E0D;Ea2E1D,0Bb3E0D;Ea4E1D,uBbxD0D;EayD1D,wBbzD0D;Ea0D1D,yB5BlLY;E4BoLZ,qB5B0X4E;EiBpjB5E,iJjBsgB+H;EiBtgB/H,yIjBsgB+H;EiBtgB/H,8KjBsgB+H;AHwjGrI;;AoBzjHI;EWkKJ;IXjKM,gBAAgB;EpB6jHpB;AACF;;A+B75GA;EA0BM,sB5BhMS;E4BiMT,sCAA4E;EAA5E,8BAA4E;A/Bu4GlF;;A+Bl6GA;EAiCM,wC5B1KW;AH+iHjB;;A+Bz3GA;EACE,qBAAqB;EACrB,WAAW;EACX,mCb7G8D;Ea8G9D,0C5BwKkC;ECvQ9B,eAtCY;E2BwIhB,gB5BkE+B;E4BjE/B,gB5BsE+B;E4BrE/B,c5BrNgB;E4BsNhB,sBAAsB;EACtB,uO5BuW+I;E4BtW/I,yB5B3NgB;EONd,sBP6OgC;E4BTlC,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B03GlB;;A+Bz4GA;EAkBI,qB5B4PsE;E4B3PtE,UAAU;EAIR,gD5B7MW;AHqkHjB;;A+B/4GA;EAgCM,c5B5OY;E4B6OZ,sB5BpPS;AHumHf;;A+Bp5GA;EAuCI,YAAY;EACZ,sB5BoIgC;E4BnIhC,sBAAsB;A/Bi3G1B;;A+B15GA;EA6CI,c5B1Pc;E4B2Pd,yB5B/Pc;AHgnHlB;;A+B/5GA;EAmDI,aAAa;A/Bg3GjB;;A+Bn6GA;EAwDI,kBAAkB;EAClB,0B5BrQc;AHonHlB;;A+B32GA;EACE,kCbxK8D;EayK9D,oB5BsHkC;E4BrHlC,uB5BqHkC;E4BpHlC,oB5BqHiC;ECjR7B,mBAtCY;AJijHlB;;A+B32GA;EACE,gCbhL8D;EaiL9D,mB5BmHiC;E4BlHjC,sB5BkHiC;E4BjHjC,kB5BkHgC;ECtR5B,kBAtCY;AJyjHlB;;A+Bt2GA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,mCbhM8D;EaiM9D,gBAAgB;A/By2GlB;;A+Bt2GA;EACE,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,mCbxM8D;EayM9D,SAAS;EACT,UAAU;A/By2GZ;;A+B/2GA;EASI,qB5B2KsE;E4B1KtE,gD5B1Ra;AHooHjB;;A+Bp3GA;;EAgBI,yB5B3Tc;AHoqHlB;;A+Bz3GA;EAqBM,iB5BkUQ;AHsiGd;;A+B73GA;EA0BI,0BAA0B;A/Bu2G9B;;A+Bn2GA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP,UAAU;EACV,mCbxO8D;EayO9D,yB5B6CkC;E4B3ClC,gB5BxD+B;E4ByD/B,gB5BpD+B;E4BqD/B,c5B/UgB;E4BgVhB,sB5BvVa;E4BwVb,yB5BpVgB;EONd,sBP6OgC;AHm9GpC;;A+Bn3GA;EAkBI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,UAAU;EACV,cAAc;EACd,6Bb1P4D;Ea2P5D,yB5B2BgC;E4B1BhC,gB5BpE6B;E4BqE7B,c5B/Vc;E4BgWd,iBAAiB;ETxWjB,yBnBGc;E4BuWd,oBAAoB;ErB3WpB,kCqB4WgF;A/Bq2GpF;;A+B31GA;EACE,WAAW;EACX,cbhR2B;EaiR3B,UAAU;EACV,6BAA6B;EAC7B,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B81GlB;;A+Bn2GA;EAQI,aAAa;A/B+1GjB;;A+Bv2GA;EAY8B,gE5BnWb;AHksHjB;;A+B32GA;EAa8B,gE5BpWb;AHssHjB;;A+B/2GA;EAc8B,gE5BrWb;AH0sHjB;;A+Bn3GA;EAkBI,SAAS;A/Bq2Gb;;A+Bv3GA;EAsBI,W5B2N6C;E4B1N7C,Y5B0N6C;E4BzN7C,oBAAyE;ET7YzE,yBnB8Ba;E4BiXb,S5B0N0C;EO1mB1C,mBP2mB6C;EiB1mB3C,oHjBsgB+H;EiBtgB/H,4GjBsgB+H;E4BnHjI,wBAAgB;EAAhB,gBAAgB;A/Bo2GpB;;AoBlvHI;EWgXJ;IX/WM,wBAAgB;IAAhB,gBAAgB;EpBsvHpB;AACF;;A+Bx4GA;ETrXI,yBnB8mB2E;AHmpG/E;;A+B54GA;EAsCI,W5BoMoC;E4BnMpC,c5BoMqC;E4BnMrC,kBAAkB;EAClB,e5BmMuC;E4BlMvC,yB5B3Zc;E4B4Zd,yBAAyB;ErBjazB,mBPomBoC;AHwqGxC;;A+Bt5GA;EAiDI,W5BgM6C;E4B/L7C,Y5B+L6C;EmBtmB7C,yBnB8Ba;E4B2Yb,S5BgM0C;EO1mB1C,mBP2mB6C;EiB1mB3C,iHjBsgB+H;EiBtgB/H,4GjBsgB+H;E4BzFjI,qBAAgB;EAAhB,gBAAgB;A/Bw2GpB;;AoBhxHI;EWgXJ;IX/WM,qBAAgB;IAAhB,gBAAgB;EpBoxHpB;AACF;;A+Bt6GA;ETrXI,yBnB8mB2E;AHirG/E;;A+B16GA;EAgEI,W5B0KoC;E4BzKpC,c5B0KqC;E4BzKrC,kBAAkB;EAClB,e5ByKuC;E4BxKvC,yB5Brbc;E4Bsbd,yBAAyB;ErB3bzB,mBPomBoC;AHssGxC;;A+Bp7GA;EA2EI,W5BsK6C;E4BrK7C,Y5BqK6C;E4BpK7C,aAAa;EACb,oB5B9D+B;E4B+D/B,mB5B/D+B;EmBrY/B,yBnB8Ba;E4Bwab,S5BmK0C;EO1mB1C,mBP2mB6C;EiB1mB3C,gHjBsgB+H;EiBtgB/H,4GjBsgB+H;E4B5DjI,gBAAgB;A/B42GpB;;AoBjzHI;EWgXJ;IX/WM,oBAAgB;IAAhB,gBAAgB;EpBqzHpB;AACF;;A+Bv8GA;ETrXI,yBnB8mB2E;AHktG/E;;A+B38GA;EA6FI,W5B6IoC;E4B5IpC,c5B6IqC;E4B5IrC,kBAAkB;EAClB,e5B4IuC;E4B3IvC,6BAA6B;EAC7B,yBAAyB;EACzB,oBAA4C;A/Bk3GhD;;A+Br9GA;EAwGI,yB5Bzdc;EOLd,mBPomBoC;AH4uGxC;;A+B19GA;EA6GI,kBAAkB;EAClB,yB5B/dc;EOLd,mBPomBoC;AHkvGxC;;A+Bh+GA;EAoHM,yB5BneY;AHm1HlB;;A+Bp+GA;EAwHM,eAAe;A/Bg3GrB;;A+Bx+GA;EA4HM,yB5B3eY;AH21HlB;;A+B5+GA;EAgIM,eAAe;A/Bg3GrB;;A+Bh/GA;EAoIM,yB5BnfY;AHm2HlB;;A+B32GA;;;EX9fM,4GjBsgB+H;AHy2GrI;;AoB12HI;EWyfJ;;;IXxfM,gBAAgB;EpBg3HpB;AACF;;AgCx3HA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AhC23HlB;;AgCx3HA;EACE,cAAc;EACd,oB7B6qBsC;AH8sGxC;;AK13HE;E2BEE,qBAAqB;AhC43HzB;;AgCj4HA;EAUI,c7BVc;E6BWd,oBAAoB;EACpB,eAAe;AhC23HnB;;AgCn3HA;EACE,gC7BxBgB;AH84HlB;;AgCv3HA;EAII,mB7B0M6B;AH6qHjC;;AgC33HA;EAQI,6BAAgD;EtB3BhD,+BPoOgC;EOnOhC,gCPmOgC;AHgrHpC;;AKl5HE;E2B6BI,qC7BnCY;AH45HlB;;AgCr4HA;EAgBM,c7BpCY;E6BqCZ,6BAA6B;EAC7B,yBAAyB;AhCy3H/B;;AgC34HA;;EAwBI,c7B3Cc;E6B4Cd,sB7BnDW;E6BoDX,kC7BpDW;AH46Hf;;AgCl5HA;EA+BI,gB7B+K6B;EOjO7B,yBsBoD4B;EtBnD5B,0BsBmD4B;AhCu3HhC;;AgC92HA;EtBtEI,sBP6OgC;AH2sHpC;;AgCl3HA;;EAOI,W7B3EW;E6B4EX,yB7B/Ca;AH+5HjB;;AgCv2HA;EAEI,kBAAc;EAAd,cAAc;EACd,kBAAkB;AhCy2HtB;;AgCr2HA;EAEI,0BAAa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C;EiC/gIG;IAwBK,uBAAmB;IAAnB,mBAAmB;EjC0/H3B;EiClhIG;IA2BO,kBAAkB;EjC0/H5B;EiCrhIG;IA+BO,qB9BgiB6B;I8B/hB7B,oB9B+hB6B;EH09GvC;EiCzhIG;;IAsCK,qBAAiB;IAAjB,iBAAiB;EjCu/HzB;EiC7hIG;IAqDK,+BAAwB;IAAxB,wBAAwB;IAGxB,6BAAgB;IAAhB,gBAAgB;EjCy+HxB;EiCjiIG;IA4DK,aAAa;EjCw+HrB;AACF;;AiC1iIA;EAyBQ,yBAAqB;EAArB,qBAAqB;EACrB,oBAA2B;EAA3B,2BAA2B;AjCqhInC;;AiC/iIA;;EAQU,gBAAgB;EAChB,eAAe;AjC4iIzB;;AiCrjIA;EA6BU,uBAAmB;EAAnB,mBAAmB;AjC4hI7B;;AiCzjIA;EAgCY,kBAAkB;AjC6hI9B;;AiC7jIA;EAoCY,qB9BgiB6B;E8B/hB7B,oB9B+hB6B;AH8/GzC;;AiClkIA;;EA2CU,qBAAiB;EAAjB,iBAAiB;AjC4hI3B;;AiCvkIA;EA0DU,+BAAwB;EAAxB,wBAAwB;EAGxB,6BAAgB;EAAhB,gBAAgB;AjC+gI1B;;AiC5kIA;EAiEU,aAAa;AjC+gIvB;;AiClgIA;EAEI,yB9B/MW;AHmtIf;;AKptIE;E4BmNI,yB9BlNS;AHutIf;;AiC1gIA;EAWM,yB9BxNS;AH2tIf;;AK5tIE;E4B4NM,yB9B3NO;AH+tIf;;AiClhIA;EAkBQ,yB9B/NO;AHmuIf;;AiCthIA;;;;EA0BM,yB9BvOS;AH0uIf;;AiC7hIA;EA+BI,yB9B5OW;E8B6OX,gC9B7OW;AH+uIf;;AiCliIA;EAoCI,+QftNuI;AlBwtI3I;;AiCtiIA;EAwCI,yB9BrPW;AHuvIf;;AiC1iIA;EA0CM,yB9BvPS;AH2vIf;;AK5vIE;E4B2PM,yB9B1PO;AH+vIf;;AiC9/HA;EAEI,W9B7QW;AH6wIf;;AKpwIE;E4BuQI,W9BhRS;AHixIf;;AiCtgIA;EAWM,+B9BtRS;AHqxIf;;AK5wIE;E4BgRM,gC9BzRO;AHyxIf;;AiC9gIA;EAkBQ,gC9B7RO;AH6xIf;;AiClhIA;;;;EA0BM,W9BrSS;AHoyIf;;AiCzhIA;EA+BI,+B9B1SW;E8B2SX,sC9B3SW;AHyyIf;;AiC9hIA;EAoCI,qRf1QuI;AlBwwI3I;;AiCliIA;EAwCI,+B9BnTW;AHizIf;;AiCtiIA;EA0CM,W9BrTS;AHqzIf;;AK5yIE;E4B+SM,W9BxTO;AHyzIf;;AkC5zIA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,YAAY;EAEZ,qBAAqB;EACrB,sB/BJa;E+BKb,2BAA2B;EAC3B,sC/BIa;EOZX,sBP6OgC;AH0lIpC;;AkCx0IA;EAaI,eAAe;EACf,cAAc;AlC+zIlB;;AkC70IA;ExBUI,+BPoOgC;EOnOhC,gCPmOgC;AHomIpC;;AkCl1IA;ExBwBI,mCPsNgC;EOrNhC,kCPqNgC;AHymIpC;;AkCzzIA;EAGE,kBAAc;EAAd,cAAc;EAGd,eAAe;EACf,gB/BsxByC;AHkiH3C;;AkCpzIA;EACE,sB/BgxBwC;AHuiH1C;;AkCpzIA;EACE,qBAA+B;EAC/B,gBAAgB;AlCuzIlB;;AkCpzIA;EACE,gBAAgB;AlCuzIlB;;AKl2IE;E6BgDE,qBAAqB;AlCszIzB;;AkCxzIA;EAMI,oB/B+vBuC;AHujH3C;;AkC9yIA;EACE,wB/BsvByC;E+BrvBzC,gBAAgB;EAEhB,qC/B3Da;E+B4Db,6C/B5Da;AH42If;;AkCrzIA;ExBnEI,0DwB2E8E;AlCizIlF;;AkCzzIA;EAaM,aAAa;AlCgzInB;;AkC3yIA;EACE,wB/BouByC;E+BnuBzC,qC/B3Ea;E+B4Eb,0C/B5Ea;AH03If;;AkCjzIA;ExBrFI,0DQ+H4D;AlB2wIhE;;AkCtyIA;EACE,uBAAiC;EACjC,uB/BmtBwC;E+BltBxC,sBAAgC;EAChC,gBAAgB;AlCyyIlB;;AkCtyIA;EACE,uBAAiC;EACjC,sBAAgC;AlCyyIlC;;AkCryIA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,gB/B8sByC;AH0lH3C;;AkCryIA;;;EAGE,oBAAc;EAAd,cAAc;EACd,WAAW;AlCwyIb;;AkCryIA;;ExBxHI,2CQsH4D;ERrH5D,4CQqH4D;AlB6yIhE;;AkCtyIA;;ExB/GI,+CQwG4D;ERvG5D,8CQuG4D;AlBmzIhE;;AkCpyIA;EAEI,mB/BurBsD;AH+mH1D;;Ac/3II;EoBuFJ;IAMI,oBAAa;IAAb,aAAa;IACb,uBAAmB;IAAnB,mBAAmB;IACnB,mB/BirBsD;I+BhrBtD,kB/BgrBsD;EHunHxD;EkChzIF;IAaM,gBAAY;IAAZ,YAAY;IACZ,kB/B2qBoD;I+B1qBpD,gBAAgB;IAChB,iB/ByqBoD;EH6nHxD;AACF;;AkC7xIA;EAII,mB/B2pBsD;AHkoH1D;;Acl5II;EoBiHJ;IAQI,oBAAa;IAAb,aAAa;IACb,uBAAmB;IAAnB,mBAAmB;ElC8xIrB;EkCvyIF;IAcM,gBAAY;IAAZ,YAAY;IACZ,gBAAgB;ElC4xIpB;EkC3yIF;IAkBQ,cAAc;IACd,cAAc;ElC4xIpB;EkC/yIF;IxBxJI,0BwBiLoC;IxBhLpC,6BwBgLoC;ElC0xItC;EkCnzIF;;IA8BY,0BAA0B;ElCyxIpC;EkCvzIF;;IAmCY,6BAA6B;ElCwxIvC;EkC3zIF;IxB1II,yBwBkLmC;IxBjLnC,4BwBiLmC;ElCuxIrC;EkC/zIF;;IA6CY,yBAAyB;ElCsxInC;EkCn0IF;;IAkDY,4BAA4B;ElCqxItC;AACF;;AkCzwIA;EAEI,sB/BglBsC;AH2rH1C;;Ac77II;EoBgLJ;IAMI,uB/B6lBiC;I+B7lBjC,oB/B6lBiC;I+B7lBjC,e/B6lBiC;I+B5lBjC,2B/B6lBuC;I+B7lBvC,wB/B6lBuC;I+B7lBvC,mB/B6lBuC;I+B5lBvC,UAAU;IACV,SAAS;ElC4wIX;EkCrxIF;IAYM,qBAAqB;IACrB,WAAW;ElC4wIf;AACF;;AkCnwIA;EAEI,gBAAgB;AlCqwIpB;;AkCvwIA;EAKM,gBAAgB;ExB5OlB,6BwB6OiC;ExB5OjC,4BwB4OiC;AlCuwIrC;;AkC7wIA;ExBrPI,yBwB+P8B;ExB9P9B,0BwB8P8B;AlCwwIlC;;AkClxIA;ExB9PI,gBwB4Q0B;EACxB,mB/BnC2B;AH2yIjC;;AmC1hJA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,qBhC+hCsC;EgC9hCtC,mBhCiiCsC;EgC/hCtC,gBAAgB;EAChB,yBhCEgB;EOJd,sBP6OgC;AHkzIpC;;AmCzhJA;EAGI,oBhCqhCqC;AHqgHzC;;AmC7hJA;EAMM,qBAAqB;EACrB,qBhCihCmC;EgChhCnC,chCNY;EgCOZ,YhCshCuC;AHqgH7C;;AmCpiJA;EAoBI,0BAA0B;AnCohJ9B;;AmCxiJA;EAwBI,qBAAqB;AnCohJzB;;AmC5iJA;EA4BI,chC1Bc;AH8iJlB;;AoC3jJA;EACE,oBAAa;EAAb,aAAa;E7BGb,eAAe;EACf,gBAAgB;EGAd,sBP6OgC;AHg1IpC;;AoC5jJA;EACE,kBAAkB;EAClB,cAAc;EACd,uBjCgxBwC;EiC/wBxC,iBjCqO+B;EiCpO/B,iBjCmxBsC;EiClxBtC,cjCwBe;EiCvBf,sBjCNa;EiCOb,yBjCJgB;AHmkJlB;;AoCvkJA;EAWI,UAAU;EACV,cjCkK8D;EiCjK9D,qBAAqB;EACrB,yBjCXc;EiCYd,qBjCXc;AH2kJlB;;AoC/kJA;EAmBI,UAAU;EACV,UjC4wBiC;EiC3wBjC,gDjCSa;AHujJjB;;AoC5jJA;EAGM,cAAc;E1BChB,+BP+MgC;EO9MhC,kCP8MgC;AH+2IpC;;AoClkJA;E1BVI,gCP6NgC;EO5NhC,mCP4NgC;AHo3IpC;;AoCvkJA;EAcI,UAAU;EACV,WjCvCW;EiCwCX,yBjCXa;EiCYb,qBjCZa;AHykJjB;;AoC9kJA;EAqBI,cjCvCc;EiCwCd,oBAAoB;EAEpB,YAAY;EACZ,sBjCjDW;EiCkDX,qBjC/Cc;AH2mJlB;;AqClnJE;EACE,uBlCyxBsC;EC9pBpC,kBAtCY;EiCnFd,gBlCsO6B;AH+4IjC;;AqChnJM;E3BwBF,8BPgN+B;EO/M/B,iCP+M+B;AH64InC;;AqChnJM;E3BKF,+BP8N+B;EO7N/B,kCP6N+B;AHk5InC;;AqCloJE;EACE,uBlCuxBqC;EC5pBnC,mBAtCY;EiCnFd,gBlCuO6B;AH85IjC;;AqChoJM;E3BwBF,8BPiN+B;EOhN/B,iCPgN+B;AH45InC;;AqChoJM;E3BKF,+BP+N+B;EO9N/B,kCP8N+B;AHi6InC;;AsChpJA;EACE,qBAAqB;EACrB,qBnCw5BsC;ECv1BpC,cAAW;EkC/Db,gBnC2R+B;EmC1R/B,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;E5BRtB,sBP6OgC;EiB5O9B,qIjB6b6I;AH+tInJ;;AoBvpJI;EkBNJ;IlBOM,gBAAgB;EpB2pJpB;AACF;;AKxpJE;EiCGI,qBAAqB;AtCypJ3B;;AsCvqJA;EAoBI,aAAa;AtCupJjB;;AsClpJA;EACE,kBAAkB;EAClB,SAAS;AtCqpJX;;AsC9oJA;EACE,oBnC63BsC;EmC53BtC,mBnC43BsC;EOh6BpC,oBPm6BqC;AHmxHzC;;AsCzoJE;ECjDA,WpCMa;EoCLb,yBpCkCe;AH4pJjB;;AKhrJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC8rJxC;;AuCjsJU;EAQJ,UAAU;EACV,+CpCuBW;AHsqJjB;;AsCxpJE;ECjDA,WpCMa;EoCLb,yBpCWgB;AHksJlB;;AK/rJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC6sJxC;;AuChtJU;EAQJ,UAAU;EACV,iDpCAY;AH4sJlB;;AsCvqJE;ECjDA,WpCMa;EoCLb,yBpCyCe;AHmrJjB;;AK9sJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC4tJxC;;AuC/tJU;EAQJ,UAAU;EACV,+CpC8BW;AH6rJjB;;AsCtrJE;ECjDA,WpCMa;EoCLb,yBpC2Ce;AHgsJjB;;AK7tJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC2uJxC;;AuC9uJU;EAQJ,UAAU;EACV,gDpCgCW;AH0sJjB;;AsCrsJE;ECjDA,cpCegB;EoCdhB,yBpCwCe;AHktJjB;;AK5uJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC0vJxC;;AuC7vJU;EAQJ,UAAU;EACV,+CpC6BW;AH4tJjB;;AsCptJE;ECjDA,WpCMa;EoCLb,yBpCsCe;AHmuJjB;;AK3vJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCywJxC;;AuC5wJU;EAQJ,UAAU;EACV,+CpC2BW;AH6uJjB;;AsCnuJE;ECjDA,cpCegB;EoCdhB,yBpCMgB;AHkxJlB;;AK1wJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvCwxJxC;;AuC3xJU;EAQJ,UAAU;EACV,iDpCLY;AH4xJlB;;AsClvJE;ECjDA,WpCMa;EoCLb,yBpCagB;AH0xJlB;;AKzxJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCuyJxC;;AuC1yJU;EAQJ,UAAU;EACV,8CpCEY;AHoyJlB;;AwCnzJA;EACE,kBAAoD;EACpD,mBrCqzBsC;EqCnzBtC,yBrCKgB;EOJd,qBP8O+B;AHukJnC;;Ac9vJI;E0B5DJ;IAQI,kBrC+yBoC;EHwgItC;AACF;;AwCpzJA;EACE,gBAAgB;EAChB,eAAe;E9BTb,gB8BUsB;AxCuzJ1B;;AyCl0JA;EACE,kBAAkB;EAClB,wBtCq9ByC;EsCp9BzC,mBtCq9BsC;EsCp9BtC,6BAA6C;E/BH3C,sBP6OgC;AH4lJpC;;AyCj0JA;EAEE,cAAc;AzCm0JhB;;AyC/zJA;EACE,gBtCgR+B;AHkjJjC;;AyC1zJA;EACE,mBAAsD;AzC6zJxD;;AyC9zJA;EAKI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,wBtCu7BuC;EsCt7BvC,cAAc;AzC6zJlB;;AyCnzJE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBywJlE;;A0Cn2JE;EACE,yBAAqC;A1Cs2JzC;;A0Cn2JE;EACE,cAA0B;A1Cs2J9B;;AyCj0JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBuxJlE;;A0Cj3JE;EACE,yBAAqC;A1Co3JzC;;A0Cj3JE;EACE,cAA0B;A1Co3J9B;;AyC/0JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBqyJlE;;A0C/3JE;EACE,yBAAqC;A1Ck4JzC;;A0C/3JE;EACE,cAA0B;A1Ck4J9B;;AyC71JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBmzJlE;;A0C74JE;EACE,yBAAqC;A1Cg5JzC;;A0C74JE;EACE,cAA0B;A1Cg5J9B;;AyC32JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBi0JlE;;A0C35JE;EACE,yBAAqC;A1C85JzC;;A0C35JE;EACE,cAA0B;A1C85J9B;;AyCz3JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlB+0JlE;;A0Cz6JE;EACE,yBAAqC;A1C46JzC;;A0Cz6JE;EACE,cAA0B;A1C46J9B;;AyCv4JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlB61JlE;;A0Cv7JE;EACE,yBAAqC;A1C07JzC;;A0Cv7JE;EACE,cAA0B;A1C07J9B;;AyCr5JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlB22JlE;;A0Cr8JE;EACE,yBAAqC;A1Cw8JzC;;A0Cr8JE;EACE,cAA0B;A1Cw8J9B;;A2Ch9JE;EACE;IAAO,2BAAuC;E3Co9JhD;E2Cn9JE;IAAK,wBAAwB;E3Cs9J/B;AACF;;A2Cz9JE;EACE;IAAO,2BAAuC;E3Co9JhD;E2Cn9JE;IAAK,wBAAwB;E3Cs9J/B;AACF;;A2Cn9JA;EACE,oBAAa;EAAb,aAAa;EACb,YxC89BsC;EwC79BtC,gBAAgB;EvCoHZ,kBAtCY;EuC5EhB,yBxCJgB;EOJd,sBP6OgC;AHkvJpC;;A2Cl9JA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,gBAAgB;EAChB,WxChBa;EwCiBb,kBAAkB;EAClB,mBAAmB;EACnB,yBxCUe;EiB9BX,2BjB0+B4C;AHggIlD;;AoBr+JI;EuBOJ;IvBNM,gBAAgB;EpBy+JpB;AACF;;A2Cx9JA;ErBaE,qMAA6I;EqBX7I,0BxCw8BsC;AHmhIxC;;A2Cv9JE;EACE,0DxC08BkD;EwC18BlD,kDxC08BkD;AHghItD;;A2Cv9JM;EAJJ;IAKM,uBAAe;IAAf,eAAe;E3C29JrB;AACF;;A4CrgKA;EACE,oBAAa;EAAb,aAAa;EACb,qBAAuB;EAAvB,uBAAuB;A5CwgKzB;;A4CrgKA;EACE,WAAO;EAAP,OAAO;A5CwgKT;;A6C1gKA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EAGtB,eAAe;EACf,gBAAgB;A7C2gKlB;;A6ClgKA;EACE,WAAW;EACX,c1CPgB;E0CQhB,mBAAmB;A7CqgKrB;;AK3gKE;EwCUE,UAAU;EACV,c1Cbc;E0Ccd,qBAAqB;EACrB,yB1CrBc;AH0hKlB;;A6C/gKA;EAcI,c1CjBc;E0CkBd,yB1CzBc;AH8hKlB;;A6C5/JA;EACE,kBAAkB;EAClB,cAAc;EACd,wB1C88ByC;E0C58BzC,sB1CzCa;E0C0Cb,sC1ChCa;AH8hKf;;A6CpgKA;EnC7BI,+BPoOgC;EOnOhC,gCPmOgC;AHk0JpC;;A6CzgKA;EnCfI,mCPsNgC;EOrNhC,kCPqNgC;AHu0JpC;;A6C9gKA;EAkBI,c1ChDc;E0CiDd,oBAAoB;EACpB,sB1CxDW;AHwjKf;;A6CphKA;EAyBI,UAAU;EACV,W1C9DW;E0C+DX,yB1ClCa;E0CmCb,qB1CnCa;AHkiKjB;;A6C3hKA;EAgCI,mBAAmB;A7C+/JvB;;A6C/hKA;EAmCM,gB1CiK2B;E0ChK3B,qB1CgK2B;AHg2JjC;;A6Cl/JI;EACE,uBAAmB;EAAnB,mBAAmB;A7Cq/JzB;;A6Ct/JI;EnCjCA,kCPsLgC;EOlMhC,0BmCmDwC;A7Cq/J5C;;A6C3/JI;EnC7CA,gCPkMgC;EOtLhC,4BmC4C0C;A7Cq/J9C;;A6ChgKI;EAeM,aAAa;A7Cq/JvB;;A6CpgKI;EAmBM,qB1C+HuB;E0C9HvB,oBAAoB;A7Cq/J9B;;A6CzgKI;EAuBQ,iB1C2HqB;E0C1HrB,sB1C0HqB;AH43JjC;;Ac/iKI;E+BiCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CkhKvB;E6CnhKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7CihK1C;E6CvhKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7CghK5C;E6C3hKE;IAeM,aAAa;E7C+gKrB;E6C9hKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7C8gK5B;E6CliKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EHo5J/B;AACF;;AcxkKI;E+BiCA;IACE,uBAAmB;IAAnB,mBAAmB;E7C2iKvB;E6C5iKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7C0iK1C;E6ChjKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7CyiK5C;E6CpjKE;IAeM,aAAa;E7CwiKrB;E6CvjKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7CuiK5B;E6C3jKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EH66J/B;AACF;;AcjmKI;E+BiCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CokKvB;E6CrkKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7CmkK1C;E6CzkKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7CkkK5C;E6C7kKE;IAeM,aAAa;E7CikKrB;E6ChlKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7CgkK5B;E6CplKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EHs8J/B;AACF;;Ac1nKI;E+BiCA;IACE,uBAAmB;IAAnB,mBAAmB;E7C6lKvB;E6C9lKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7C4lK1C;E6ClmKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7C2lK5C;E6CtmKE;IAeM,aAAa;E7C0lKrB;E6CzmKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7CylK5B;E6C7mKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EH+9J/B;AACF;;A6C5kKA;EAEI,qBAAqB;EACrB,oBAAoB;EnCjIpB,gBmCkIwB;A7C8kK5B;;A6CllKA;EAOM,mBAAmB;A7C+kKzB;;A6CtlKA;EAaM,sBAAsB;A7C6kK5B;;A8C1tKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmoKlE;;AKltKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6tKjD;;A8CpuKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8oKlE;;A8C1uKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmpKlE;;AKluKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6uKjD;;A8CpvKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8pKlE;;A8C1vKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmqKlE;;AKlvKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6vKjD;;A8CpwKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8qKlE;;A8C1wKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmrKlE;;AKlwKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6wKjD;;A8CpxKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8rKlE;;A8C1xKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmsKlE;;AKlxKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6xKjD;;A8CpyKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8sKlE;;A8C1yKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmtKlE;;AKlyKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6yKjD;;A8CpzKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8tKlE;;A8C1zKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmuKlE;;AKlzKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6zKjD;;A8Cp0KE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8uKlE;;A8C10KE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmvKlE;;AKl0KE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C60KjD;;A8Cp1KE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8vKlE;;A+C71KA;EACE,YAAY;E3C8HR,iBAtCY;E2CtFhB,gB5CiS+B;E4ChS/B,cAAc;EACd,W5CYa;E4CXb,yB5CCa;E4CAb,WAAW;A/Cg2Kb;;AK31KE;E0CDE,W5CMW;E4CLX,qBAAqB;A/Cg2KzB;;AK51KE;E0CCI,YAAY;A/C+1KlB;;A+Cp1KA;EACE,UAAU;EACV,6BAA6B;EAC7B,SAAS;EACT,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/Cu1KlB;;A+Cj1KA;EACE,oBAAoB;A/Co1KtB;;AgD33KA;EACE,gB7Cy4BuC;E6Cx4BvC,gBAAgB;E5C6HZ,mBAtCY;E4CpFhB,2C7CEa;E6CDb,4BAA4B;EAC5B,oC7C04BmD;E6Cz4BnD,gD7CSa;E6CRb,mCAA2B;EAA3B,2BAA2B;EAC3B,UAAU;EtCLR,sBP64BsC;AHs/I1C;;AgDx4KA;EAcI,sB7C63BsC;AHigJ1C;;AgD54KA;EAkBI,UAAU;AhD83Kd;;AgDh5KA;EAsBI,cAAc;EACd,UAAU;AhD83Kd;;AgDr5KA;EA2BI,aAAa;AhD83KjB;;AgD13KA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,wB7Cy2BwC;E6Cx2BxC,c7CtBgB;E6CuBhB,2C7C7Ba;E6C8Bb,4BAA4B;EAC5B,4C7Ci3BoD;AH4gJtD;;AgD13KA;EACE,gB7Ci2BwC;AH4hJ1C;;AiDj6KA;EAEE,gBAAgB;AjDm6KlB;;AiDr6KA;EAKI,kBAAkB;EAClB,gBAAgB;AjDo6KpB;;AiD/5KA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,a9C+pBsC;E8C9pBtC,aAAa;EACb,WAAW;EACX,YAAY;EACZ,gBAAgB;EAGhB,UAAU;AjDg6KZ;;AiDz5KA;EACE,kBAAkB;EAClB,WAAW;EACX,c9C64BuC;E8C34BvC,oBAAoB;AjD25KtB;;AiDx5KE;E7BrCI,2CjB48BoD;EiB58BpD,mCjB48BoD;EiB58BpD,oEjB48BoD;E8Cr6BtD,sC9Cm6BmD;E8Cn6BnD,8B9Cm6BmD;AHw/IvD;;AoB77KI;E6BgCF;I7B/BI,gBAAgB;EpBi8KpB;AACF;;AiD/5KE;EACE,uB9Ci6BoC;E8Cj6BpC,e9Ci6BoC;AHigJxC;;AiD95KE;EACE,8B9C85B2C;E8C95B3C,sB9C85B2C;AHmgJ/C;;AiD75KA;EACE,oBAAa;EAAb,aAAa;EACb,6B/ByE8D;AlBu1KhE;;AiDl6KA;EAKI,8B/BsE4D;E+BrE5D,gBAAgB;AjDi6KpB;;AiDv6KA;;EAWI,oBAAc;EAAd,cAAc;AjDi6KlB;;AiD56KA;EAeI,gBAAgB;AjDi6KpB;;AiD75KA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,6B/BqD8D;AlB22KhE;;AiDn6KA;EAOI,cAAc;EACd,0B/BgD4D;E+B/C5D,WAAW;AjDg6Kf;;AiDz6KA;EAcI,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,YAAY;AjD+5KhB;;AiD/6KA;EAmBM,gBAAgB;AjDg6KtB;;AiDn7KA;EAuBM,aAAa;AjDg6KnB;;AiD15KA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,WAAW;EAGX,oBAAoB;EACpB,sB9C1Ga;E8C2Gb,4BAA4B;EAC5B,oC9ClGa;EOZX,qBP8O+B;E8C5HjC,UAAU;AjDy5KZ;;AiDr5KA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,a9CojBsC;E8CnjBtC,YAAY;EACZ,aAAa;EACb,sB9CjHa;AHygLf;;AiD/5KA;EAUW,UAAU;AjDy5KrB;;AiDn6KA;EAWW,Y9C4zB2B;AHgmJtC;;AiDv5KA;EACE,oBAAa;EAAb,aAAa;EACb,qBAAuB;EAAvB,uBAAuB;EACvB,sBAA8B;EAA9B,8BAA8B;EAC9B,kB9CyzBsC;E8CxzBtC,gC9CtIgB;EOId,0CQsH4D;ERrH5D,2CQqH4D;AlBw6KhE;;AiDj6KA;EASI,kB9CozBoC;E8ClzBpC,8BAA6F;AjD25KjG;;AiDt5KA;EACE,gBAAgB;EAChB,gB9C2I+B;AH8wKjC;;AiDp5KA;EACE,kBAAkB;EAGlB,kBAAc;EAAd,cAAc;EACd,a9CuwBsC;AH8oJxC;;AiDj5KA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,sBAAmB;EAAnB,mBAAmB;EACnB,kBAAyB;EAAzB,yBAAyB;EACzB,gBAAgE;EAChE,6B9CvKgB;EOkBd,8CQwG4D;ERvG5D,6CQuG4D;AlBm8KhE;;AiD55KA;EAcI,eAAwC;AjDk5K5C;;AiD74KA;EACE,kBAAkB;EAClB,YAAY;EACZ,WAAW;EACX,YAAY;EACZ,gBAAgB;AjDg5KlB;;AcvhLI;EmCzBJ;IAuKI,gB9CmwBqC;I8ClwBrC,oBAAyC;EjD84K3C;EiDhiLF;IAsJI,+B/B3E4D;ElBw9K9D;EiDniLF;IAyJM,gC/B9E0D;ElB29K9D;EiDnhLF;IA2II,+B/BnF4D;ElB89K9D;EiDthLF;IA8IM,4B/BtF0D;ElBi+K9D;EiDn4KA;IAAY,gB9C4uB2B;EH0pJvC;AACF;;Ac7iLI;EmC0KF;;IAEE,gB9CouBqC;EHmqJvC;AACF;;AcpjLI;EmCiLF;IAAY,iB9C8tB4B;EH0qJxC;AACF;;AkDrnLA;EACE,kBAAkB;EAClB,a/CmrBsC;E+ClrBtC,cAAc;EACd,S/Cy1BmC;EgD71BnC,kMhDuRiN;EgDrRjN,kBAAkB;EAClB,gBhD+R+B;EgD9R/B,gBhDmS+B;EgDlS/B,gBAAgB;EAChB,iBAAiB;EACjB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB;EACpB,sBAAsB;EACtB,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,gBAAgB;E/CgHZ,mBAtCY;E8C9EhB,qBAAqB;EACrB,UAAU;AlDkoLZ;;AkD7oLA;EAaW,Y/C60B2B;AHuzJtC;;AkDjpLA;EAgBI,kBAAkB;EAClB,cAAc;EACd,a/C60BqC;E+C50BrC,c/C60BqC;AHwzJzC;;AkDxpLA;EAsBM,kBAAkB;EAClB,WAAW;EACX,yBAAyB;EACzB,mBAAmB;AlDsoLzB;;AkDjoLA;EACE,iBAAgC;AlDooLlC;;AkDroLA;EAII,SAAS;AlDqoLb;;AkDzoLA;EAOM,MAAM;EACN,6BAAgE;EAChE,sB/CvBS;AH6pLf;;AkDjoLA;EACE,iB/CmzBuC;AHi1JzC;;AkDroLA;EAII,OAAO;EACP,a/C+yBqC;E+C9yBrC,c/C6yBqC;AHw1JzC;;AkD3oLA;EASM,QAAQ;EACR,oCAA2F;EAC3F,wB/CvCS;AH6qLf;;AkDjoLA;EACE,iBAAgC;AlDooLlC;;AkDroLA;EAII,MAAM;AlDqoLV;;AkDzoLA;EAOM,SAAS;EACT,6B/C4xBmC;E+C3xBnC,yB/CrDS;AH2rLf;;AkDjoLA;EACE,iB/CqxBuC;AH+2JzC;;AkDroLA;EAII,QAAQ;EACR,a/CixBqC;E+ChxBrC,c/C+wBqC;AHs3JzC;;AkD3oLA;EASM,OAAO;EACP,oC/C4wBmC;E+C3wBnC,uB/CrES;AH2sLf;;AkDjnLA;EACE,gB/C2uBuC;E+C1uBvC,uB/CgvBuC;E+C/uBvC,W/CvGa;E+CwGb,kBAAkB;EAClB,sB/C/Fa;EOZX,sBP6OgC;AHm/KpC;;AoDruLA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,ajDirBsC;EiDhrBtC,cAAc;EACd,gBjD22BuC;EgDh3BvC,kMhDuRiN;EgDrRjN,kBAAkB;EAClB,gBhD+R+B;EgD9R/B,gBhDmS+B;EgDlS/B,gBAAgB;EAChB,iBAAiB;EACjB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB;EACpB,sBAAsB;EACtB,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,gBAAgB;E/CgHZ,mBAtCY;EgD7EhB,qBAAqB;EACrB,sBjDNa;EiDOb,4BAA4B;EAC5B,oCjDEa;EOZX,qBP8O+B;AH+gLnC;;AoDlwLA;EAoBI,kBAAkB;EAClB,cAAc;EACd,WjD22BoC;EiD12BpC,cjD22BqC;EiD12BrC,gBjD2N+B;AHuhLnC;;AoD1wLA;EA4BM,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,yBAAyB;EACzB,mBAAmB;ApDkvLzB;;AoD7uLA;EACE,qBjD41BuC;AHo5JzC;;AoDjvLA;EAII,2BlC2F4D;AlBspLhE;;AoDrvLA;EAOM,SAAS;EACT,6BAAgE;EAChE,qCjDu1BiE;AH25JvE;;AoD3vLA;EAaM,WjD6L2B;EiD5L3B,6BAAgE;EAChE,sBjD7CS;AH+xLf;;AoD7uLA;EACE,mBjDw0BuC;AHw6JzC;;AoDjvLA;EAII,yBlCuE4D;EkCtE5D,ajDo0BqC;EiDn0BrC,YjDk0BoC;EiDj0BpC,gBAAgC;ApDivLpC;;AoDxvLA;EAUM,OAAO;EACP,oCAA2F;EAC3F,uCjDg0BiE;AHk7JvE;;AoD9vLA;EAgBM,SjDsK2B;EiDrK3B,oCAA2F;EAC3F,wBjDpES;AHszLf;;AoD7uLA;EACE,kBjDizBuC;AH+7JzC;;AoDjvLA;EAII,wBlCgD4D;AlBisLhE;;AoDrvLA;EAOM,MAAM;EACN,oCAA2F;EAC3F,wCjD4yBiE;AHs8JvE;;AoD3vLA;EAaM,QjDkJ2B;EiDjJ3B,oCAA2F;EAC3F,yBjDxFS;AH00Lf;;AoDjwLA;EAqBI,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,cAAc;EACd,WjDwxBoC;EiDvxBpC,oBAAsC;EACtC,WAAW;EACX,gCjD4wBuD;AHo+J3D;;AoD5uLA;EACE,oBjDixBuC;AH89JzC;;AoDhvLA;EAII,0BlCgB4D;EkCf5D,ajD6wBqC;EiD5wBrC,YjD2wBoC;EiD1wBpC,gBAAgC;ApDgvLpC;;AoDvvLA;EAUM,QAAQ;EACR,oCjDuwBmC;EiDtwBnC,sCjDywBiE;AHw+JvE;;AoD7vLA;EAgBM,UjD+G2B;EiD9G3B,oCjDiwBmC;EiDhwBnC,uBjD3HS;AH42Lf;;AoD3tLA;EACE,uBjDkuBwC;EiDjuBxC,gBAAgB;EhD3BZ,eAtCY;EgDoEhB,yBjD2tByD;EiD1tBzD,gCAAyE;E1ChJvE,0CQsH4D;ERrH5D,2CQqH4D;AlByvLhE;;AoDruLA;EAUI,aAAa;ApD+tLjB;;AoD3tLA;EACE,uBjDotBwC;EiDntBxC,cjDxJgB;AHs3LlB;;AqDz3LA;EACE,kBAAkB;ArD43LpB;;AqDz3LA;EACE,uBAAmB;EAAnB,mBAAmB;ArD43LrB;;AqDz3LA;EACE,kBAAkB;EAClB,WAAW;EACX,gBAAgB;ArD43LlB;;AsDn5LE;EACE,cAAc;EACd,WAAW;EACX,WAAW;AtDs5Lf;;AqD93LA;EACE,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,mCAA2B;EAA3B,2BAA2B;EjC5BvB,8CjBikCkF;EiBjkClF,sCjBikCkF;EiBjkClF,0EjBikCkF;AH61JxF;;AoBz5LI;EiCiBJ;IjChBM,gBAAgB;EpB65LpB;AACF;;AqDp4LA;;;EAGE,cAAc;ArDu4LhB;;AqDp4LA;;EAEE,mCAA2B;EAA3B,2BAA2B;ArDu4L7B;;AqDp4LA;;EAEE,oCAA4B;EAA5B,4BAA4B;ArDu4L9B;;AqD/3LA;EAEI,UAAU;EACV,4BAA4B;EAC5B,uBAAe;EAAf,eAAe;ArDi4LnB;;AqDr4LA;;;EAUI,UAAU;EACV,UAAU;ArDi4Ld;;AqD54LA;;EAgBI,UAAU;EACV,UAAU;EjCtER,2BjBgkCkC;AHw4JxC;;AoBn8LI;EiCgDJ;;I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;AvEy5OhD;;AuEx6OQ;EAAgC,yBAA4B;AvE46OpE;;AuE36OQ;;EAEE,6BAAoC;AvE86O9C;;AuE56OQ;;EAEE,+BAAwC;AvE+6OlD;;AuE76OQ;;EAEE,gCAA0C;AvEg7OpD;;AuE96OQ;;EAEE,8BAAsC;AvEi7OhD;;AuEh8OQ;EAAgC,uBAA4B;AvEo8OpE;;AuEn8OQ;;EAEE,2BAAoC;AvEs8O9C;;AuEp8OQ;;EAEE,6BAAwC;AvEu8OlD;;AuEr8OQ;;EAEE,8BAA0C;AvEw8OpD;;AuEt8OQ;;EAEE,4BAAsC;AvEy8OhD;;AuEx9OQ;EAAgC,qBAA4B;AvE49OpE;;AuE39OQ;;EAEE,yBAAoC;AvE89O9C;;AuE59OQ;;EAEE,2BAAwC;AvE+9OlD;;AuE79OQ;;EAEE,4BAA0C;AvEg+OpD;;AuE99OQ;;EAEE,0BAAsC;AvEi+OhD;;AuEh/OQ;EAAgC,2BAA4B;AvEo/OpE;;AuEn/OQ;;EAEE,+BAAoC;AvEs/O9C;;AuEp/OQ;;EAEE,iCAAwC;AvEu/OlD;;AuEr/OQ;;EAEE,kCAA0C;AvEw/OpD;;AuEt/OQ;;EAEE,gCAAsC;AvEy/OhD;;AuExgPQ;EAAgC,0BAA4B;AvE4gPpE;;AuE3gPQ;;EAEE,8BAAoC;AvE8gP9C;;AuE5gPQ;;EAEE,gCAAwC;AvE+gPlD;;AuE7gPQ;;EAEE,iCAA0C;AvEghPpD;;AuE9gPQ;;EAEE,+BAAsC;AvEihPhD;;AuEhiPQ;EAAgC,wBAA4B;AvEoiPpE;;AuEniPQ;;EAEE,4BAAoC;AvEsiP9C;;AuEpiPQ;;EAEE,8BAAwC;AvEuiPlD;;AuEriPQ;;EAEE,+BAA0C;AvEwiPpD;;AuEtiPQ;;EAEE,6BAAsC;AvEyiPhD;;AuExjPQ;EAAgC,0BAA4B;AvE4jPpE;;AuE3jPQ;;EAEE,8BAAoC;AvE8jP9C;;AuE5jPQ;;EAEE,gCAAwC;AvE+jPlD;;AuE7jPQ;;EAEE,iCAA0C;AvEgkPpD;;AuE9jPQ;;EAEE,+BAAsC;AvEikPhD;;AuEhlPQ;EAAgC,wBAA4B;AvEolPpE;;AuEnlPQ;;EAEE,4BAAoC;AvEslP9C;;AuEplPQ;;EAEE,8BAAwC;AvEulPlD;;AuErlPQ;;EAEE,+BAA0C;AvEwlPpD;;AuEtlPQ;;EAEE,6BAAsC;AvEylPhD;;AuEjlPQ;EAAwB,2BAA2B;AvEqlP3D;;AuEplPQ;;EAEE,+BAA+B;AvEulPzC;;AuErlPQ;;EAEE,iCAAiC;AvEwlP3C;;AuEtlPQ;;EAEE,kCAAkC;AvEylP5C;;AuEvlPQ;;EAEE,gCAAgC;AvE0lP1C;;AuEzmPQ;EAAwB,0BAA2B;AvE6mP3D;;AuE5mPQ;;EAEE,8BAA+B;AvE+mPzC;;AuE7mPQ;;EAEE,gCAAiC;AvEgnP3C;;AuE9mPQ;;EAEE,iCAAkC;AvEinP5C;;AuE/mPQ;;EAEE,+BAAgC;AvEknP1C;;AuEjoPQ;EAAwB,wBAA2B;AvEqoP3D;;AuEpoPQ;;EAEE,4BAA+B;AvEuoPzC;;AuEroPQ;;EAEE,8BAAiC;AvEwoP3C;;AuEtoPQ;;EAEE,+BAAkC;AvEyoP5C;;AuEvoPQ;;EAEE,6BAAgC;AvE0oP1C;;AuEzpPQ;EAAwB,0BAA2B;AvE6pP3D;;AuE5pPQ;;EAEE,8BAA+B;AvE+pPzC;;AuE7pPQ;;EAEE,gCAAiC;AvEgqP3C;;AuE9pPQ;;EAEE,iCAAkC;AvEiqP5C;;AuE/pPQ;;EAEE,+BAAgC;AvEkqP1C;;AuEjrPQ;EAAwB,wBAA2B;AvEqrP3D;;AuEprPQ;;EAEE,4BAA+B;AvEurPzC;;AuErrPQ;;EAEE,8BAAiC;AvEwrP3C;;AuEtrPQ;;EAEE,+BAAkC;AvEyrP5C;;AuEvrPQ;;EAEE,6BAAgC;AvE0rP1C;;AuEprPI;EAAmB,uBAAuB;AvEwrP9C;;AuEvrPI;;EAEE,2BAA2B;AvE0rPjC;;AuExrPI;;EAEE,6BAA6B;AvE2rPnC;;AuEzrPI;;EAEE,8BAA8B;AvE4rPpC;;AuE1rPI;;EAEE,4BAA4B;AvE6rPlC;;ActsPI;EyDlDI;IAAgC,oBAA4B;EvE6vPlE;EuE5vPM;;IAEE,wBAAoC;EvE8vP5C;EuE5vPM;;IAEE,0BAAwC;EvE8vPhD;EuE5vPM;;IAEE,2BAA0C;EvE8vPlD;EuE5vPM;;IAEE,yBAAsC;EvE8vP9C;EuE7wPM;IAAgC,0BAA4B;EvEgxPlE;EuE/wPM;;IAEE,8BAAoC;EvEixP5C;EuE/wPM;;IAEE,gCAAwC;EvEixPhD;EuE/wPM;;IAEE,iCAA0C;EvEixPlD;EuE/wPM;;IAEE,+BAAsC;EvEixP9C;EuEhyPM;IAAgC,yBAA4B;EvEmyPlE;EuElyPM;;IAEE,6BAAoC;EvEoyP5C;EuElyPM;;IAEE,+BAAwC;EvEoyPhD;EuElyPM;;IAEE,gCAA0C;EvEoyPlD;EuElyPM;;IAEE,8BAAsC;EvEoyP9C;EuEnzPM;IAAgC,uBAA4B;EvEszPlE;EuErzPM;;IAEE,2BAAoC;EvEuzP5C;EuErzPM;;IAEE,6BAAwC;EvEuzPhD;EuErzPM;;IAEE,8BAA0C;EvEuzPlD;EuErzPM;;IAEE,4BAAsC;EvEuzP9C;EuEt0PM;IAAgC,yBAA4B;EvEy0PlE;EuEx0PM;;IAEE,6BAAoC;EvE00P5C;EuEx0PM;;IAEE,+BAAwC;EvE00PhD;EuEx0PM;;IAEE,gCAA0C;EvE00PlD;EuEx0PM;;IAEE,8BAAsC;EvE00P9C;EuEz1PM;IAAgC,uBAA4B;EvE41PlE;EuE31PM;;IAEE,2BAAoC;EvE61P5C;EuE31PM;;IAEE,6BAAwC;EvE61PhD;EuE31PM;;IAEE,8BAA0C;EvE61PlD;EuE31PM;;IAEE,4BAAsC;EvE61P9C;EuE52PM;IAAgC,qBAA4B;EvE+2PlE;EuE92PM;;IAEE,yBAAoC;EvEg3P5C;EuE92PM;;IAEE,2BAAwC;EvEg3PhD;EuE92PM;;IAEE,4BAA0C;EvEg3PlD;EuE92PM;;IAEE,0BAAsC;EvEg3P9C;EuE/3PM;IAAgC,2BAA4B;EvEk4PlE;EuEj4PM;;IAEE,+BAAoC;EvEm4P5C;EuEj4PM;;IAEE,iCAAwC;EvEm4PhD;EuEj4PM;;IAEE,kCAA0C;EvEm4PlD;EuEj4PM;;IAEE,gCAAsC;EvEm4P9C;EuEl5PM;IAAgC,0BAA4B;EvEq5PlE;EuEp5PM;;IAEE,8BAAoC;EvEs5P5C;EuEp5PM;;IAEE,gCAAwC;EvEs5PhD;EuEp5PM;;IAEE,iCAA0C;EvEs5PlD;EuEp5PM;;IAEE,+BAAsC;EvEs5P9C;EuEr6PM;IAAgC,wBAA4B;EvEw6PlE;EuEv6PM;;IAEE,4BAAoC;EvEy6P5C;EuEv6PM;;IAEE,8BAAwC;EvEy6PhD;EuEv6PM;;IAEE,+BAA0C;EvEy6PlD;EuEv6PM;;IAEE,6BAAsC;EvEy6P9C;EuEx7PM;IAAgC,0BAA4B;EvE27PlE;EuE17PM;;IAEE,8BAAoC;EvE47P5C;EuE17PM;;IAEE,gCAAwC;EvE47PhD;EuE17PM;;IAEE,iCAA0C;EvE47PlD;EuE17PM;;IAEE,+BAAsC;EvE47P9C;EuE38PM;IAAgC,wBAA4B;EvE88PlE;EuE78PM;;IAEE,4BAAoC;EvE+8P5C;EuE78PM;;IAEE,8BAAwC;EvE+8PhD;EuE78PM;;IAEE,+BAA0C;EvE+8PlD;EuE78PM;;IAEE,6BAAsC;EvE+8P9C;EuEv8PM;IAAwB,2BAA2B;EvE08PzD;EuEz8PM;;IAEE,+BAA+B;EvE28PvC;EuEz8PM;;IAEE,iCAAiC;EvE28PzC;EuEz8PM;;IAEE,kCAAkC;EvE28P1C;EuEz8PM;;IAEE,gCAAgC;EvE28PxC;EuE19PM;IAAwB,0BAA2B;EvE69PzD;EuE59PM;;IAEE,8BAA+B;EvE89PvC;EuE59PM;;IAEE,gCAAiC;EvE89PzC;EuE59PM;;IAEE,iCAAkC;EvE89P1C;EuE59PM;;IAEE,+BAAgC;EvE89PxC;EuE7+PM;IAAwB,wBAA2B;EvEg/PzD;EuE/+PM;;IAEE,4BAA+B;EvEi/PvC;EuE/+PM;;IAEE,8BAAiC;EvEi/PzC;EuE/+PM;;IAEE,+BAAkC;EvEi/P1C;EuE/+PM;;IAEE,6BAAgC;EvEi/PxC;EuEhgQM;IAAwB,0BAA2B;EvEmgQzD;EuElgQM;;IAEE,8BAA+B;EvEogQvC;EuElgQM;;IAEE,gCAAiC;EvEogQzC;EuElgQM;;IAEE,iCAAkC;EvEogQ1C;EuElgQM;;IAEE,+BAAgC;EvEogQxC;EuEnhQM;IAAwB,wBAA2B;EvEshQzD;EuErhQM;;IAEE,4BAA+B;EvEuhQvC;EuErhQM;;IAEE,8BAAiC;EvEuhQzC;EuErhQM;;IAEE,+BAAkC;EvEuhQ1C;EuErhQM;;IAEE,6BAAgC;EvEuhQxC;EuEjhQE;IAAmB,uBAAuB;EvEohQ5C;EuEnhQE;;IAEE,2BAA2B;EvEqhQ/B;EuEnhQE;;IAEE,6BAA6B;EvEqhQjC;EuEnhQE;;IAEE,8BAA8B;EvEqhQlC;EuEnhQE;;IAEE,4BAA4B;EvEqhQhC;AACF;;Ac/hQI;EyDlDI;IAAgC,oBAA4B;EvEslQlE;EuErlQM;;IAEE,wBAAoC;EvEulQ5C;EuErlQM;;IAEE,0BAAwC;EvEulQhD;EuErlQM;;IAEE,2BAA0C;EvEulQlD;EuErlQM;;IAEE,yBAAsC;EvEulQ9C;EuEtmQM;IAAgC,0BAA4B;EvEymQlE;EuExmQM;;IAEE,8BAAoC;EvE0mQ5C;EuExmQM;;IAEE,gCAAwC;EvE0mQhD;EuExmQM;;IAEE,iCAA0C;EvE0mQlD;EuExmQM;;IAEE,+BAAsC;EvE0mQ9C;EuEznQM;IAAgC,yBAA4B;EvE4nQlE;EuE3nQM;;IAEE,6BAAoC;EvE6nQ5C;EuE3nQM;;IAEE,+BAAwC;EvE6nQhD;EuE3nQM;;IAEE,gCAA0C;EvE6nQlD;EuE3nQM;;IAEE,8BAAsC;EvE6nQ9C;EuE5oQM;IAAgC,uBAA4B;EvE+oQlE;EuE9oQM;;IAEE,2BAAoC;EvEgpQ5C;EuE9oQM;;IAEE,6BAAwC;EvEgpQhD;EuE9oQM;;IAEE,8BAA0C;EvEgpQlD;EuE9oQM;;IAEE,4BAAsC;EvEgpQ9C;EuE/pQM;IAAgC,yBAA4B;EvEkqQlE;EuEjqQM;;IAEE,6BAAoC;EvEmqQ5C;EuEjqQM;;IAEE,+BAAwC;EvEmqQhD;EuEjqQM;;IAEE,gCAA0C;EvEmqQlD;EuEjqQM;;IAEE,8BAAsC;EvEmqQ9C;EuElrQM;IAAgC,uBAA4B;EvEqrQlE;EuEprQM;;IAEE,2BAAoC;EvEsrQ5C;EuEprQM;;IAEE,6BAAwC;EvEsrQhD;EuEprQM;;IAEE,8BAA0C;EvEsrQlD;EuEprQM;;IAEE,4BAAsC;EvEsrQ9C;EuErsQM;IAAgC,qBAA4B;EvEwsQlE;EuEvsQM;;IAEE,yBAAoC;EvEysQ5C;EuEvsQM;;IAEE,2BAAwC;EvEysQhD;EuEvsQM;;IAEE,4BAA0C;EvEysQlD;EuEvsQM;;IAEE,0BAAsC;EvEysQ9C;EuExtQM;IAAgC,2BAA4B;EvE2tQlE;EuE1tQM;;IAEE,+BAAoC;EvE4tQ5C;EuE1tQM;;IAEE,iCAAwC;EvE4tQhD;EuE1tQM;;IAEE,kCAA0C;EvE4tQlD;EuE1tQM;;IAEE,gCAAsC;EvE4tQ9C;EuE3uQM;IAAgC,0BAA4B;EvE8uQlE;EuE7uQM;;IAEE,8BAAoC;EvE+uQ5C;EuE7uQM;;IAEE,gCAAwC;EvE+uQhD;EuE7uQM;;IAEE,iCAA0C;EvE+uQlD;EuE7uQM;;IAEE,+BAAsC;EvE+uQ9C;EuE9vQM;IAAgC,wBAA4B;EvEiwQlE;EuEhwQM;;IAEE,4BAAoC;EvEkwQ5C;EuEhwQM;;IAEE,8BAAwC;EvEkwQhD;EuEhwQM;;IAEE,+BAA0C;EvEkwQlD;EuEhwQM;;IAEE,6BAAsC;EvEkwQ9C;EuEjxQM;IAAgC,0BAA4B;EvEoxQlE;EuEnxQM;;IAEE,8BAAoC;EvEqxQ5C;EuEnxQM;;IAEE,gCAAwC;EvEqxQhD;EuEnxQM;;IAEE,iCAA0C;EvEqxQlD;EuEnxQM;;IAEE,+BAAsC;EvEqxQ9C;EuEpyQM;IAAgC,wBAA4B;EvEuyQlE;EuEtyQM;;IAEE,4BAAoC;EvEwyQ5C;EuEtyQM;;IAEE,8BAAwC;EvEwyQhD;EuEtyQM;;IAEE,+BAA0C;EvEwyQlD;EuEtyQM;;IAEE,6BAAsC;EvEwyQ9C;EuEhyQM;IAAwB,2BAA2B;EvEmyQzD;EuElyQM;;IAEE,+BAA+B;EvEoyQvC;EuElyQM;;IAEE,iCAAiC;EvEoyQzC;EuElyQM;;IAEE,kCAAkC;EvEoyQ1C;EuElyQM;;IAEE,gCAAgC;EvEoyQxC;EuEnzQM;IAAwB,0BAA2B;EvEszQzD;EuErzQM;;IAEE,8BAA+B;EvEuzQvC;EuErzQM;;IAEE,gCAAiC;EvEuzQzC;EuErzQM;;IAEE,iCAAkC;EvEuzQ1C;EuErzQM;;IAEE,+BAAgC;EvEuzQxC;EuEt0QM;IAAwB,wBAA2B;EvEy0QzD;EuEx0QM;;IAEE,4BAA+B;EvE00QvC;EuEx0QM;;IAEE,8BAAiC;EvE00QzC;EuEx0QM;;IAEE,+BAAkC;EvE00Q1C;EuEx0QM;;IAEE,6BAAgC;EvE00QxC;EuEz1QM;IAAwB,0BAA2B;EvE41QzD;EuE31QM;;IAEE,8BAA+B;EvE61QvC;EuE31QM;;IAEE,gCAAiC;EvE61QzC;EuE31QM;;IAEE,iCAAkC;EvE61Q1C;EuE31QM;;IAEE,+BAAgC;EvE61QxC;EuE52QM;IAAwB,wBAA2B;EvE+2QzD;EuE92QM;;IAEE,4BAA+B;EvEg3QvC;EuE92QM;;IAEE,8BAAiC;EvEg3QzC;EuE92QM;;IAEE,+BAAkC;EvEg3Q1C;EuE92QM;;IAEE,6BAAgC;EvEg3QxC;EuE12QE;IAAmB,uBAAuB;EvE62Q5C;EuE52QE;;IAEE,2BAA2B;EvE82Q/B;EuE52QE;;IAEE,6BAA6B;EvE82QjC;EuE52QE;;IAEE,8BAA8B;EvE82QlC;EuE52QE;;IAEE,4BAA4B;EvE82QhC;AACF;;Acx3QI;EyDlDI;IAAgC,oBAA4B;EvE+6QlE;EuE96QM;;IAEE,wBAAoC;EvEg7Q5C;EuE96QM;;IAEE,0BAAwC;EvEg7QhD;EuE96QM;;IAEE,2BAA0C;EvEg7QlD;EuE96QM;;IAEE,yBAAsC;EvEg7Q9C;EuE/7QM;IAAgC,0BAA4B;EvEk8QlE;EuEj8QM;;IAEE,8BAAoC;EvEm8Q5C;EuEj8QM;;IAEE,gCAAwC;EvEm8QhD;EuEj8QM;;IAEE,iCAA0C;EvEm8QlD;EuEj8QM;;IAEE,+BAAsC;EvEm8Q9C;EuEl9QM;IAAgC,yBAA4B;EvEq9QlE;EuEp9QM;;IAEE,6BAAoC;EvEs9Q5C;EuEp9QM;;IAEE,+BAAwC;EvEs9QhD;EuEp9QM;;IAEE,gCAA0C;EvEs9QlD;EuEp9QM;;IAEE,8BAAsC;EvEs9Q9C;EuEr+QM;IAAgC,uBAA4B;EvEw+QlE;EuEv+QM;;IAEE,2BAAoC;EvEy+Q5C;EuEv+QM;;IAEE,6BAAwC;EvEy+QhD;EuEv+QM;;IAEE,8BAA0C;EvEy+QlD;EuEv+QM;;IAEE,4BAAsC;EvEy+Q9C;EuEx/QM;IAAgC,yBAA4B;EvE2/QlE;EuE1/QM;;IAEE,6BAAoC;EvE4/Q5C;EuE1/QM;;IAEE,+BAAwC;EvE4/QhD;EuE1/QM;;IAEE,gCAA0C;EvE4/QlD;EuE1/QM;;IAEE,8BAAsC;EvE4/Q9C;EuE3gRM;IAAgC,uBAA4B;EvE8gRlE;EuE7gRM;;IAEE,2BAAoC;EvE+gR5C;EuE7gRM;;IAEE,6BAAwC;EvE+gRhD;EuE7gRM;;IAEE,8BAA0C;EvE+gRlD;EuE7gRM;;IAEE,4BAAsC;EvE+gR9C;EuE9hRM;IAAgC,qBAA4B;EvEiiRlE;EuEhiRM;;IAEE,yBAAoC;EvEkiR5C;EuEhiRM;;IAEE,2BAAwC;EvEkiRhD;EuEhiRM;;IAEE,4BAA0C;EvEkiRlD;EuEhiRM;;IAEE,0BAAsC;EvEkiR9C;EuEjjRM;IAAgC,2BAA4B;EvEojRlE;EuEnjRM;;IAEE,+BAAoC;EvEqjR5C;EuEnjRM;;IAEE,iCAAwC;EvEqjRhD;EuEnjRM;;IAEE,kCAA0C;EvEqjRlD;EuEnjRM;;IAEE,gCAAsC;EvEqjR9C;EuEpkRM;IAAgC,0BAA4B;EvEukRlE;EuEtkRM;;IAEE,8BAAoC;EvEwkR5C;EuEtkRM;;IAEE,gCAAwC;EvEwkRhD;EuEtkRM;;IAEE,iCAA0C;EvEwkRlD;EuEtkRM;;IAEE,+BAAsC;EvEwkR9C;EuEvlRM;IAAgC,wBAA4B;EvE0lRlE;EuEzlRM;;IAEE,4BAAoC;EvE2lR5C;EuEzlRM;;IAEE,8BAAwC;EvE2lRhD;EuEzlRM;;IAEE,+BAA0C;EvE2lRlD;EuEzlRM;;IAEE,6BAAsC;EvE2lR9C;EuE1mRM;IAAgC,0BAA4B;EvE6mRlE;EuE5mRM;;IAEE,8BAAoC;EvE8mR5C;EuE5mRM;;IAEE,gCAAwC;EvE8mRhD;EuE5mRM;;IAEE,iCAA0C;EvE8mRlD;EuE5mRM;;IAEE,+BAAsC;EvE8mR9C;EuE7nRM;IAAgC,wBAA4B;EvEgoRlE;EuE/nRM;;IAEE,4BAAoC;EvEioR5C;EuE/nRM;;IAEE,8BAAwC;EvEioRhD;EuE/nRM;;IAEE,+BAA0C;EvEioRlD;EuE/nRM;;IAEE,6BAAsC;EvEioR9C;EuEznRM;IAAwB,2BAA2B;EvE4nRzD;EuE3nRM;;IAEE,+BAA+B;EvE6nRvC;EuE3nRM;;IAEE,iCAAiC;EvE6nRzC;EuE3nRM;;IAEE,kCAAkC;EvE6nR1C;EuE3nRM;;IAEE,gCAAgC;EvE6nRxC;EuE5oRM;IAAwB,0BAA2B;EvE+oRzD;EuE9oRM;;IAEE,8BAA+B;EvEgpRvC;EuE9oRM;;IAEE,gCAAiC;EvEgpRzC;EuE9oRM;;IAEE,iCAAkC;EvEgpR1C;EuE9oRM;;IAEE,+BAAgC;EvEgpRxC;EuE/pRM;IAAwB,wBAA2B;EvEkqRzD;EuEjqRM;;IAEE,4BAA+B;EvEmqRvC;EuEjqRM;;IAEE,8BAAiC;EvEmqRzC;EuEjqRM;;IAEE,+BAAkC;EvEmqR1C;EuEjqRM;;IAEE,6BAAgC;EvEmqRxC;EuElrRM;IAAwB,0BAA2B;EvEqrRzD;EuEprRM;;IAEE,8BAA+B;EvEsrRvC;EuEprRM;;IAEE,gCAAiC;EvEsrRzC;EuEprRM;;IAEE,iCAAkC;EvEsrR1C;EuEprRM;;IAEE,+BAAgC;EvEsrRxC;EuErsRM;IAAwB,wBAA2B;EvEwsRzD;EuEvsRM;;IAEE,4BAA+B;EvEysRvC;EuEvsRM;;IAEE,8BAAiC;EvEysRzC;EuEvsRM;;IAEE,+BAAkC;EvEysR1C;EuEvsRM;;IAEE,6BAAgC;EvEysRxC;EuEnsRE;IAAmB,uBAAuB;EvEssR5C;EuErsRE;;IAEE,2BAA2B;EvEusR/B;EuErsRE;;IAEE,6BAA6B;EvEusRjC;EuErsRE;;IAEE,8BAA8B;EvEusRlC;EuErsRE;;IAEE,4BAA4B;EvEusRhC;AACF;;AcjtRI;EyDlDI;IAAgC,oBAA4B;EvEwwRlE;EuEvwRM;;IAEE,wBAAoC;EvEywR5C;EuEvwRM;;IAEE,0BAAwC;EvEywRhD;EuEvwRM;;IAEE,2BAA0C;EvEywRlD;EuEvwRM;;IAEE,yBAAsC;EvEywR9C;EuExxRM;IAAgC,0BAA4B;EvE2xRlE;EuE1xRM;;IAEE,8BAAoC;EvE4xR5C;EuE1xRM;;IAEE,gCAAwC;EvE4xRhD;EuE1xRM;;IAEE,iCAA0C;EvE4xRlD;EuE1xRM;;IAEE,+BAAsC;EvE4xR9C;EuE3yRM;IAAgC,yBAA4B;EvE8yRlE;EuE7yRM;;IAEE,6BAAoC;EvE+yR5C;EuE7yRM;;IAEE,+BAAwC;EvE+yRhD;EuE7yRM;;IAEE,gCAA0C;EvE+yRlD;EuE7yRM;;IAEE,8BAAsC;EvE+yR9C;EuE9zRM;IAAgC,uBAA4B;EvEi0RlE;EuEh0RM;;IAEE,2BAAoC;EvEk0R5C;EuEh0RM;;IAEE,6BAAwC;EvEk0RhD;EuEh0RM;;IAEE,8BAA0C;EvEk0RlD;EuEh0RM;;IAEE,4BAAsC;EvEk0R9C;EuEj1RM;IAAgC,yBAA4B;EvEo1RlE;EuEn1RM;;IAEE,6BAAoC;EvEq1R5C;EuEn1RM;;IAEE,+BAAwC;EvEq1RhD;EuEn1RM;;IAEE,gCAA0C;EvEq1RlD;EuEn1RM;;IAEE,8BAAsC;EvEq1R9C;EuEp2RM;IAAgC,uBAA4B;EvEu2RlE;EuEt2RM;;IAEE,2BAAoC;EvEw2R5C;EuEt2RM;;IAEE,6BAAwC;EvEw2RhD;EuEt2RM;;IAEE,8BAA0C;EvEw2RlD;EuEt2RM;;IAEE,4BAAsC;EvEw2R9C;EuEv3RM;IAAgC,qBAA4B;EvE03RlE;EuEz3RM;;IAEE,yBAAoC;EvE23R5C;EuEz3RM;;IAEE,2BAAwC;EvE23RhD;EuEz3RM;;IAEE,4BAA0C;EvE23RlD;EuEz3RM;;IAEE,0BAAsC;EvE23R9C;EuE14RM;IAAgC,2BAA4B;EvE64RlE;EuE54RM;;IAEE,+BAAoC;EvE84R5C;EuE54RM;;IAEE,iCAAwC;EvE84RhD;EuE54RM;;IAEE,kCAA0C;EvE84RlD;EuE54RM;;IAEE,gCAAsC;EvE84R9C;EuE75RM;IAAgC,0BAA4B;EvEg6RlE;EuE/5RM;;IAEE,8BAAoC;EvEi6R5C;EuE/5RM;;IAEE,gCAAwC;EvEi6RhD;EuE/5RM;;IAEE,iCAA0C;EvEi6RlD;EuE/5RM;;IAEE,+BAAsC;EvEi6R9C;EuEh7RM;IAAgC,wBAA4B;EvEm7RlE;EuEl7RM;;IAEE,4BAAoC;EvEo7R5C;EuEl7RM;;IAEE,8BAAwC;EvEo7RhD;EuEl7RM;;IAEE,+BAA0C;EvEo7RlD;EuEl7RM;;IAEE,6BAAsC;EvEo7R9C;EuEn8RM;IAAgC,0BAA4B;EvEs8RlE;EuEr8RM;;IAEE,8BAAoC;EvEu8R5C;EuEr8RM;;IAEE,gCAAwC;EvEu8RhD;EuEr8RM;;IAEE,iCAA0C;EvEu8RlD;EuEr8RM;;IAEE,+BAAsC;EvEu8R9C;EuEt9RM;IAAgC,wBAA4B;EvEy9RlE;EuEx9RM;;IAEE,4BAAoC;EvE09R5C;EuEx9RM;;IAEE,8BAAwC;EvE09RhD;EuEx9RM;;IAEE,+BAA0C;EvE09RlD;EuEx9RM;;IAEE,6BAAsC;EvE09R9C;EuEl9RM;IAAwB,2BAA2B;EvEq9RzD;EuEp9RM;;IAEE,+BAA+B;EvEs9RvC;EuEp9RM;;IAEE,iCAAiC;EvEs9RzC;EuEp9RM;;IAEE,kCAAkC;EvEs9R1C;EuEp9RM;;IAEE,gCAAgC;EvEs9RxC;EuEr+RM;IAAwB,0BAA2B;EvEw+RzD;EuEv+RM;;IAEE,8BAA+B;EvEy+RvC;EuEv+RM;;IAEE,gCAAiC;EvEy+RzC;EuEv+RM;;IAEE,iCAAkC;EvEy+R1C;EuEv+RM;;IAEE,+BAAgC;EvEy+RxC;EuEx/RM;IAAwB,wBAA2B;EvE2/RzD;EuE1/RM;;IAEE,4BAA+B;EvE4/RvC;EuE1/RM;;IAEE,8BAAiC;EvE4/RzC;EuE1/RM;;IAEE,+BAAkC;EvE4/R1C;EuE1/RM;;IAEE,6BAAgC;EvE4/RxC;EuE3gSM;IAAwB,0BAA2B;EvE8gSzD;EuE7gSM;;IAEE,8BAA+B;EvE+gSvC;EuE7gSM;;IAEE,gCAAiC;EvE+gSzC;EuE7gSM;;IAEE,iCAAkC;EvE+gS1C;EuE7gSM;;IAEE,+BAAgC;EvE+gSxC;EuE9hSM;IAAwB,wBAA2B;EvEiiSzD;EuEhiSM;;IAEE,4BAA+B;EvEkiSvC;EuEhiSM;;IAEE,8BAAiC;EvEkiSzC;EuEhiSM;;IAEE,+BAAkC;EvEkiS1C;EuEhiSM;;IAEE,6BAAgC;EvEkiSxC;EuE5hSE;IAAmB,uBAAuB;EvE+hS5C;EuE9hSE;;IAEE,2BAA2B;EvEgiS/B;EuE9hSE;;IAEE,6BAA6B;EvEgiSjC;EuE9hSE;;IAEE,8BAA8B;EvEgiSlC;EuE9hSE;;IAEE,4BAA4B;EvEgiShC;AACF;;AwEhmSA;EAAkB,4GAA8C;AxEomShE;;AwEhmSA;EAAiB,8BAA8B;AxEomS/C;;AwEnmSA;EAAiB,8BAA8B;AxEumS/C;;AwEtmSA;EAAiB,8BAA8B;AxE0mS/C;;AwEzmSA;ECTE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AzEsnSrB;;AwEvmSI;EAAwB,2BAA2B;AxE2mSvD;;AwE1mSI;EAAwB,4BAA4B;AxE8mSxD;;AwE7mSI;EAAwB,6BAA6B;AxEinSzD;;Ac5kSI;E0DvCA;IAAwB,2BAA2B;ExEwnSrD;EwEvnSE;IAAwB,4BAA4B;ExE0nStD;EwEznSE;IAAwB,6BAA6B;ExE4nSvD;AACF;;AcxlSI;E0DvCA;IAAwB,2BAA2B;ExEooSrD;EwEnoSE;IAAwB,4BAA4B;ExEsoStD;EwEroSE;IAAwB,6BAA6B;ExEwoSvD;AACF;;AcpmSI;E0DvCA;IAAwB,2BAA2B;ExEgpSrD;EwE/oSE;IAAwB,4BAA4B;ExEkpStD;EwEjpSE;IAAwB,6BAA6B;ExEopSvD;AACF;;AchnSI;E0DvCA;IAAwB,2BAA2B;ExE4pSrD;EwE3pSE;IAAwB,4BAA4B;ExE8pStD;EwE7pSE;IAAwB,6BAA6B;ExEgqSvD;AACF;;AwE3pSA;EAAmB,oCAAoC;AxE+pSvD;;AwE9pSA;EAAmB,oCAAoC;AxEkqSvD;;AwEjqSA;EAAmB,qCAAqC;AxEqqSxD;;AwEjqSA;EAAuB,2BAA0C;AxEqqSjE;;AwEpqSA;EAAuB,+BAA4C;AxEwqSnE;;AwEvqSA;EAAuB,2BAA2C;AxE2qSlE;;AwE1qSA;EAAuB,2BAAyC;AxE8qShE;;AwE7qSA;EAAuB,8BAA2C;AxEirSlE;;AwEhrSA;EAAuB,6BAA6B;AxEorSpD;;AwEhrSA;EAAc,sBAAwB;AxEorStC;;A0E3tSE;EACE,yBAAwB;A1E8tS5B;;AKptSE;EqELM,yBAA0E;A1E6tSlF;;A0EnuSE;EACE,yBAAwB;A1EsuS5B;;AK5tSE;EqELM,yBAA0E;A1EquSlF;;A0E3uSE;EACE,yBAAwB;A1E8uS5B;;AKpuSE;EqELM,yBAA0E;A1E6uSlF;;A0EnvSE;EACE,yBAAwB;A1EsvS5B;;AK5uSE;EqELM,yBAA0E;A1EqvSlF;;A0E3vSE;EACE,yBAAwB;A1E8vS5B;;AKpvSE;EqELM,yBAA0E;A1E6vSlF;;A0EnwSE;EACE,yBAAwB;A1EswS5B;;AK5vSE;EqELM,yBAA0E;A1EqwSlF;;A0E3wSE;EACE,yBAAwB;A1E8wS5B;;AKpwSE;EqELM,yBAA0E;A1E6wSlF;;A0EnxSE;EACE,yBAAwB;A1EsxS5B;;AK5wSE;EqELM,yBAA0E;A1EqxSlF;;AwE9uSA;EAAa,yBAA6B;AxEkvS1C;;AwEjvSA;EAAc,yBAA6B;AxEqvS3C;;AwEnvSA;EAAiB,oCAAkC;AxEuvSnD;;AwEtvSA;EAAiB,0CAAkC;AxE0vSnD;;AwEtvSA;EGvDE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,6BAA6B;EAC7B,SAAS;A3EizSX;;AwE1vSA;EAAwB,gCAAgC;AxE8vSxD;;AwE5vSA;EACE,iCAAiC;EACjC,oCAAoC;AxE+vStC;;AwE1vSA;EAAc,yBAAyB;AxE8vSvC;;A4E/zSA;EACE,8BAA8B;A5Ek0ShC;;A4E/zSA;EACE,6BAA6B;A5Ek0S/B;;A6El0SE;E3EOF;;;I2EDM,4BAA4B;IAE5B,2BAA2B;E7Ek0S/B;E6E/zSE;IAEI,0BAA0B;E7Eg0ShC;E6EvzSE;IACE,6BAA6B;E7EyzSjC;EE3nSF;I2E/KM,gCAAgC;E7E6ySpC;E6E3ySE;;IAEE,yB1EzCY;I0E0CZ,wBAAwB;E7E6yS5B;E6ErySE;IACE,2BAA2B;E7EuyS/B;E6EpySE;;IAEE,wBAAwB;E7EsyS5B;E6EnySE;;;IAGE,UAAU;IACV,SAAS;E7EqySb;E6ElySE;;IAEE,uBAAuB;E7EoyS3B;E6E5xSE;IACE,Q1E4hCgC;EHkwQpC;EE10SF;I2E+CM,2BAA2C;E7E8xS/C;EYp3SA;IiEyFI,2BAA2C;E7E8xS/C;EiC52SF;I4CmFM,aAAa;E7E4xSjB;EsC33SF;IuCkGM,sB1EtFS;EHk3Sb;EgB/3SF;I6DuGM,oCAAoC;E7E2xSxC;E6E5xSE;;IAKI,iCAAmC;E7E2xSzC;EgB91SF;;I6D0EQ,oCAAsC;E7EwxS5C;EgB7wSF;I6DNM,cAAc;E7EsxSlB;EiB54SA;;;;I4D4HM,qB1EvHU;EH64ShB;EgBxySF;I6DuBM,cAAc;IACd,qB1E7HY;EHi5ShB;AACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 0%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right-width: 0;\n border-left-width: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:first-child {\n border-top-width: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\",\"%3c\"),\n (\">\",\"%3e\"),\n (\"#\",\"%23\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n @each $name, $width in $grid-breakpoints {\n @if ($container-max-width > $width or $breakpoint == $name) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n & > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n $string: str-replace($string, $char, $encoded);\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Se,popperConfig:null},Fe="show",Ue="out",We={HIDE:"hide"+Oe,HIDDEN:"hidden"+Oe,SHOW:"show"+Oe,SHOWN:"shown"+Oe,INSERTED:"inserted"+Oe,CLICK:"click"+Oe,FOCUSIN:"focusin"+Oe,FOCUSOUT:"focusout"+Oe,MOUSEENTER:"mouseenter"+Oe,MOUSELEAVE:"mouseleave"+Oe},qe="fade",Me="show",Ke=".tooltip-inner",Qe=".arrow",Be="hover",Ve="focus",Ye="click",ze="manual",Xe=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Me))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(qe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,this._getPopperConfig(a)),g(o).addClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===Ue&&e._leave(null,e)};if(g(this.tip).hasClass(qe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){function e(){n._hoverState!==Fe&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),g(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()}var n=this,i=this.getTipElement(),o=g.Event(this.constructor.Event.HIDE);if(g(this.element).trigger(o),!o.isDefaultPrevented()){if(g(i).removeClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ye]=!1,this._activeTrigger[Ve]=!1,this._activeTrigger[Be]=!1,g(this.tip).hasClass(qe)){var r=_.getTransitionDurationFromElement(i);g(i).one(_.TRANSITION_END,e).emulateTransitionEnd(r)}else e();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Pe+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ke)),this.getTitle()),g(t).removeClass(qe+" "+Me)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=we(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t=t||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},t._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Qe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},{},this.config.popperConfig)},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Re[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==ze){var e=t===Be?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Be?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),this._hideModalHandler=function(){i.element&&i.hide()},g(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==t||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ve:Be]=!0),g(e.getTipElement()).hasClass(Me)||e._hoverState===Fe?e._hoverState=Fe:(clearTimeout(e._timeout),e._hoverState=Fe,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Fe&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ve:Be]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Ue,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Ue&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==je.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,{},e,{},"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(Ae,t,this.constructor.DefaultType),t.sanitize&&(t.template=we(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Le);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(qe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ne),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ne,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return xe}},{key:"NAME",get:function(){return Ae}},{key:"DATA_KEY",get:function(){return Ne}},{key:"Event",get:function(){return We}},{key:"EVENT_KEY",get:function(){return Oe}},{key:"DefaultType",get:function(){return He}}]),i}();g.fn[Ae]=Xe._jQueryInterface,g.fn[Ae].Constructor=Xe,g.fn[Ae].noConflict=function(){return g.fn[Ae]=ke,Xe._jQueryInterface};var $e="popover",Ge="bs.popover",Je="."+Ge,Ze=g.fn[$e],tn="bs-popover",en=new RegExp("(^|\\s)"+tn+"\\S+","g"),nn=l({},Xe.Default,{placement:"right",trigger:"click",content:"",template:''}),on=l({},Xe.DefaultType,{content:"(string|element|function)"}),rn="fade",sn="show",an=".popover-header",ln=".popover-body",cn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,INSERTED:"inserted"+Je,CLICK:"click"+Je,FOCUSIN:"focusin"+Je,FOCUSOUT:"focusout"+Je,MOUSEENTER:"mouseenter"+Je,MOUSELEAVE:"mouseleave"+Je},hn=function(t){function i(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}(i,t);var e=i.prototype;return e.isWithContent=function(){return this.getTitle()||this._getContent()},e.addAttachmentClass=function(t){g(this.getTipElement()).addClass(tn+"-"+t)},e.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},e.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(an),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ln),e),t.removeClass(rn+" "+sn)},e._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},e._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(en);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n}\n\nconst Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLES : '[data-toggle=\"buttons\"]',\n DATA_TOGGLE : '[data-toggle=\"button\"]',\n DATA_TOGGLES_BUTTONS : '[data-toggle=\"buttons\"] .btn',\n INPUT : 'input:not([type=\"hidden\"])',\n ACTIVE : '.active',\n BUTTON : '.btn'\n}\n\nconst Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLES\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n } else if (input.type === 'checkbox') {\n if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n }\n } else {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n triggerChangeEvent = false\n }\n\n if (triggerChangeEvent) {\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(Selector.INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n }\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(Event.LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(Selector.INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(ClassName.ACTIVE)\n } else {\n button.classList.remove(ClassName.ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(ClassName.ACTIVE)\n } else {\n button.classList.remove(ClassName.ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n}\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic',\n popperConfig : null\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string',\n popperConfig : '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n .filter((item) => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDE_PREVENTED : `hidePrevented${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show',\n STATIC : 'modal-static'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(Event.HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.defaultPrevented) {\n return\n }\n\n this._element.classList.add(ClassName.STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(ClassName.STATIC)\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(Selector.MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string|function)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)',\n sanitize : 'boolean',\n sanitizeFn : '(null|function)',\n whiteList : 'object',\n popperConfig : '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent',\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist,\n popperConfig : null\n}\n\nconst HoverState = {\n SHOW : 'show',\n OUT : 'out'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n}\n\nconst Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n this._hideModalHandler\n )\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
    and