railswatch 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +485 -0
- data/Rakefile +37 -0
- data/app/assets/config/railswatch_manifest.js +0 -0
- data/app/assets/images/activity.svg +13 -0
- data/app/assets/images/bot.svg +1 -0
- data/app/assets/images/close.svg +13 -0
- data/app/assets/images/details.svg +3 -0
- data/app/assets/images/download.svg +3 -0
- data/app/assets/images/export.svg +13 -0
- data/app/assets/images/external.svg +1 -0
- data/app/assets/images/git.svg +1 -0
- data/app/assets/images/github.svg +1 -0
- data/app/assets/images/home.svg +16 -0
- data/app/assets/images/import.svg +13 -0
- data/app/assets/images/menu.svg +16 -0
- data/app/assets/images/moon.svg +3 -0
- data/app/assets/images/stat.svg +1 -0
- data/app/assets/images/sun.svg +4 -0
- data/app/assets/images/user.svg +1 -0
- data/app/controllers/railswatch/base_controller.rb +35 -0
- data/app/controllers/railswatch/concerns/csv_exportable.rb +31 -0
- data/app/controllers/railswatch/railswatch_controller.rb +183 -0
- data/app/engine_assets/javascripts/apex_ext.js +30 -0
- data/app/engine_assets/javascripts/application.js +9 -0
- data/app/engine_assets/javascripts/autoupdate.js +79 -0
- data/app/engine_assets/javascripts/charts.js +279 -0
- data/app/engine_assets/javascripts/navbar.js +11 -0
- data/app/engine_assets/javascripts/panel.js +43 -0
- data/app/engine_assets/javascripts/table.js +12 -0
- data/app/engine_assets/javascripts/theme.js +43 -0
- data/app/engine_assets/stylesheets/panel.css +111 -0
- data/app/engine_assets/stylesheets/responsive.css +102 -0
- data/app/engine_assets/stylesheets/style.css +960 -0
- data/app/helpers/railswatch/railswatch_helper.rb +338 -0
- data/app/views/railswatch/_panel.html.erb +15 -0
- data/app/views/railswatch/layouts/railswatch.html.erb +81 -0
- data/app/views/railswatch/railswatch/_card.html.erb +7 -0
- data/app/views/railswatch/railswatch/_chart.html.erb +13 -0
- data/app/views/railswatch/railswatch/_crashes_table_content.html.erb +62 -0
- data/app/views/railswatch/railswatch/_custom_events_table_content.html.erb +27 -0
- data/app/views/railswatch/railswatch/_delayed_job_table_content.html.erb +52 -0
- data/app/views/railswatch/railswatch/_export.html.erb +4 -0
- data/app/views/railswatch/railswatch/_grape_requests_table_content.html.erb +31 -0
- data/app/views/railswatch/railswatch/_overview.html.erb +124 -0
- data/app/views/railswatch/railswatch/_rake_tasks_table_content.html.erb +25 -0
- data/app/views/railswatch/railswatch/_recent_requests_table_content.html.erb +28 -0
- data/app/views/railswatch/railswatch/_recent_row.html.erb +41 -0
- data/app/views/railswatch/railswatch/_requests_table_content.html.erb +51 -0
- data/app/views/railswatch/railswatch/_sidekiq_jobs_table_content.html.erb +50 -0
- data/app/views/railswatch/railswatch/_summary.html.erb +50 -0
- data/app/views/railswatch/railswatch/_table.html.erb +30 -0
- data/app/views/railswatch/railswatch/_trace.html.erb +78 -0
- data/app/views/railswatch/railswatch/crashes.html.erb +2 -0
- data/app/views/railswatch/railswatch/custom.html.erb +6 -0
- data/app/views/railswatch/railswatch/delayed_job.html.erb +6 -0
- data/app/views/railswatch/railswatch/grape.html.erb +6 -0
- data/app/views/railswatch/railswatch/index.html.erb +9 -0
- data/app/views/railswatch/railswatch/rake.html.erb +6 -0
- data/app/views/railswatch/railswatch/recent.html.erb +2 -0
- data/app/views/railswatch/railswatch/requests.html.erb +2 -0
- data/app/views/railswatch/railswatch/resources.html.erb +28 -0
- data/app/views/railswatch/railswatch/sidekiq.html.erb +6 -0
- data/app/views/railswatch/railswatch/slow.html.erb +2 -0
- data/app/views/railswatch/railswatch/summary.js.erb +3 -0
- data/app/views/railswatch/railswatch/trace.js.erb +9 -0
- data/app/views/railswatch/shared/_header.html.erb +39 -0
- data/app/views/railswatch/shared/_page_header.html.erb +23 -0
- data/config/routes.rb +27 -0
- data/lib/generators/railswatch/install/USAGE +19 -0
- data/lib/generators/railswatch/install/install_generator.rb +46 -0
- data/lib/generators/railswatch/install/templates/create_railswatch_tables.rb +140 -0
- data/lib/generators/railswatch/install/templates/initializer.rb +87 -0
- data/lib/railswatch/data_source.rb +106 -0
- data/lib/railswatch/engine.rb +103 -0
- data/lib/railswatch/events/record.rb +63 -0
- data/lib/railswatch/extensions/trace.rb +14 -0
- data/lib/railswatch/extensions/trace_db.rb +21 -0
- data/lib/railswatch/gems/custom_ext.rb +38 -0
- data/lib/railswatch/gems/delayed_job_ext.rb +70 -0
- data/lib/railswatch/gems/grape_ext.rb +64 -0
- data/lib/railswatch/gems/rake_ext.rb +69 -0
- data/lib/railswatch/gems/sidekiq_ext.rb +55 -0
- data/lib/railswatch/instrument/metrics_collector.rb +70 -0
- data/lib/railswatch/interface.rb +9 -0
- data/lib/railswatch/models/application_record.rb +31 -0
- data/lib/railswatch/models/base_record.rb +59 -0
- data/lib/railswatch/models/collection.rb +37 -0
- data/lib/railswatch/models/custom_record.rb +32 -0
- data/lib/railswatch/models/delayed_job_record.rb +39 -0
- data/lib/railswatch/models/event_record.rb +11 -0
- data/lib/railswatch/models/grape_record.rb +61 -0
- data/lib/railswatch/models/rake_record.rb +33 -0
- data/lib/railswatch/models/request_record.rb +105 -0
- data/lib/railswatch/models/resource_record.rb +33 -0
- data/lib/railswatch/models/sidekiq_record.rb +41 -0
- data/lib/railswatch/models/trace_record.rb +21 -0
- data/lib/railswatch/pruner.rb +47 -0
- data/lib/railswatch/rails/middleware.rb +117 -0
- data/lib/railswatch/rails/query_builder.rb +20 -0
- data/lib/railswatch/reports/annotations_report.rb +13 -0
- data/lib/railswatch/reports/base_report.rb +48 -0
- data/lib/railswatch/reports/breakdown_report.rb +11 -0
- data/lib/railswatch/reports/crash_report.rb +11 -0
- data/lib/railswatch/reports/overview_report.rb +88 -0
- data/lib/railswatch/reports/percentile_report.rb +16 -0
- data/lib/railswatch/reports/recent_requests_report.rb +21 -0
- data/lib/railswatch/reports/requests_report.rb +75 -0
- data/lib/railswatch/reports/resources_report.rb +42 -0
- data/lib/railswatch/reports/response_time_report.rb +27 -0
- data/lib/railswatch/reports/slow_requests_report.rb +21 -0
- data/lib/railswatch/reports/throughput_report.rb +16 -0
- data/lib/railswatch/reports/trace_report.rb +17 -0
- data/lib/railswatch/system_monitor/resources_monitor.rb +88 -0
- data/lib/railswatch/thread/current_request.rb +37 -0
- data/lib/railswatch/utils.rb +58 -0
- data/lib/railswatch/version.rb +7 -0
- data/lib/railswatch/widgets/base.rb +17 -0
- data/lib/railswatch/widgets/card.rb +19 -0
- data/lib/railswatch/widgets/chart.rb +33 -0
- data/lib/railswatch/widgets/crashes_table.rb +27 -0
- data/lib/railswatch/widgets/custom_events_table.rb +48 -0
- data/lib/railswatch/widgets/delayed_job_table.rb +31 -0
- data/lib/railswatch/widgets/grape_requests_table.rb +31 -0
- data/lib/railswatch/widgets/percentile_card.rb +23 -0
- data/lib/railswatch/widgets/rake_tasks_table.rb +31 -0
- data/lib/railswatch/widgets/recent_requests_table.rb +35 -0
- data/lib/railswatch/widgets/requests_table.rb +27 -0
- data/lib/railswatch/widgets/resource_chart.rb +116 -0
- data/lib/railswatch/widgets/response_time_chart.rb +29 -0
- data/lib/railswatch/widgets/sidekiq_jobs_table.rb +31 -0
- data/lib/railswatch/widgets/slow_requests_table.rb +33 -0
- data/lib/railswatch/widgets/table.rb +43 -0
- data/lib/railswatch/widgets/throughput_chart.rb +29 -0
- data/lib/railswatch.rb +184 -0
- data/lib/tasks/railswatch.rake +9 -0
- metadata +445 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="512px" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="_x33_7"><g><g><path d="M348.722,390.683c0.051-0.076,0.075-0.177,0.128-0.304L348.722,390.683z" style="fill-rule:evenodd;clip-rule:evenodd;"/><path d="M500.025,313.289c-2.99-0.304-5.984-0.633-8.238-0.937 c-0.994-0.126-1.84-0.228-2.479-0.329c0.257-0.177,0.485-0.356,0.742-0.531c-0.257-0.153-0.536-0.304-0.82-0.458 c0.667-0.53,0.538-0.937-0.075-1.239c0.715-0.508,1.431-0.987,1.715-1.976c-0.896-0.911-1.945,0.71-3.225,0.684 c-1.151,0.051-2.531,0.151-3.991,0.253c-1.228-0.102-2.453-0.202-3.529-0.278c1.151-0.329,2.456-0.403,3.915-0.329 c0.152-0.405,0.307-0.785,0.459-1.189c-2.02,0.229-4.066,0.202-6.114,0.127c7.956-0.835,17.651-1.773,28.395-2.837 c-0.023-0.024-6.033-0.609-11.966-1.164c-0.589-0.077-0.813-0.126-1.813-0.203v-4.965c-2-0.253-4.404-0.632-6.628-1.063 c-0.334-6.838-4.991-4.635-6.578-1.417c0.025,0.176,0.066,0.303,0.09,0.455c-0.436,0.049-0.89,0.102-1.351,0.15 c-0.256-3.394-1.659-3.267-2.326,0.255c-1.663,0.15-3.296,0.177-4.653-0.025c0.255-0.38,0.487-1.04,0.487-2.56 c-2.329-0.354-6.063-2.937-9.105,1.318c0.486-0.38,0.664,0.227,0.791,1.012c-0.69-0.024-1.38-0.075-2.045-0.126 c0.332-0.43,0.665-1.014,0.845-1.621c-0.792-0.859-2.354-1.492-2.865,0.382c-0.333,0.05-0.64,0.15-0.973,0.253l0.051-1.471 c0.282-0.076,0.563-0.228,0.847-0.353c0.535-0.128,1.047-0.255,1.533-0.356c0.869,0.279,1.74,0.404,2.404-0.583 c1.637-0.379,3.019-0.709,3.837-0.885c2.02-0.456,2.935-1.875,4.623-3.978c0.485-0.074,1.017-0.379,1.017-1.365 c0-0.024,0-0.052,0-0.078c1-0.633,1.311-1.29,2.028-2c-1.05-0.102-1.647-0.177-2.362-0.277c-0.205-0.254-0.389-0.28-0.646-0.077 c-0.152,0-0.256-0.025-0.438-0.05c2.764-3.851,4.083,0.024,6.845-5.319c-0.871-0.076-1.479-0.127-2.657-0.202 c2.687-2.026,4.736-3.596,7.142-5.471c-1.871-2.532-5.015,0.658-7.803,1.571c-0.254-1.065-0.613-2.457-0.894-3.622 c0.486-0.253,1.664-1.37,2.405-1.24c2.072,0.404,4.222-0.913,6.958-4.054c1.764-2.026,3.605-2.582,5.883-4.127 c-1.561-3.95-4.963-0.786-8.084,1.394c-0.739-0.052-1.305-0.178-1.433-0.405c2.1-1.268,4.196-1.899,6.549-6.587 c-0.664-3.721-3.478-0.1-5.397,0.584c-1.941,0.709-3.836,1.19-5.806,1.75c-0.255-2.129-0.536-4.129-0.819-6.384 c1.689-0.631,3.352-1.293,5.321-2.103c0.128-3.164,0.206-5.444,0.256-7.292c-1.866-0.532-3.274-2.381-5.116-1.267 c-7.852,4.737-13.351,1.342-20.004,1.75c-6.572,0.379-12.992,0.1-19.416-0.181c-5.779-0.227-11.638-0.328-17.879,0.737 c-0.794,0.152-1.534,0.152-2.252,0.101c0.078-1.824,0.641-3.521,1.025-5.217c0.486-0.027,0.971-0.051,1.51-0.075 c0.537,0.302,1.047,0.96,1.585,1.061c2.122,0.405,3.632-0.581,5.144-1.014c0.05-0.047,0.074-0.174,0.1-0.277 c8.697-0.253,20.361-0.581,33.639-1.241c0-0.025-5.73-0.937-11.461-1.875c-5.729-0.96-11.432-1.998-11.332-2.379 c5.653-2.152-4.424-3.369-8.518-4.079c-3.3-0.579-6.138-0.86-8.876-1.01c-0.537-0.052-1.073-0.052-1.585-0.077 c2.785-0.255,5.575-0.532,8.414-0.935c1.945-0.306,4.016-0.763,6.164-1.294c0.154,0.103,0.282,0.077,0.436-0.101 c1.254-0.328,2.508-0.658,3.787-1.038c3.094-0.887,6.021-1.874,8.99-2.684c0.254,0.075,0.598,0.101,0.598,0.101v-0.33 c1-0.051,0.629-0.103,0.855-0.176c7.244-1.217,25.064-2.887,47.144-5.093c0,0-5.915-0.581-11.875-1.164 c-2.991-0.304-5.937-0.632-8.187-0.937c-0.998-0.128-1.828-0.229-2.468-0.33c0.229-0.152,0.491-0.354,0.749-0.506 c-0.283-0.152-0.564-0.33-0.845-0.482c2.583-2-6.545-2.33-10.484-2.634c-3.504-0.304-6.716-0.352-9.579-0.251 c-1.716,0.075-3.311,0.176-5.311,0.277v-0.935c-4-0.433-7.736-1.243-11.801-2.18c-1.076,0.128-2.155,0.304-3.359,0.431 c0.565-0.377,1.175-0.784,1.763-1.241c0.077-0.049,0.151-0.103,0.202-0.15c0.332,1.848,1.755,0.352,2.087-1.318 c0-0.077-0.021-0.127-0.048-0.178c1.229-0.885,2.51-1.796,4.019-2.859c-0.331-0.028-0.609-0.028-0.867-0.051 c0.027-0.101,0.026-0.229,0.026-0.382c-0.203-0.075-0.432-0.201-0.638-0.354c1.178-0.557,2.072,0.204,3.428-1.698 c-0.589-0.023-0.997-0.049-1.767-0.101c0.975-0.508,1.844-0.96,2.662-1.391c0.536,1.846,2.353,0.251,2.992-1.698 c-0.818-0.887-2.381-1.522-2.889,0.354c-0.309,0.052-0.641,0.152-0.975,0.253l0.078-1.468c0.896-0.255,1.814-0.785,2.89-1.644 c1.128-0.887,2.354-1.142,3.837-1.826c-1.688-2.48-5.603,0.784-7.903,0.581c1.534-1.291,3.12-2.474,4.756-3.474h-13.327 c0.18,0,0.385,0.182,0.563-0.197c-0.843-0.053-1.48,0.305-2.66,0.204c2.688-2.001,4.733-3.368,7.163-5.267 c-1.892-2.508-5.039,0.758-7.827,1.67c-0.256-1.064-0.613-2.405-0.895-3.546c0.486-0.253,1.688-1.367,2.402-1.214 c2.074,0.379,4.223-0.9,6.959-4.065c1.766-2.026,3.633-2.55,5.885-4.121c-1.563-3.925-4.964-0.783-8.059,1.421 c-0.768-0.075-1.329-0.175-1.459-0.403c2.1-1.292,4.195-1.898,6.55-6.608c-0.641-3.697-3.479-0.101-5.397,0.608 c-1.944,0.709-3.838,1.192-5.807,1.747c-0.256-2.128-0.512-4.152-0.818-6.407c1.688-0.634,3.35-1.265,5.346-2.077 c0.103-3.166,0.18-5.47,0.257-7.32c-1.868-0.506-3.276-2.379-5.142-1.265c-7.83,4.735-13.328,1.342-20.005,1.749 c-6.573,0.403-12.993,0.126-19.415-0.152c-5.781-0.255-11.639-0.332-17.88,0.733c-1.737,0.304-3.351-0.025-4.373-0.101 c-6.038,4.634-10.592,3.114-15.349,3.114c-1.433-0.025-2.865-0.025-4.297-0.025c0.154-0.253,0.306-0.532,0.436-0.811 c-5.065-1.367-11.18,0.382-16.27-1.364c-0.512-0.837-1.305-2.303-2.251-2.303h0.229l0.078-0.382c0.152,0,0.28,0.086,0.408,0.112 c4.682,1.773,9.771,1.741,16.473,0.271c0.026-0.049,0.026-0.053,0.026-0.105c1.382-0.101,2.84-0.292,4.322-0.52 c0.153,0.101,0.281,0.107,0.462-0.045c4.834-0.787,10.001-1.998,14.579-2.757c7.161-0.531,24.583-0.658,46.274-1.773 c0,0-5.73-0.935-11.46-1.846c-5.729-0.99-11.435-2.026-11.332-2.381c5.679-2.179-4.426-3.395-8.519-4.104 c-3.299-0.582-6.139-0.835-8.876-1.011c-2.762-0.154-5.372-0.206-8.236-0.433c-3.733-0.302-7.341-0.785-10.923-1.391 c-3.555-0.583-7.084-1.218-10.588-1.875c-3.508-0.658-6.985-1.316-10.489-1.822c-3.505-0.508-7.034-0.887-10.616-1.04 c-2.711-0.126-5.447-0.227-8.185-0.302c0.896-0.356,1.815-0.482,2.533-2.279c-0.819,0.202-4.913,1.82-2.89,1.494 c0.202-0.051,0.076,0.53,0.126,0.785c-0.64-0.026-1.28-0.051-1.892-0.051c-0.078-0.253-0.258-0.305-0.461-0.178 c0-0.025,0.024-0.025,0.024-0.051c-0.077,0.077-0.18,0.154-0.255,0.204c-1.715-0.049-3.455-0.049-5.167-0.075 c0.126-0.051,0.255-0.128,0.383-0.178c-0.103-0.911-1.406-0.684-1.918,0.152c-0.896,0-1.765-0.026-2.661-0.026 c0.383-0.304,0.69-0.735,0.819-1.292c-0.589,0.178-1.177,0.178-1.79,0.178c0.052-0.33,0.076-0.658,0.229-0.557 c1.458,0,2.762-0.455,3.862-0.532c0.153,0.051,0.102,0.558,0.129,0.836c0.612-1.318,1.021-0.658,1.688-0.759 c2.635-0.407,5.449-0.735,8.108-0.887c1.331-0.075,2.636-0.126,3.889-0.152c1.228,0,2.405,0.026,3.479,0.077 c0.102-0.077,0.178-0.128,0.281-0.178c0.255-0.026,0.613-0.026,0.971-0.101c0.819,0.176,1.638,0.024,2.764-0.431 c0.078-0.026,0.051,0.176,0.051,0.354c-1.816,2.433-3.762,0.405-5.347,1.469c0.181,0.051,0.486-0.15,0.358,0.482 c-1.074-1.012-3.198-2.051-4.962,0.913c7.111-1.494,15.321,1.19,22.613-0.051c-0.437-0.253-2.532-1.597-1.97,0.025 c-2.482-3.116-7.188,0.328-9.542-2.737c0.229,0.051,0.46,0.077,0.69,0.025c0.869-0.176,1.637,0.305,2.48,0.305 c3.07-0.026,6.267,0.278,9.234-0.101c0.64,0.735,2.124-0.178,3.07-0.557c0.281,0-0.076,1.063,0.281,0.937 c1.688-0.482,3.353-0.176,5.398-0.632c-1.152-1.04-3.146-1.114-4.734-0.126c-0.128-0.152,0.104-0.887-0.128-0.887 c-0.382,1.241-0.356-0.101-0.588-0.126c-2.66,0.684-4.859,0.48-6.88,0.229c0.486-1.217,1.049-0.709,1.584-1.039 c0.488,1.873,2.38-1.545,3.096-0.204c0.973-1.417,1.791-0.152,2.838-1.494c0.206-0.024,0.053,0.506,0.259,0.482 c1.176-1.091,2.583-0.735,3.556,0.253c-0.59,0.583-1.15-0.026-1.536,0.986c0.462-0.227,0.998,0,1.587-0.302 c0.305-0.836-0.18-0.457,0.127-1.316c1.586,0.684,3.66-0.379,5.219,0.354c0.23,0.101,0.307,0.658,0.563,0.733 c0.486,0.178,1.305-0.429,1.867-0.302c0.869,0.228,1.459,0.302,2.021,0.684c0.384-0.457,0.766-0.836,1.151-1.089 c-0.206,0.558-0.358,0.607-0.13,0.708c0.666-0.658,0.896-0.784,1.229,0.026c-0.256,0.66-0.384,0.077-0.64,0.862 c0.46,0.457,1.049-0.305,1.662-1.215c-0.076-1.597-1.1-0.684-1.79-0.937c-1.254-0.482-2.583-1.595-3.991-1.241 c-0.92-1.824-3.17,0.988-3.938-1.241c-0.308,0.051-0.588,0.482-0.896,0.608c0.052-0.836,0.052-0.887-0.23-1.269 c-0.308,0.711,0.18,0.812-0.128,1.142c-0.612,0.682,0-0.962-0.333-1.04c-1.125-0.051-2.123-0.253-3.196-0.431 c-1.508-0.279-4.222,1.419-4.86,0.077c-2.098-0.152-4.502-0.152-7.008-0.128c-0.666-0.986-2.328-0.607-3.07,0.025 c-2.149,0.052-4.323,0.077-6.395,0.026c-1.049-0.026-1.688-0.862-2.916-0.785c-4.35,0.354-9.338,0.583-14.273,1.164 c-0.64-0.328-1.356-0.302-2.098-0.202c1.328-0.506,2.531-0.126,3.811-1.014c2.916,0.381,6.42-0.684,9.618-0.431 c0.946,0.077,2.353,0.229,3.248,0c0.46-0.125,0.64,0.025,1.126,0c0.204-0.024,0.408-0.024,0.614-0.024 c1.048,1.063,3.146,0.658,4.63,1.038c0.18-0.405,0.332-0.785,0.512-1.19c-0.078-0.025-0.154-0.051-0.232-0.101 c1.613-0.026,3.199-0.077,4.683-0.178c0.512-0.026,1.355-0.354,1.663-0.178c0.152,0.103,0.076,0.658,0.23,0.658 c0.383,0.051,0.922-0.379,1.33-0.354c1.202,0.075,2.635,0.229,4.041,0.204c1.534-0.026,3.02,0.354,4.375,0.733 c0.178,0.051,0.512-0.405,0.691-0.405c0.28,0.025,0.459,0.506,0.716,0.506c6.368,0.051,13.096,0.709,20.155,0.381 c0.462-0.229-0.076,0.733,0.384,0.504c0.486-0.429,0.997-0.809,1.511-1.366c-1.843-1.215-4.656,0.836-5.858-1.444 c-2.788,1.824-4.632-1.038-7.034,0.051c-0.128-0.051-0.256-0.101-0.385-0.101c0.053-0.103,0.129-0.204,0.205-0.304 c7.7-0.355,15.193,1.672,24.428-1.85c0.537-0.834-2.531-0.455-2.48-1.265c-1.176-0.938-3.07-1.014-4.654-0.861 c-0.794,0.075-1.512,0.204-2.021,0.304c-0.539,0.126-0.818,0.228-0.818,0.228c-3.889-1.67-5.552-0.457-9.363-2.558 c-1.022,0.202-2.021,0.405-3.018,0.558c-0.076-0.126-0.206-0.253-0.41-0.305c-0.127,0.152-0.178,0.305-0.23,0.405 c-0.178,0.026-0.357,0.075-0.537,0.101c-0.127-0.126-0.256-0.253-0.383-0.354c0.103-0.077,0.179-0.152,0.28-0.227 c2.202-0.836,4.431-5.04,4.431-5.04c-3.354,0.8-5.318,0.144-8.318-1.132v-1h-0.026c-1.136-1-2.235-0.978-3.374-1.805 c-1.613,0.229-3.785,0.904-4.887,0.094c-2.942-0.026-5.525-1.506-8.212-2.34c-0.589-0.178-1.15-0.949-1.739-0.949h-6.982 c-0.181,0-0.486,1.338-0.742,1.49l0.078-0.206l-0.818,1.149c-0.462,0.077,0.178-1.723,0.588-1.875 c-0.463-0.05-0.896-0.559-1.357-0.559h-5.576c-0.563,1-1.074,0.35-1.611,1.818c0-0.305,0.104-0.655,0.281-0.959 c-1.535,0.557-1.867,0.141-2.43-0.859H201.306c-0.18,0-0.384,0.628-0.564,0.653c-0.92,0-1.841,0.275-2.583,0.707 c-0.026,0.025-0.026,0.188-0.026,0.213c-0.742,0.253-1.51,0.727-2.251,1.462c-0.665-0.583-1.765-0.879-2.457-0.802 c-0.741,0.862-1.099,1.03-1.534,1.866c-0.332,0.026-0.64,0.059-0.973,0.084c-0.024-0.152-0.076-0.273-0.102-0.376 c-1.15-0.178-2.251-1.719-3.223,0.281l-0.026-1.011c-0.486,0.582-1.048,1.215-1.662,1.571c-0.435,0.051-0.87,0.102-1.331,0.177 c-0.102-0.075-0.23-0.126-0.332-0.253c-0.025,0.126-0.076,0.203-0.127,0.304c-0.436,0.051-0.896,0.101-1.33,0.178 c-0.768,0-1.51,0.101-2.226,0.302c-2.507,0.381-4.989,0.785-7.547,1.141c-2.813,0.355-5.365,0.658-8.434,0.887 c-0.332,1.316-1.58,1.874-1.58,2.178c0,0,0,0,0-0.026c-1-0.128-0.987-0.025-1.192,0.253c-0.179,0.026-0.808,0.052-0.808,0.075 c0-0.023,0-0.049,0-0.075c0,0.052-0.247,0.075-0.35,0.127c-1.278,0.201-2.514,0.506-3.001,2.152 c-0.025,0.609,0.124,1.089,0.38,1.52c-0.025,0.075-0.081,0.178-0.105,0.305l-0.192-0.279c0.154,0.253,0.269,0.48,0.269,0.735 c0,0.075,0,0.178,0,0.278l0.334-0.178c0.153,0.126,0.666,0.279,0.666,0.405v0.101c0,0,0.139,0,0.165-0.025 c0.869,0.784,1.834,1.646,2.013,3.166c-1.33,2.305-3.533-0.354-5.093-1.089c0.154,1.595,0.983,2.761,2.108,3.648 c-0.845,0.429-1.556,1.164-2.067,2.379c2.2,0.48,6.603-0.202,8.648,0.557c-1.688,1.166-4.091,0.532-6.394,1.14 c0.077,1.012,0.666,0.708,0.64,1.977c-1.867,0.379-3.734,0.782-5.602,1.189c-5.703,1.215-11.281,2.178-16.269,0.86 c-2.583,0.532-5.064,1.14-7.52,1.723c-3.99-0.534-8.263-1.342-12.688-0.862c-2.736,0.305-5.524,1.469-8.261,2.609 c-0.563,0-1.101,0-1.638,0.051c-2.328,0.277-4.706,1.342-7.008,1.747c-3.096,0.532-6.472-1.875-8.492,1.443 c-0.461-1.848-2.558-0.735-2.994,0.861c0.922,0.811,2.457-1.14,3.275,0.532c-0.818,0.354-1.612,0.735-2.353,1.164 c-3.657,1.14-8.006,3.444-11.281,7.852c-0.153,1.874,0.793,0.482,0.641,2.355c-0.052,1.569-0.742,1.164-1.024,2.075 c0.844-0.047,1.204-0.86,1.816,0.279c-0.664,1.925-1.968,1.95-2.328,4.686c0.845-0.988,1.715-1.824,2.609-2.583 c-0.103,0.379-0.206,0.759-0.282,1.166c-0.025,0.834-0.05,1.52-0.076,2.126c-0.716,0.658-1.407,1.52-1.97,2.66 c0.536,0.733,1.33-0.988,1.944-0.405c0,0.962,0.026,1.747,0.076,2.684c-0.614,0.253-1.151,0.709-1.561,1.595 c0.538-0.354,1.074-0.733,1.586-1.189c0.076,0.962,0.153,2.128,0.282,3.85c0.281,0.506,0.563,0.988,0.844,1.419 c-1.151,0.86-2.251,1.923-3.248,3.316c0.664,2.887-0.309,5.267-0.846,7.75c-0.281,0.026-0.587,0.075-0.869,0.101 c-0.818,0.075-1.458-1.089-2.175-1.241c-2.148-0.379-3.657,0.609-5.141,1.038c-0.127,0.128-0.205,0.457-0.205,1.014l0.461-0.049 c3.019-0.128,5.908,1.138,8.594,1.036c0.46-0.101,0.803-0.152,1.263-0.228L79,178.407v-0.176c3-0.405,5.158-1.336,7.691-1.768 c1.637-0.303,3.393-0.464,5.005-1.464c0.025,0,0.076,0,0.102,0c1.279,1,3.275,2.477,5.397,2.957 c-0.794,0.431-1.662,1.796-2.685,3.468c1.433-0.684,2.609-1.129,3.683-1.635c-0.409,0.988,0.077,2.296-0.128,2.778 c-0.895,0.279-2.097-0.395-2.275,2.239c0.69-0.787,1.38-0.794,2.072-0.616c-2.737,1.419-6.012,0.49-8.544,1.959 c-1.996-0.988-3.99-1.288-6.114,0.384c0.615,0.126,1.203,0.229,1.817,0.33c-5.654,0.381-11.256,0.761-16.934,1.571 c-1.97,0.28-4.042,0.735-6.191,1.292c-0.154-0.101-0.282-0.074-0.435,0.104c-1.254,0.328-2.507,0.656-3.786,1.038 c-3.096,0.885-6.066,1.873-9.031,2.684c-0.258-0.077-0.645-0.126-0.645-0.101v0.305c0,0.075-0.585,0.126-0.816,0.176 c-7.238,1.215-25.041,2.913-47.115,5.116c0,0,5.922,0.581,11.883,1.139c2.993,0.332,5.965,0.66,8.191,0.964 c1.024,0.126,1.833,0.227,2.472,0.328c-0.229,0.152-0.491,0.328-0.72,0.506c0.255,0.152,0.535,0.33,0.815,0.482 c-2.583,2,6.547,2.328,10.487,2.632c3.529,0.305,6.672,0.33,9.538,0.255c1.739-0.077,3.266-0.178,5.266-0.279v0.911 c5,0.457,7.778,1.265,11.847,2.203c1.074-0.128,2.175-0.304,3.377-0.431c-0.563,0.379-1.163,0.787-1.751,1.239 c-0.051,0.053-0.147,0.101-0.198,0.128c-0.333-1.822-1.748-0.328-2.079,1.342c0.024,0.075,0.021,0.128,0.045,0.178 c-1.227,0.888-2.509,1.773-4.018,2.862c0.332,0.025,0.611,0.025,0.867,0.051c-0.024,0.101-0.025,0.228-0.025,0.379 c0.205,0.075,0.434,0.204,0.665,0.354c-1.203,0.557-2.098-0.202-3.428,1.697c0.563,0.026,0.973,0.052,1.739,0.075 c-0.972,0.532-1.816,0.988-2.66,1.419c-0.538-1.848-2.354-0.253-2.993,1.696c0.819,0.887,2.378,1.494,2.892-0.354 c0.306-0.051,0.639-0.152,0.971-0.253l-0.076,1.443c-0.87,0.253-1.816,0.812-2.891,1.672c-1.125,0.885-2.353,1.117-3.837,1.824 c1.688,2.482,5.602-2.01,7.93-1.782c-1.561,1.267-3.121,0.27-4.783,2.27h13.327c-0.18,0-0.358,1.022-0.563,1.403 c0.87,0.051,1.484,0.296,2.661,0.397c-2.661,1.998-4.733,3.669-7.137,5.566c1.867,2.508,5.014-0.608,7.827-1.521 c0.256,1.063,0.589,2.482,0.871,3.621c-0.46,0.253-1.663,1.379-2.405,1.253c-2.072-0.379-4.22,0.92-6.957,4.06 c-1.765,2.051-3.607,2.583-5.884,4.154c1.561,3.926,4.963,0.789,8.083-1.417c0.743,0.077,1.306,0.18,1.433,0.407 c-2.097,1.292-4.194,1.899-6.548,6.611c0.665,3.697,3.479,0.102,5.398-0.608c1.944-0.708,3.837-1.189,5.806-1.747 c0.282,2.127,0.538,4.154,0.82,6.407c-1.689,0.634-3.326,1.265-5.322,2.077c-0.127,3.166-0.204,5.444-0.256,7.292 c1.867,0.531,3.275,2.406,5.117,1.268c7.853-4.709,13.352-1.316,20.003-1.722c6.574-0.405,12.994-0.128,19.415,0.15 c5.806,0.255,11.639,0.331,17.88-0.733c0.793-0.127,1.561-0.127,2.251-0.102c-0.077,1.849-0.639,3.521-1.022,5.242 c-0.486,0.026-0.972,0.026-1.484,0.052c-0.562-0.303-1.074-0.964-1.585-1.066c-2.149-0.402-3.659,0.584-5.141,1.041 c-0.052,0.05-0.103,0.151-0.129,0.253c-8.696,0.277-20.362,0.582-33.638,1.265c0,0,5.731,0.937,11.46,1.849 c5.73,0.964,11.434,2.027,11.332,2.382c-5.653,2.153,4.425,3.394,8.519,4.104c3.299,0.581,6.139,0.835,8.902,1.012 c0.512,0.025,1.049,0.052,1.586,0.076c-2.814,0.229-5.603-0.216-8.416,0.19c-0.972,0.127-1.969-0.215-2.968-0.215H111.7 c-0.026,0-0.077,1-0.103,1c-0.179,0-0.332,0-0.485,0c0.205-1,0.383-1,0.588-1h-3.505c-0.05,0-0.076,0.82-0.102,0.873 c-0.179-0.023-0.384,0.348-0.537,0.348c-0.153,0.357-0.308,0.895-0.459,1.251c-0.154,0.15-0.332,0.347-0.513,0.471 c-0.409,0.129-0.793,0.277-1.201,0.38c-1.1,0.33-2.201,0.68-3.275,1.01c-2.175,0.1-4.349,0.212-6.548,0.366 c-1.458,0.431-0.46-1.107-1.919-0.679c-0.614,0.329-1.254,0.688-1.893,1.017c-1.253-0.405-3.198-0.199-4.578,0.307 c0.383,0.937,1.586,1.088,2.763,0.86c-0.077,0.053-0.153,0.102-0.205,0.154c1.177,0.228,2.353,0.305,3.555,0.328 c-2.404,0.354-5.602,0.759-9.464,1.189c-2.125-0.229-3.991-0.658-5.398-1.646c0.358-0.303,2.149,0.356,3.044-0.532 c1.151,0.482,3.096,0.406,3.708-0.733c-3.836-1.495-14.631,0.684-18.98,0.305c-0.87,0.911-2.174,1.266-2.609,2.709 c0.92,0.886,1.971-0.709,3.249-0.684c2.174-0.126,5.141-0.328,8.056-0.658c0.104,0.126,0.181,0.253,0.231,0.38 c-1.28,0.607-2.891,0.734-4.681,0.632c-0.154,0.381-0.308,0.786-0.46,1.192c2.021-0.229,4.066-0.229,6.112-0.128 c-7.98,0.837-17.675,1.773-28.393,2.835c0,0,6.268,0.585,12.229,1.168c0.587,0.05,1.072,0.126,2.072,0.175v4.991 c4,0.429,7.598,1.24,11.69,2.177c3.222-0.38,7.339-1.089,10.101-0.43c7.163-0.281,13.994,0.734,21.079,1.366 c-1.151,0.076-2.545,0.255-4.003,0.506c-0.282-0.048-0.584,0-0.916,0.154c-0.459,0.075-0.955,0.176-1.44,0.277 c-2.072-0.455-3.842-1.546-5.632-0.479c-5.398-1.521-11.617-2.153-16.451,0.378c-1.561,0.532-0.545-1.749-1.236-1.57 c-2.992,1.294-5.191,1.014-9.191,0.912v6.912c3,0.255,4.74,0.636,6.966,1.067c0.305,6.86,5.119,4.658,6.704,1.416 c-0.025-0.152,0.015-0.277-0.011-0.429c0.435-0.078,0.902-0.129,1.363-0.179c-0.537,0.634-1.11,1.268-1.8,1.976 c1.05,0.103,1.748,0.177,2.464,0.252c0.23,0.255,0.465,0.28,0.72,0.101c0.129,0,0.284,0.027,0.437,0.053 c-2.762,3.848-4.039-0.053-6.829,5.319c0.871,0.075,1.485,0.102,2.687,0.2c-2.687,2.002-4.732,3.599-7.162,5.472 c1.892,2.532,5.039-0.659,7.827-1.57c0.256,1.063,0.589,2.456,0.871,3.597c-0.461,0.252-1.663,1.392-2.405,1.241 c-2.046-0.381-4.195,0.911-6.932,4.076c-1.765,2.025-3.633,2.556-5.883,4.13c1.533,3.948,4.962,0.783,8.057-1.42 c0.742,0.075,1.33,0.203,1.458,0.405c-2.098,1.289-4.196,1.898-6.549,6.608c0.64,3.698,3.479,0.102,5.398-0.607 c1.842-0.657,3.657-1.14,5.524-1.671c-0.895,0.684-1.816,1.596-2.839,2.762c-1.765,2.051-3.632,2.582-5.884,4.126 c1.536,3.952,4.964,0.813,8.059-1.392c0.742,0.075,1.331,0.179,1.433,0.404c-0.818,0.507-1.638,0.913-2.482,1.52 c-0.818,0.303-1.636,0.634-2.532,0.989c-0.026,0.582-0.026,1.114-0.051,1.62c-0.486,0.684-0.971,1.469-1.484,2.457 c0.23,1.29,0.716,1.695,1.331,1.645c0,0.558-0.026,1.088-0.051,1.595c1.867,0.508,3.274,2.383,5.142,1.268 c1.918-1.166,3.683-1.822,5.397-2.204c0.077,0.583,0.127,1.164,0.205,1.748c-1.689,0.657-3.325,1.292-5.321,2.102 c-0.102,3.167-0.178,5.445-0.255,7.296c1.867,0.532,3.273,2.403,5.116,1.266c7.853-4.711,13.353-1.318,20.003-1.724 c4.707-0.305,9.336-0.228,13.915-0.077c0.18,0.077,0.283,0.154,0.256,0.205c-5.652,2.15,4.452,3.366,8.518,4.075 c1.842,0.329,3.558,0.532,5.168,0.711c-8.416,0.253-19.185,0.558-31.31,1.191c0.025,0,5.755,0.908,11.485,1.847 c5.705,0.963,11.435,2,11.307,2.382c-5.654,2.152,4.451,3.393,8.518,4.077c1.381,0.253,2.686,0.432,3.915,0.582 c-0.028,0.076-0.028,0.101-0.052,0.177c0.563,0.254,1.022,0.482,1.536-0.025c1.201,0.127,2.378,0.229,3.504,0.279 c2.25,0.126,4.476,0.229,6.777,0.354c0.589,0.582,1.254,1.19,2.303,0.176c0.281,0.027,0.562,0.076,0.843,0.104 c-0.024,0.074-0.076,0.15-0.126,0.252c0.332,0.102,0.741,0.355,1.279-0.149c2.66,0.302,5.295,0.632,7.878,1.062 c-0.129,0.254-0.255,0.582-0.358,1.115c0.563-0.128,1.202,0.48,1.662-0.888c0.384,0.077,0.768,0.151,1.177,0.228 c-0.358,0.052-0.792-0.025-1.253,0.202c-0.307,0.862,0.205,0.482-0.103,1.344c-1.586-0.709-3.684,0.354-5.217-0.354 c-0.256-0.127-0.333-0.683-0.588-0.76c-0.488-0.177-1.279,0.431-1.868,0.304c-0.87-0.203-1.432-0.304-2.021-0.684 c-0.384,0.457-0.767,0.836-1.125,1.089c0.206-0.533,0.359-0.608,0.102-0.709c-0.641,0.682-0.895,0.784-1.203-0.025 c0.23-0.658,0.384-0.076,0.64-0.861c-0.486-0.455-1.074,0.305-1.662,1.217c0.076,1.621,1.099,0.683,1.79,0.961 c1.228,0.458,2.584,1.597,3.965,1.24c0.921,1.8,3.198-1.014,3.964,1.217c0.282-0.051,0.589-0.481,0.896-0.609 c-0.076,0.836-0.052,0.889,0.231,1.268c0.307-0.709-0.179-0.811,0.126-1.14c0.615-0.682,0,0.964,0.309,1.037 c1.149,0.052,2.149,0.254,3.197,0.432c0.408,0.077,0.87,0,1.38-0.103c-0.05,0.103-0.102,0.203-0.127,0.355 c0.051,0.153,0.103,0.354,0.205,0.531c-0.179-0.025-0.332-0.076-0.486-0.127c-0.153-0.023-0.486,0.406-0.664,0.406 c-0.308-0.024-0.461-0.481-0.718-0.481c-6.368-0.076-13.096-0.734-20.156-0.404c-0.486,0.229,0.077-0.71-0.384-0.507 c-0.511,0.43-0.997,0.812-1.51,1.368c0.461,0.305,0.972,0.405,1.51,0.405c-0.18,0.202-0.357,0.531-0.562,1.113 c0.051,0,0.076,0.027,0.102,0.027c-3.888,0-7.93,0.404-12.407,2.099c-0.562,0.864,2.533,0.458,2.482,1.27 c1.151,0.937,3.07,1.037,4.655,0.858c0.794-0.074,1.509-0.202,2.021-0.303c0.512-0.126,0.819-0.203,0.819-0.203 c3.888,1.646,5.524,0.432,9.362,2.533c1.022-0.202,2.021-0.381,3.017-0.559c0.078,0.154,0.18,0.255,0.41,0.303 c0.103-0.148,0.18-0.276,0.205-0.404c0.179-0.025,0.386-0.075,0.563-0.1c0.127,0.126,0.256,0.253,0.384,0.355 c-0.104,0.076-0.18,0.148-0.283,0.227c-0.742,0.279-1.484,0.937-2.149,1.697c-1.022,0-2.045,0-3.094,0.05 c-0.461,0.229,0.102-0.734-0.359-0.507c-0.512,0.432-1.023,0.812-1.509,1.369c1.151,0.733,2.686,0.227,3.964,0.303 c-0.358,0.481-0.639,0.911-0.871,1.268c-4.501-0.128-9.182,0.049-14.452,2.075c-0.562,0.835,2.534,0.457,2.481,1.266 c1.151,0.912,3.044,1.014,4.657,0.863c0.792-0.077,1.508-0.204,2.021-0.33c0.512-0.101,0.818-0.203,0.818-0.203 c3.887,1.672,5.525,0.432,9.362,2.558c1.023-0.228,2.021-0.405,3.019-0.582c0.076,0.152,0.179,0.28,0.408,0.305 c0.103-0.128,0.18-0.279,0.205-0.405c0.18-0.026,0.359-0.053,0.563-0.076c0.128,0.125,0.23,0.253,0.357,0.354 c-0.076,0.076-0.178,0.128-0.255,0.229c-2.226,0.836-4.553,5.016-4.553,5.016c5.09-1.191,8.288,0.909,11.817,3.52 c1.637-0.229,3.786-0.685,4.912,0.102c2.941,0.049,5.525,0.362,8.211,1.224C179,412.371,179.588,412,180.15,412h7.009 c0.154,0,0.486-0.111,0.742-0.236l-0.077,0.806l0.794-0.838c0.459-0.053-0.154,0.651-0.589,0.806 c0.459,0.049,0.921-0.537,1.356-0.537h5.575c0.59,0,1.101,0.904,1.613-0.592c0.025,0.328-0.104,0.055-0.256,0.357 c1.536-0.556,1.867-0.766,2.404,0.234h111.886c0.205,0,0.383,0.625,0.564,0.598c0.945,0,1.867,0.352,2.607-0.079 c0-0.024,0,0.125,0.026,0.098c0.742-0.254,1.483-0.572,2.251-1.305c0.665,0.583,1.765,0.956,2.43,0.88 c0.742-0.887,1.125-0.993,1.559-1.828c0.309-0.023,0.641-0.037,0.947-0.064c0.053,0.152,0.077,0.285,0.104,0.386 c1.176,0.179,2.275,1.726,3.223-0.275l0.026,1.014c0.485-0.579,1.073-1.214,1.661-1.593c0.436-0.052,0.896-0.102,1.331-0.153 c0.13,0.052,0.231,0.129,0.333,0.229c0.051-0.1,0.075-0.203,0.127-0.278c0.461-0.077,0.896-0.127,1.356-0.178 c0.768,0,1.509-0.102,2.226-0.305c2.48-0.381,4.987-0.784,7.545-1.139c2.814-0.354,5.705-0.657,8.748-0.889 c0.332-1.341,1.074-1.872,1.92-2.177c0.357,0.129,0.691,0.052,0.895-0.227c0.153-0.024,0.307-0.051,0.487-0.077 c-0.026,0.026-0.026,0.026-0.026,0.053c0.127-0.026,0.255-0.077,0.357-0.102c1.279-0.23,2.481-0.506,2.993-2.179 c0.024-0.608-0.153-1.089-0.41-1.494c0.052-0.076,0.077-0.178,0.128-0.305l-0.128,0.28c-0.178-0.255-0.356-0.507-0.587-0.735 c0-0.076-0.025-0.177,0-0.279l0.004,0.179c-0.129-0.152-0.305-0.28-0.305-0.405v-0.129c0,0.028-0.182,0.028-0.207,0.053 c-0.87-0.787-1.856-1.646-2.036-3.166c1.33-2.33,3.521,0.353,5.109,1.088c-0.182-1.595-1.015-2.76-2.14-3.646 c0.842-0.454,1.555-1.164,2.065-2.379c-1.663-0.382-4.611-0.078-6.809-0.23c-0.078-0.202-0.158-0.379-0.262-0.557 c-0.076-0.126-0.179-0.228-0.28-0.329c1.534-0.378,3.352-0.125,5.117-0.607c-0.077-0.988-0.692-0.686-0.641-1.976 c1.84-0.354,3.709-0.759,5.574-1.165c5.705-1.214,11.307-2.179,16.297-0.861c2.558-0.53,5.037-1.139,7.493-1.722 c3.991,0.532,8.263,1.316,12.688,0.862c2.738-0.307,5.55-1.471,8.264-2.61c0.563,0,1.124,0,1.661-0.074 c2.301-0.254,4.709-1.317,7.008-1.723c3.096-0.531,6.447,1.85,8.469-1.469c0.485,1.874,2.582,0.733,3.016-0.835 c-0.944-0.838-2.48,1.139-3.273-0.558c0.821-0.329,1.587-0.71,2.355-1.139c3.632-1.14,7.981-3.446,11.279-7.852 c0.154-1.875-0.793-0.482-0.638-2.357c0.024-1.569,0.739-1.163,0.997-2.076c-0.821,0.053-1.203,0.862-1.791-0.277 c0.639-1.95,1.943-1.95,2.327-4.685c-0.842,0.986-1.714,1.824-2.636,2.556c0.104-0.379,0.206-0.759,0.309-1.138 c0.025-0.836,0.052-1.521,0.052-2.151c0.716-0.634,1.406-1.52,1.97-2.636c-0.514-0.732-1.306,0.963-1.946,0.405 c0-0.961,0-1.748-0.075-2.685c0.613-0.278,1.178-0.709,1.586-1.597c-0.563,0.356-1.101,0.736-1.611,1.191 c-0.053-0.962-0.129-2.152-0.258-3.848c-0.305-0.533-0.587-0.988-0.867-1.42c1.176-0.861,2.275-1.924,3.272-3.316 c-0.664-2.889,0.308-5.269,0.819-7.749c0.305-0.026,0.588-0.076,0.871-0.102c0.816-0.077,1.483,1.086,2.199,1.215 c2.121,0.405,3.657-0.583,5.142-1.039c0.126-0.127,0.204-0.432,0.204-0.986l-0.486,0.048c-2.994,0.13-5.909-1.138-8.594-1.037 c-0.461,0.076-0.922,0.152-1.383,0.229l-0.511-0.101l-0.026,0.174c-1.586,0.281-3.197,0.532-4.809,0.788 c0.485-0.507,0.945-1.038,1.407-1.673c-0.024-0.102-0.024-0.203-0.052-0.304c1.254-0.431,2.531-0.937,3.89-1.543 c-0.511-3.852-2.79,0.783-4.069-0.255c0-0.329,0.027-0.658,0.051-0.964c0.435-0.051,0.949-0.378,0.998-1.365 c-0.256,0.124-0.51,0.152-0.792,0.152c0.229-1.166,0.563-2.306,0.792-3.445c0.307-0.051,0.59-0.102,0.896-0.127 c0.485-0.051,0.922,0.381,1.355,0.734l0.229,0.81l0.359,1.065l-0.308-1.167l-0.23-0.656c0.257,0.201,0.513,0.403,0.769,0.454 c2.122,0.404,3.66-0.608,5.142-1.038c0.128-0.126,0.204-0.806,0.204-1.39L438.02,325c-0.025,0-0.025,0-0.051,0 c1.945-1,3.913-0.031,5.885-0.311c1.943-0.303,4.04-0.569,6.164-1.102c0.154,0.075,0.308,0.17,0.434-0.009 c1.254-0.329,2.533-0.61,3.786-0.992c3.607-1.038,7.267-2.178,10.642-3.065c7.239-1.217,24.99-2.874,47.066-5.077 C511.92,314.444,505.961,313.872,500.025,313.289z M472.681,278.012l1.79-0.937l-0.127,0.76l-1.79,0.937L472.681,278.012z M471.043,256.435c0.078-0.052,0.154,0.152,0.231,0.229c-0.128,0.201-0.257,0.556-0.333,0.607 c-0.102,0.075-0.179-0.128-0.257-0.228C470.813,256.838,470.941,256.51,471.043,256.435z M469.432,255.956l-0.255,0.657 l-0.152-0.38L469.432,255.956z M438.302,194.516c0.308,0.025,0.589-0.941,0.896-0.968c-0.128,0.279-0.205,0.452-0.205,0.452 h0.588c-0.714,2-1.433,1.499-2.122,1.651c-0.204-0.457-0.485-0.581-0.692-1.061C437.047,194.461,437.816,194.466,438.302,194.516 z M436.025,198.365l1.15-0.405l-0.076,0.328l-1.151,0.407L436.025,198.365z M430.295,198.644l-0.024,0.405l-0.155-0.101 L430.295,198.644z M424.975,188.488l1.791-0.911l-0.129,0.759l-1.789,0.913L424.975,188.488z M423.337,166.935 c0.077-0.075,0.155,0.128,0.231,0.204c-0.127,0.229-0.256,0.557-0.334,0.634c-0.102,0.049-0.178-0.152-0.229-0.229 C423.106,167.316,423.234,167.012,423.337,166.935z M421.727,166.455l-0.256,0.634l-0.154-0.356L421.727,166.455z M353.02,111.881c0.025,0,0.025,0,0.025,0c-0.025,0.023-0.025,0.023-0.051,0.023C352.994,111.881,353.02,111.881,353.02,111.881z M54.785,219.891c-0.282-0.05-0.588-0.262-0.871-0.236c0.103-0.277,0.179-1.654,0.179-1.654h-0.562 c0.691,0,1.407-0.322,2.097-0.471c0.206,0.479,0.487,1.18,0.716,1.687C56.038,219.341,55.271,219.942,54.785,219.891z M57.086,216.043l-1.15,0.405l0.076-0.328l1.125-0.407L57.086,216.043z M62.792,215.762l0.025-0.405l0.154,0.101L62.792,215.762z M68.112,225.918l-1.79,0.911l0.151-0.759l1.791-0.911L68.112,225.918z M69.775,247.471c-0.103,0.074-0.154-0.127-0.257-0.204 c0.129-0.228,0.257-0.556,0.36-0.632c0.076-0.052,0.153,0.152,0.23,0.227C69.979,247.091,69.852,247.391,69.775,247.471z M71.386,247.952l0.23-0.633l0.153,0.354L71.386,247.952z M101.211,179.423l0.026-0.152l-1.305,0.075l0.18,0.178 c-0.436,0.025-0.869,0.075-1.331,0.126c0.257-0.126,0.537-0.253,0.793-0.379c-0.128-0.152-0.23-0.888-0.331-0.992 c0.664,0.104,1.304-0.279,1.943-0.279c0.025,0,0.025,0,0.051,0c0.179,0,0.358,0.711,0.538,0.735 C101.595,178.735,101.391,179.397,101.211,179.423z M81.796,314.784l-1.815,0.912l0.153-0.761l1.791-0.911L81.796,314.784z M143.036,386.049c0.255-0.203,0.536-0.608,0.843-1.24c1.049-0.051,1.996,0.023,2.583,1.114c2.481-1.622,4.222,0.456,6.268,0.15 c0.102,0.053,0.206,0.128,0.281,0.205C149.711,386.379,146.437,386.126,143.036,386.049z M153.728,391.392c0,0,0,0-0.026,0 c0.026,0,0.051,0,0.077-0.023C153.753,391.392,153.753,391.392,153.728,391.392z M286.793,106.486l0.129,0.709 c-0.025,0-0.051,0.024-0.077,0.024c-0.257-0.176-0.486-0.379-0.716-0.632C286.358,106.535,286.563,106.51,286.793,106.486z M175.673,385.163c-0.485,0.026-1.354,0.354-1.662,0.176c-0.127-0.102-0.05-0.657-0.23-0.657c-0.382-0.052-0.92,0.38-1.304,0.354 c-1.203-0.074-2.661-0.227-4.066-0.203c-1.153,0.027-2.303-0.202-3.377-0.453c0.103-0.203,0.229-0.585,0.358-1.167 c-0.101,0.076-0.23,0.051-0.358,0c1.253-0.329,2.507-0.682,2.916,0.178c1.791,0.128,3.812,0.128,5.908,0.128 c0.283,0.304,0.794,0.479,1.229,0.101c0.256,0.277,0.614,0.519,0.997,0.544c0.716,0.408,1.766-0.162,1.407-0.162c0,0,0,0,0.025,0 c0.588,0,1.305,0.949,2.072,1.125C178.257,385.15,176.927,385.087,175.673,385.163z M176.852,388.327 c-0.077,0.025-0.153,0.052-0.23,0.077c-0.026,0-0.026,0-0.026-0.025c0.026-0.026,0.052-0.026,0.103-0.052 C176.75,388.327,176.8,388.327,176.852,388.327z M166.951,387.34c-0.077,0.103-0.179,0.152-0.28,0.178 c-0.026-0.05-0.078-0.101-0.103-0.151c0.077,0,0.154,0,0.23,0C166.85,387.366,166.901,387.34,166.951,387.34z M149.542,130.499 v0.117c-0.113-0.018-0.229-0.029-0.342-0.045C149.313,130.549,149.428,130.525,149.542,130.499z M140.963,178.484 c0.818-0.051,1.611-0.077,2.378-0.101c-1.048,0.253-2.045,0.405-2.787,0.152C140.707,178.51,140.835,178.484,140.963,178.484z M122.924,243.459v1.014c-0.092-0.014-0.184-0.029-0.276-0.041L122.924,243.459z M163.856,380.022 c-0.256-0.026-0.511-0.051-0.741-0.051c-0.513-0.127-0.999-0.382-1.408-0.787c0.538-0.581,1.074-0.074,1.433-0.859 c1.458,0.228,2.916,0.507,4.349,0.758c-0.639,0.203-1.253-0.125-1.969,0.813c-0.206,0.024-0.077-0.509-0.282-0.481 C164.803,379.819,164.317,379.972,163.856,380.022z M158.894,401.624c0,0,0,0-0.024-0.025c0.024,0,0.049,0,0.075,0 C158.919,401.599,158.919,401.624,158.894,401.624z M161.657,392.023c-0.205,0.103-0.282,0.054-0.282-0.072 c0.23-0.076,0.46-0.13,0.665-0.153C161.913,391.875,161.785,391.923,161.657,392.023z M161.503,386c0.078,0,0.128,0,0.205,0 c0.64,0,1.254,0.811,1.791,1.088c0.18-0.203,0.334,0,0.486-0.101c0.256-0.025,0.512,0.124,0.742,0.1 c0.026,0.127,0.026,0.342,0,0.494c-0.512,0.354-1.022-0.181-1.56-0.233C162.603,387.145,162.041,386,161.503,386z M163.396,401.117c0.921-0.05,1.816-0.101,2.686-0.125C165.085,401.422,164.214,401.32,163.396,401.117z M166.824,402.291 c-0.588,0.328-0.153-0.525,0.026-1.207c0.153,0,0.282,0,0.435,0c0.46,0,0.921,0.171,1.356,0.274 C168.051,401.562,167.463,401.833,166.824,402.291z M172.017,394.508c0.051-0.558,0.307-0.709,0.46-1.113 c-0.511-0.332-1.919,1.569-2.328,1.087l0.359-0.505c0.461-0.128,0.921-0.381,1.202-0.659c-0.078-0.051-0.154-0.126-0.23-0.178 c0.741-0.126,1.355-0.102,1.636,0.456c0.076,0,0.154,0.026,0.257,0.026C172.912,393.799,172.427,393.646,172.017,394.508z M173.5,388.605c-0.716,1.116-1.381,0.609-2.123,0.938c-1.202-0.179-2.354-0.305-3.25-0.71c0.077-0.102,0.179-0.229,0.257-0.455 c-0.257,0.126-0.514,0.126-0.819,0.151c-0.231-0.151-0.435-0.354-0.615-0.582c0.052-0.178,0.103-0.38,0.128-0.633 c0.205-0.025,0.409-0.051,0.614-0.101c0.332,0.05,0.666,0.05,1.024,0c0.076,0.024,0.152,0.024,0.23,0.05 c0.998,0.381,2.098,0.633,3.223,0.787c0.486,0.175,0.997,0.251,1.508,0.275c0.282,0.178,0.614,0.278,0.922,0.356 C174.165,388.961,173.755,389.089,173.5,388.605z M174.524,393.787l-0.743,1.153c-0.026,0-0.05,0-0.076,0 c-0.051,0,0.076-0.901,0.152-1.356c0.257,0,0.538,0.023,0.794,0.023C174.626,393.686,174.575,393.712,174.524,393.787z M179.69,403.496l-0.818,1.609c-0.128-0.557,0.23-1.349,0.153-1.831c-0.563,0.863-1.279,0.201-1.842,1.367 c0.053-0.558,0.308-0.649,0.435-1.055c-0.485-0.329-1.893,1.59-2.301,1.108l0.356-0.498c0.461-0.152,0.922-0.96,1.203-1.264 c-0.154-0.101-0.306-0.934-0.46-0.934h4.018C180.202,402,179.972,403.064,179.69,403.496z M182.069,403.035 c0.026-0.077,0.077-0.148,0.128-0.224c0.28,0.05,0.537,0.127,0.82,0.202c-0.052,0.026-0.104,0.071-0.154,0.071 c0.23,0.023,0.434,0.045,0.639,0.045c0.024,0,0.024,0,0.05,0C182.888,403.813,182.478,403.288,182.069,403.035z M183.451,403.801 c0-0.228,0.102-0.404,0.229-0.607c0.206,0.053,0.384,0.101,0.563,0.154C183.988,403.474,183.706,403.623,183.451,403.801z M181.379,383.414c1.022,0,2.046,0,3.018,0.026c0.359,0.025,0.64,0.127,0.921,0.229 C184.013,383.567,182.683,383.466,181.379,383.414z M185.421,393.799c0-0.052,0.024-0.103,0.024-0.152c0.026,0,0.026,0,0.052,0 C185.472,393.696,185.446,393.724,185.421,393.799z M190.587,404.005c0.025-0.254,0.102-0.557,0.23-0.859 c0.077,0,0.18-0.028,0.282-0.028C190.895,403.348,190.741,403.649,190.587,404.005z M198.926,404.132 c0.026-0.331,0.051-0.584,0.128-0.784c0-0.027,0.026-0.027,0.026-0.027c0.23,0,0.486-0.026,0.716-0.05 c0.409,0.353,0.818-0.384,1.176-0.636c0.23-0.025,0.486-0.635,0.716-0.635h0.691c0.026,0,0.026,0.686,0.026,0.734 C201.306,402.836,200.154,403.649,198.926,404.132z M202.457,402.734c0.025-0.049,0.051-0.734,0.051-0.734h2.557 c0.104,0,0.205,0.394,0.307,0.444C204.426,402.37,203.454,402.662,202.457,402.734z M205.295,394.381 c-0.026-0.204-0.026-0.38,0-0.481c-0.23,0.304-0.486,0.456-0.767,0.582c-0.257-0.023-0.512-0.023-0.768-0.023 c0.511-0.152,1.048-0.432,1.535-0.559c0.179-0.051,0.384-0.075,0.539-0.051c0.127,0.026,0.254,0.102,0.383,0.152 C205.91,394.077,205.604,394.203,205.295,394.381z M210.591,405.018c-0.102-0.101-0.18-0.709-0.127-0.886 c-0.537,0.734-1.331,0.658-1.714,0.961c0.025-0.152,0.025-0.253,0.025-0.354c0.537-0.15,1.152-0.481,1.689-0.606 c0.179-0.05,0.357-0.077,0.536-0.05c0.18,0.023,0.333,0.101,0.513,0.175C211.18,404.714,210.821,405.396,210.591,405.018z M211.436,405.574c0.05-0.404,0.229-0.784,0.408-1.115c0.154,0.104,0.308,0.204,0.435,0.306 C212.023,404.917,211.742,405.17,211.436,405.574z M214.71,405.675c0.178,0.025,0.358,0.025,0.511,0.025 C215.093,405.954,214.938,406.056,214.71,405.675z M221.82,406.157c-0.588,0.153-0.485-0.429-0.384-1.014 c0.18,0,0.358,0,0.538,0.026l-0.077,0.378L222,405.17c0.103,0,0.205,0,0.307,0.023 C222.102,405.372,221.922,405.651,221.82,406.157z M225.119,407.017l-0.102-0.706c0.026,0,0.051-0.028,0.077-0.052 c0.23,0.202,0.486,0.405,0.716,0.656C225.581,406.968,225.35,406.993,225.119,407.017z M249.867,117.697v0.073 c-0.133-0.008-0.272-0.014-0.395-0.014C249.607,117.731,249.738,117.713,249.867,117.697z M261.828,130.772 c0.024,0,0.051,0,0.051-0.024c0.025,0,0.051,0.024,0.051,0.024C261.904,130.772,261.879,130.772,261.828,130.772z M296.027,130.138c-0.203,0-0.409,0-0.615,0.051c0.104-0.126,0.181-0.328,0.206-0.658c-0.206,0.075-0.333-0.265-0.46,0.088 c-0.078,0.026-0.129-0.619-0.18-0.619c-0.512,0-1.023,0-1.535,0c0.256,0,0.487,0.342,0.691,0.14 c-0.129-0.05-0.256,0.259-0.383,0.207c1.328-0.302,2.557-0.541,4.116-0.541c0.052,0,0.077,0.237,0.103,0.389 c-0.716,0.025-1.406,0.091-2.072,0.447C295.898,129.819,295.977,130.011,296.027,130.138z M342.531,380.831 c0.715,0.052,1.433,0.128,2.123,0.229C343.861,381.034,343.146,380.959,342.531,380.831z M359.695,384.148 c-2.762-0.835-5.576-0.835-8.467-0.226c-0.23,0.051-0.461,0.1-0.691,0.151c-0.177-0.078-0.279-0.026-0.385,0.102 c-0.256,0.076-0.511,0.149-0.766,0.227c-0.256-0.279-0.537-0.53-0.844-0.76c0.588-0.329,1.125-0.784,1.559-1.442 c0.691,0.177,1.383,0.354,2.047,0.556c2.252,0.658,5.143-0.226,8.008-0.101c0.869,0.049,1.739,0.151,2.583,0.28 C361.664,383.111,360.617,383.44,359.695,384.148z M417.709,261.096c-0.69-0.102-1.355-0.202-2.02-0.329 c0.051-0.178,0.078-0.38,0.129-0.633c-0.182,0.202-0.385,0.378-0.564,0.581c-0.459-0.076-0.92-0.126-1.381-0.227l0.461-1.623 c1.253,0.229,2.531,0.431,3.811,0.633L417.709,261.096z M456.973,295.01c-0.254-0.025-0.535,0.199-0.791,0.176 c-0.203-0.404-0.41-0.735-0.588-1.142c0.178-0.077,0.463-0.19,0.793-0.318c0.281-0.048,0.586-0.094,0.87-0.145 c0.255,0.028,0.51-0.461,0.766-0.487c-0.101,0.278-0.178,0.906-0.202,0.906h0.587C457.945,294,457.461,294.859,456.973,295.01z M469.048,294.956c0.332,0.075,0.513,0.606,0.64,1.188c-0.331,0.027-0.663,0-1.021,0 C468.666,295.613,468.717,295.156,469.048,294.956z M464.753,296.12c0.075-0.43,0.203-0.812,0.511-1.164 c0.563,2.405,1.661-0.278,2.379,1.188C466.67,296.144,465.697,296.144,464.753,296.12z M469.33,308.148 c-0.41,0.026-0.844,0.053-1.254,0.053c0.818-0.076,1.688-0.179,2.584-0.28c0.461,0.051,0.92,0.102,1.355,0.179 C471.121,308.1,470.2,308.125,469.33,308.148z" style="fill-rule:evenodd;clip-rule:evenodd;"/></g><g><path d="M294.649,362.484h-28.396h-28.395c0,0,0-17.039,0-28.396 c-39.044,8.518-49.693-21.297-49.693-21.297c-7.098-14.197-14.198-21.297-14.198-21.297c-14.198-8.52,0-7.1,0-7.1 c14.198,0,21.297,14.199,21.297,14.199c12.778,21.297,34.785,17.748,42.594,14.197c0-7.1,2.839-17.746,7.099-21.297 c-31.236-3.549-56.792-21.295-56.792-56.792c0-35.494,7.099-42.593,14.198-49.692c-1.419-3.549-7.099-16.328,0-35.495 c0,0,14.198,0,28.396,21.297c7.099-7.099,28.395-7.099,35.494-7.099c7.1,0,28.396,0,35.496,7.099 c14.197-21.297,28.395-21.297,28.395-21.297c7.809,19.167,1.421,31.945,0,35.495c7.1,7.099,14.199,14.198,14.199,49.692 c0,35.497-25.557,53.243-56.793,56.792c4.26,3.551,7.1,15.619,7.1,21.297V362.484L294.649,362.484z" id="Cat_2_" style="fill:#ED1C24;"/></g></g></g><g id="Layer_1"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" ?><svg height="1024" width="2856.857" xmlns="http://www.w3.org/2000/svg"><path d="M552.73 332.135H311.557c-6.205 0-11.25 5.045-11.25 11.297v117.887c0 6.252 5.045 11.272 11.25 11.272h94.109v146.542c0 0-21.145 7.057-79.496 7.057-68.914 0-165.156-25.244-165.156-236.795 0-211.642 100.197-239.491 194.307-239.491 81.465 0 116.514 14.304 138.869 21.241 7.01 2.203 13.404-4.831 13.404-11.105L534.543 46.129999999999995c0-2.912-1.041-6.417-4.262-8.785C521.186 30.951999999999998 465.865 0 326.168 0 165.133 0 0 68.48699999999997 0 397.757 0 726.979 189.051 776 348.381 776c131.883 0 212.021-56.314 212.021-56.314 3.268-1.801 3.6-6.395 3.6-8.479V343.432C563.955 337.227 558.887 332.135 552.73 332.135zM1772.381 28.134000000000015h-135.695c-6.252 0-11.271 5.044-11.271 11.296v262.393h-211.619V39.42999999999995c0-6.252-5.068-11.296-11.178-11.296h-135.838c-6.111 0-11.084 5.044-11.084 11.296v710.473c0 6.299 5.021 11.32 11.084 11.32h135.838c6.203 0 11.178-5.068 11.178-11.32V446.067h211.619l-0.475 303.883c0 6.3 5.021 11.272 11.084 11.272h135.885c6.252 0 11.131-5.068 11.131-11.272l0.473-710.521C1783.607 33.178 1778.539 28.134000000000015 1772.381 28.134000000000015zM714.949 44.236999999999966c-48.357 0-87.574 39.572-87.574 88.403 0 48.855 39.217 88.428 87.574 88.428s87.527-39.572 87.527-88.428C802.477 83.80999999999995 763.307 44.236999999999966 714.949 44.236999999999966zM792.861 272.126c0-6.205-5.02-11.344-11.131-11.344H646.32c-6.348 0-11.746 6.394-11.746 12.67 0 0 0 394.654 0 469.867 0 13.735 8.572 17.903 19.703 17.903 0 0 57.688 0 121.959 0 13.311 0 16.814-6.536 16.814-18.188-0.094-25.197-0.094-123.808-0.094-142.942C792.861 581.905 792.861 272.126 792.861 272.126zM2297.973 261.84799999999996h-134.701c-6.158 0-11.084 5.092-11.084 11.344v348.31c0 0-34.244 25.197-82.934 25.197-48.547 0-61.525-22.024-61.525-69.719 0-47.553 0-303.835 0-303.835 0-6.252-5.068-11.345-11.131-11.345h-136.643c-6.252 0-11.178 5.093-11.178 11.345 0 0 0 185.521 0 326.807 0 141.284 78.766 175.906 186.99 175.906 88.854 0 160.609-49.115 160.609-49.115s3.363 25.766 5.068 28.844c1.422 3.078 5.447 6.158 9.852 6.158h86.58c6.158 0 11.178-5.069 11.178-11.321l0.379-477.278C2309.15 266.9390000000001 2304.129 261.84799999999996 2297.973 261.84799999999996zM2666.932 245.83899999999994c-76.539 0-128.592 34.148-128.592 34.148V39.42999999999995c0-6.252-5.068-11.296-11.131-11.296h-136.264c-6.109 0-11.131 5.044-11.131 11.296l-0.379 710.521c0 6.3 5.068 11.272 11.225 11.272 0 0 94.773 0 94.869 0 4.215 0 7.389-2.179 9.805-5.968 2.369-3.837 5.73-32.775 5.73-32.775s55.557 52.763 161.035 52.763c123.807 0 194.758-62.804 194.758-281.906C2856.859 274.51800000000003 2743.471 245.83899999999994 2666.932 245.83899999999994zM2613.791 646.225c-46.701-1.421-78.34-22.64-78.34-22.64v-225.07c0 0 31.307-19.206 69.672-22.593 48.547-4.31 95.438 10.326 95.438 126.13C2700.322 624.059 2679.199 648.166 2613.791 646.225zM1185.125 643.667c-5.969 0-21.219 2.368-36.85 2.368-49.92 0-66.971-23.256-66.971-53.331 0-30.218 0-199.85 0-199.85h101.926c6.252 0 11.178-5.044 11.178-11.343v-109.48c0.094-6.299-4.926-11.344-11.178-11.344h-101.926l-0.143-134.535c0-5.092-2.699-7.625-8.572-7.625H933.861c-5.352 0-8.336 2.391-8.336 7.578v139.035c0 0-69.576 16.79-74.266 18.188-4.641 1.326-8.051 5.684-8.051 10.822v87.408c0 6.252 5.068 11.344 11.178 11.344h71.139c0 0 0 91.34 0 210.222 0 156.109 109.553 171.455 183.439 171.455 33.723 0 74.076-10.988 80.848-13.356 4.074-1.421 6.395-5.637 6.395-10.136l0.047-96.101C1196.254 648.688 1190.998 643.572 1185.125 643.667z"/></svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" ?><svg height="48" id="home" viewBox="0 0 48 48" width="48" xmlns="http://www.w3.org/2000/svg"><defs><style>
|
|
2
|
+
.vi-primary {
|
|
3
|
+
fill: #FF6E6E;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.vi-primary, .vi-accent {
|
|
7
|
+
stroke: #fff;
|
|
8
|
+
stroke-linecap: round;
|
|
9
|
+
stroke-width: 0;
|
|
10
|
+
fill-rule: evenodd;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.vi-accent {
|
|
14
|
+
fill: #0C0058;
|
|
15
|
+
}
|
|
16
|
+
</style></defs><path class="vi-primary" d="M5,24L24,5,43,24H38V40H10V24H5Z"/><path class="vi-accent" d="M19,40V26H29V40H19Z"/></svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?xml version="1.0" ?><svg height="48" id="import" viewBox="0 0 48 48" width="48" xmlns="http://www.w3.org/2000/svg"><defs><style>
|
|
2
|
+
.vi-primary {
|
|
3
|
+
fill: #FF6E6E;
|
|
4
|
+
stroke: #fff;
|
|
5
|
+
stroke-linecap: round;
|
|
6
|
+
stroke-width: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.vi-accent {
|
|
10
|
+
fill: #0C0058;
|
|
11
|
+
fill-rule: evenodd;
|
|
12
|
+
}
|
|
13
|
+
</style></defs><rect class="vi-primary" height="28" width="28" x="15" y="10"/><path class="vi-accent" d="M4,25H27l-3,3,2,2,6-6V23l-6-6-2,2,3,3H4v3Z"/></svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" ?><svg height="48" id="menu" viewBox="0 0 48 48" width="48" xmlns="http://www.w3.org/2000/svg"><defs><style>
|
|
2
|
+
.vi-primary {
|
|
3
|
+
fill: #FF6E6E;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.vi-primary, .vi-accent {
|
|
7
|
+
stroke: #fff;
|
|
8
|
+
stroke-linecap: round;
|
|
9
|
+
stroke-width: 0;
|
|
10
|
+
fill-rule: evenodd;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.vi-accent {
|
|
14
|
+
fill: #0C0058;
|
|
15
|
+
}
|
|
16
|
+
</style></defs><path class="vi-primary" d="M9,12H39v4H9V12ZM9,22H39v4H9V22ZM9,32H39v4H9V32Z"/><path class="vi-accent" d="M9,12h4v4H9V12ZM9,22h4v4H9V22ZM9,32h4v4H9V32ZM35,12h4v4H35V12Zm0,10h4v4H35V22Zm0,10h4v4H35V32Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" ?><svg height="48" id="graph-bar" viewBox="0 0 48 48" width="48" xmlns="http://www.w3.org/2000/svg"><defs><style> .vi-primary { fill: #FF6E6E; } .vi-primary, .vi-accent { stroke: #fff; stroke-linecap: round; stroke-width: 0; } .vi-accent { fill: #0C0058; } </style></defs><rect class="vi-accent" height="4" width="36" x="6" y="35"/><path class="vi-primary" d="M9,20h5V35H9V20Zm8,5h5V35H17V25Zm8-9h5V35H25V16Zm8-7h5V35H33V9Z"/></svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<circle cx="12" cy="12" r="4" stroke="currentColor" stroke-width="1.8"/>
|
|
3
|
+
<path d="M12 2.5V5.1M12 18.9V21.5M21.5 12H18.9M5.1 12H2.5M18.72 5.28L16.88 7.12M7.12 16.88L5.28 18.72M18.72 18.72L16.88 16.88M7.12 7.12L5.28 5.28" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" ?><svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M12 2A10.13 10.13 0 0 0 2 12a10 10 0 0 0 4 7.92V20h.1a9.7 9.7 0 0 0 11.8 0h.1v-.08A10 10 0 0 0 22 12 10.13 10.13 0 0 0 12 2zM8.07 18.93A3 3 0 0 1 11 16.57h2a3 3 0 0 1 2.93 2.36 7.75 7.75 0 0 1-7.86 0zm9.54-1.29A5 5 0 0 0 13 14.57h-2a5 5 0 0 0-4.61 3.07A8 8 0 0 1 4 12a8.1 8.1 0 0 1 8-8 8.1 8.1 0 0 1 8 8 8 8 0 0 1-2.39 5.64z"/><path d="M12 6a3.91 3.91 0 0 0-4 4 3.91 3.91 0 0 0 4 4 3.91 3.91 0 0 0 4-4 3.91 3.91 0 0 0-4-4zm0 6a1.91 1.91 0 0 1-2-2 1.91 1.91 0 0 1 2-2 1.91 1.91 0 0 1 2 2 1.91 1.91 0 0 1-2 2z"/></svg>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Railswatch
|
|
4
|
+
class BaseController < ActionController::Base
|
|
5
|
+
include Railswatch::Concerns::CsvExportable
|
|
6
|
+
|
|
7
|
+
layout 'railswatch/layouts/railswatch'
|
|
8
|
+
|
|
9
|
+
before_action :verify_access
|
|
10
|
+
after_action :set_permissive_csp
|
|
11
|
+
|
|
12
|
+
if Railswatch.http_basic_authentication_enabled
|
|
13
|
+
http_basic_authenticate_with \
|
|
14
|
+
name: Railswatch.http_basic_authentication_user_name,
|
|
15
|
+
password: Railswatch.http_basic_authentication_password
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def url_options
|
|
19
|
+
Railswatch.url_options.nil? ? super : Railswatch.url_options
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def verify_access
|
|
25
|
+
result = Railswatch.verify_access_proc.call(self)
|
|
26
|
+
redirect_to('/', error: 'Access Denied', status: 401) unless result
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def set_permissive_csp
|
|
30
|
+
response.headers['Content-Security-Policy'] =
|
|
31
|
+
"default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; " \
|
|
32
|
+
"style-src 'self' 'unsafe-inline' https:"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'csv'
|
|
4
|
+
module Railswatch
|
|
5
|
+
module Concerns
|
|
6
|
+
module CsvExportable
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
def export_to_csv(filename, data)
|
|
10
|
+
send_data generate_csv(data),
|
|
11
|
+
filename: "#{filename}_#{Time.zone.today}.csv",
|
|
12
|
+
type: 'text/csv',
|
|
13
|
+
disposition: 'attachment'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def generate_csv(data)
|
|
19
|
+
CSV.generate(headers: true) do |csv|
|
|
20
|
+
next if data.blank?
|
|
21
|
+
|
|
22
|
+
headers = data.first.keys
|
|
23
|
+
csv << headers.map(&:to_s)
|
|
24
|
+
data.each do |entry|
|
|
25
|
+
csv << headers.map { |header| entry[header].to_s }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_controller'
|
|
4
|
+
|
|
5
|
+
module Railswatch
|
|
6
|
+
class RailswatchController < BaseController
|
|
7
|
+
protect_from_forgery except: :recent
|
|
8
|
+
|
|
9
|
+
if Railswatch.enabled
|
|
10
|
+
def index
|
|
11
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :requests)
|
|
12
|
+
assign_dashboard_reports(@datasource.db)
|
|
13
|
+
@widgets = build_dashboard_widgets
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def resources
|
|
17
|
+
@datasource = Railswatch::DataSource.new(
|
|
18
|
+
**prepare_query(params),
|
|
19
|
+
type: :resources,
|
|
20
|
+
days: Railswatch::Utils.days(Railswatch.system_monitor_duration)
|
|
21
|
+
)
|
|
22
|
+
db = @datasource.db
|
|
23
|
+
|
|
24
|
+
@resources_report = Railswatch::Reports::ResourcesReport.new(db)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def summary # rubocop:disable Metrics/MethodLength
|
|
28
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :requests)
|
|
29
|
+
db = @datasource.db
|
|
30
|
+
|
|
31
|
+
@throughput_report_data = Railswatch::Reports::ThroughputReport.new(db).data
|
|
32
|
+
@response_time_report_data = Railswatch::Reports::ResponseTimeReport.new(db).data
|
|
33
|
+
@data = Railswatch::Reports::BreakdownReport.new(db, title: 'Requests').data
|
|
34
|
+
respond_to do |format|
|
|
35
|
+
format.js
|
|
36
|
+
format.any do
|
|
37
|
+
render plain: "Doesn't open in new window. Wait until full page load."
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def trace
|
|
43
|
+
@record = Railswatch::Models::RequestRecord.find_by(request_id: params[:id])
|
|
44
|
+
@data = Railswatch::Reports::TraceReport.new(request_id: params[:id]).data
|
|
45
|
+
respond_to do |format|
|
|
46
|
+
format.js
|
|
47
|
+
format.any do
|
|
48
|
+
render plain: "Doesn't open in new window. Wait until full page load."
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def crashes
|
|
54
|
+
@datasource = Railswatch::DataSource.new(**prepare_query({ status_eq: 500 }), type: :requests)
|
|
55
|
+
@table = Widgets::CrashesTable.new(@datasource)
|
|
56
|
+
|
|
57
|
+
respond_to do |format|
|
|
58
|
+
format.html
|
|
59
|
+
format.csv do
|
|
60
|
+
export_to_csv 'error_report', @table.data
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def requests
|
|
66
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :requests)
|
|
67
|
+
@table = Widgets::RequestsTable.new(@datasource)
|
|
68
|
+
|
|
69
|
+
respond_to do |format|
|
|
70
|
+
format.html
|
|
71
|
+
format.csv do
|
|
72
|
+
export_to_csv 'requests_report', @table.data
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def recent
|
|
78
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :requests)
|
|
79
|
+
@table = Widgets::RecentRequestsTable.new(@datasource)
|
|
80
|
+
|
|
81
|
+
respond_to do |format|
|
|
82
|
+
format.html
|
|
83
|
+
format.csv do
|
|
84
|
+
export_to_csv 'recent_requests_report', @table.data
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def slow
|
|
90
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :requests)
|
|
91
|
+
@table = Widgets::SlowRequestsTable.new(@datasource)
|
|
92
|
+
|
|
93
|
+
respond_to do |format|
|
|
94
|
+
format.html
|
|
95
|
+
format.csv do
|
|
96
|
+
export_to_csv 'slow_requests_report', @table.data
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def sidekiq
|
|
102
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :sidekiq)
|
|
103
|
+
@widgets = [
|
|
104
|
+
Widgets::ThroughputChart.new(@datasource, subtitle: 'Sidekiq Workers Throughput Report', legend: 'Jobs',
|
|
105
|
+
units: 'jobs / minute'),
|
|
106
|
+
Widgets::ResponseTimeChart.new(@datasource, subtitle: 'Average Execution Time'),
|
|
107
|
+
Widgets::SidekiqJobsTable.new(@datasource)
|
|
108
|
+
]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def delayed_job
|
|
112
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :delayed_job)
|
|
113
|
+
@widgets = [
|
|
114
|
+
Widgets::ThroughputChart.new(@datasource, subtitle: 'Delayed::Job Workers Throughput Report', legend: 'Jobs',
|
|
115
|
+
units: 'jobs / minute'),
|
|
116
|
+
Widgets::ResponseTimeChart.new(@datasource, subtitle: 'Average Execution Time'),
|
|
117
|
+
Widgets::DelayedJobTable.new(@datasource)
|
|
118
|
+
]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def custom
|
|
122
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :custom)
|
|
123
|
+
@widgets = [
|
|
124
|
+
Widgets::CustomEventsTable.new(@datasource),
|
|
125
|
+
Widgets::ThroughputChart.new(@datasource, subtitle: 'Custom Events Throughput Report', legend: 'Events',
|
|
126
|
+
units: 'events / minute'),
|
|
127
|
+
Widgets::ResponseTimeChart.new(@datasource, subtitle: 'Average Execution Time')
|
|
128
|
+
]
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def grape
|
|
132
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :grape)
|
|
133
|
+
@widgets = [
|
|
134
|
+
Widgets::ThroughputChart.new(@datasource, subtitle: 'Grape Throughput Report'),
|
|
135
|
+
Widgets::GrapeRequestsTable.new(@datasource)
|
|
136
|
+
]
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def rake
|
|
140
|
+
@datasource = Railswatch::DataSource.new(**prepare_query(params), type: :rake)
|
|
141
|
+
@widgets = [
|
|
142
|
+
Widgets::RakeTasksTable.new(@datasource),
|
|
143
|
+
Widgets::ThroughputChart.new(@datasource, subtitle: 'Rake Throughput Report', legend: 'Tasks',
|
|
144
|
+
units: 'tasks / minute')
|
|
145
|
+
]
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
private
|
|
149
|
+
|
|
150
|
+
def prepare_query(query = {})
|
|
151
|
+
Railswatch::Rails::QueryBuilder.compose_from(query)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def assign_dashboard_reports(db)
|
|
155
|
+
@overview = Railswatch::Reports::OverviewReport.new(db).data
|
|
156
|
+
@traffic_leaders = top_request_rows(db, :count)
|
|
157
|
+
@latency_leaders = top_request_rows(db, :p95_duration)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def top_request_rows(db, sort)
|
|
161
|
+
Railswatch::Reports::RequestsReport.new(
|
|
162
|
+
db,
|
|
163
|
+
group: :controller_action,
|
|
164
|
+
sort: sort
|
|
165
|
+
).data.first(5)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def build_dashboard_widgets
|
|
169
|
+
Railswatch.dashboard_charts.map do |row|
|
|
170
|
+
row.is_a?(Array) ? build_widget_row(row) : build_widget(row)
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def build_widget_row(row)
|
|
175
|
+
row.map { |class_name| build_widget(class_name) }
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def build_widget(class_name)
|
|
179
|
+
Widgets.const_get(class_name).new(@datasource)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import ApexCharts from 'apexcharts';
|
|
2
|
+
|
|
3
|
+
ApexCharts.prototype.updateRollingWindow = function(newData, { windowSizeMs }) {
|
|
4
|
+
let data = this.w.config.series[0].data;
|
|
5
|
+
|
|
6
|
+
// drop old points outside of the rolling window
|
|
7
|
+
const windowStart = Date.now() - windowSizeMs;
|
|
8
|
+
while (data.length > 0 && data[0][0] < windowStart) {
|
|
9
|
+
data.shift();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// create index of remaining data
|
|
13
|
+
const dataMap = new Map();
|
|
14
|
+
data.forEach((point, index) => dataMap.set(point[0], index));
|
|
15
|
+
const lastTimestamp = data.length > 0 ? data[data.length - 1][0] : -Infinity;
|
|
16
|
+
|
|
17
|
+
// merge existing data (it can change), append new data
|
|
18
|
+
const pointsToAdd = [];
|
|
19
|
+
newData.forEach(([timestamp, value]) => {
|
|
20
|
+
const index = dataMap.get(timestamp);
|
|
21
|
+
if (index !== undefined) {
|
|
22
|
+
data[index][1] = value;
|
|
23
|
+
} else if (timestamp > lastTimestamp) {
|
|
24
|
+
pointsToAdd.push([timestamp, value]);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
this.appendData([{ data: pointsToAdd }], false);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default ApexCharts;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Idiomorph } from 'idiomorph';
|
|
2
|
+
import ms from 'ms';
|
|
3
|
+
|
|
4
|
+
class RailswatchAutoupdate extends HTMLElement {
|
|
5
|
+
connectedCallback() {
|
|
6
|
+
this.checkbox = this.querySelector('input[type="checkbox"]');
|
|
7
|
+
this.intervalMs = this.parseIntervalAttribute();
|
|
8
|
+
this.initializeCheckboxState();
|
|
9
|
+
this.setupCheckboxListener();
|
|
10
|
+
this.startPolling();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
parseIntervalAttribute() {
|
|
14
|
+
return ms(this.getAttribute('interval') || '3s');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
initializeCheckboxState() {
|
|
18
|
+
const key = this.storageKey();
|
|
19
|
+
if (localStorage.getItem(key) === null) {
|
|
20
|
+
localStorage.setItem(key, 'true');
|
|
21
|
+
}
|
|
22
|
+
this.checkbox.checked = localStorage.getItem(key) === 'true';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setupCheckboxListener() {
|
|
26
|
+
this.checkbox.addEventListener('change', () => {
|
|
27
|
+
localStorage.setItem(this.storageKey(), this.checkbox.checked);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
startPolling() {
|
|
32
|
+
setInterval(() => this.poll(), this.intervalMs);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async poll() {
|
|
36
|
+
if (!this.checkbox.checked) return;
|
|
37
|
+
|
|
38
|
+
const html = await this.fetchPage();
|
|
39
|
+
const newDoc = this.parseHtml(html);
|
|
40
|
+
this.morphPage(newDoc);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async fetchPage() {
|
|
44
|
+
const res = await fetch(window.location.href, {
|
|
45
|
+
headers: {
|
|
46
|
+
'X-CSRF-Token': document.querySelector("[name='csrf-token']").content,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return await res.text();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
parseHtml(html) {
|
|
53
|
+
const parser = new DOMParser();
|
|
54
|
+
return parser.parseFromString(html, 'text/html');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
morphPage(newDoc) {
|
|
58
|
+
Idiomorph.morph(document.body, newDoc.body, {
|
|
59
|
+
callbacks: {
|
|
60
|
+
beforeNodeMorphed: (oldNode, newNode) => {
|
|
61
|
+
// skip morphing the autoupdate component itself
|
|
62
|
+
if (oldNode === this) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (oldNode.hasAttribute && oldNode.hasAttribute('data-skip-autoupdate')) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
document.dispatchEvent(new Event('railswatch:content-updated'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
storageKey() {
|
|
75
|
+
return `railswatch-autoupdate:${window.location.pathname}`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
customElements.define('railswatch-autoupdate', RailswatchAutoupdate);
|