From dc2a6b4638c95ed6f47a57f54c9f54507cccb008 Mon Sep 17 00:00:00 2001 From: Michael Green <84688932+michael-j-green@users.noreply.github.com> Date: Sat, 22 Jul 2023 00:46:26 +1000 Subject: [PATCH] feat: add an upload button to ease adding game files (#29) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: API support for uploading ROM’s * fix: downloads of files larger than approx 300MB would cause an out of memory error * fix: resolved broken bios path * feat: added an upload button --- gaseous-server/Controllers/GamesController.cs | 18 +--- gaseous-server/Controllers/RomsController.cs | 80 ++++++++++++++++++ gaseous-server/Program.cs | 18 ++++ gaseous-server/wwwroot/images/cog.jpg | Bin 90353 -> 0 bytes gaseous-server/wwwroot/images/settings.svg | 15 ++++ gaseous-server/wwwroot/images/upload.svg | 23 +++++ gaseous-server/wwwroot/index.html | 8 +- gaseous-server/wwwroot/pages/EmulatorJS.html | 4 +- .../wwwroot/pages/dialogs/rominfo.html | 3 +- .../wwwroot/pages/dialogs/upload.html | 72 ++++++++++++++++ gaseous-server/wwwroot/pages/emulator.html | 2 +- .../wwwroot/scripts/dropzone.min.js | 1 + .../wwwroot/styles/dropzone.min.css | 1 + gaseous-server/wwwroot/styles/style.css | 42 ++++++++- gaseous-tools/Config.cs | 9 ++ 15 files changed, 275 insertions(+), 21 deletions(-) create mode 100644 gaseous-server/Controllers/RomsController.cs delete mode 100644 gaseous-server/wwwroot/images/cog.jpg create mode 100644 gaseous-server/wwwroot/images/settings.svg create mode 100644 gaseous-server/wwwroot/images/upload.svg create mode 100644 gaseous-server/wwwroot/pages/dialogs/upload.html create mode 100644 gaseous-server/wwwroot/scripts/dropzone.min.js create mode 100644 gaseous-server/wwwroot/styles/dropzone.min.css diff --git a/gaseous-server/Controllers/GamesController.cs b/gaseous-server/Controllers/GamesController.cs index ca019eb..d94ed6a 100644 --- a/gaseous-server/Controllers/GamesController.cs +++ b/gaseous-server/Controllers/GamesController.cs @@ -768,21 +768,9 @@ namespace gaseous_server.Controllers string romFilePath = rom.Path; if (System.IO.File.Exists(romFilePath)) { - string filename = Path.GetFileName(romFilePath); - string filepath = romFilePath; - byte[] filedata = System.IO.File.ReadAllBytes(filepath); - string contentType = "application/octet-stream"; - - var cd = new System.Net.Mime.ContentDisposition - { - FileName = filename, - Inline = false, - }; - - Response.Headers.Add("Content-Disposition", cd.ToString()); - Response.Headers.Add("Cache-Control", "public, max-age=604800"); - - return File(filedata, contentType); + FileStream content = new FileStream(romFilePath, FileMode.Open, FileAccess.Read, FileShare.Read); + FileStreamResult response = File(content, "application/octet-stream", rom.Name); + return response; } else { diff --git a/gaseous-server/Controllers/RomsController.cs b/gaseous-server/Controllers/RomsController.cs new file mode 100644 index 0000000..7a4ad6b --- /dev/null +++ b/gaseous-server/Controllers/RomsController.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using gaseous_server.Classes.Metadata; +using gaseous_tools; +using IGDB.Models; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.CodeAnalysis.Scripting; +using Org.BouncyCastle.Asn1.X509; +using static gaseous_server.Classes.Metadata.AgeRatings; + +namespace gaseous_server.Controllers +{ + [Route("api/v1/[controller]")] + [ApiController] + public class RomsController : ControllerBase + { + [HttpPost] + [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] + [RequestSizeLimit(long.MaxValue)] + [DisableRequestSizeLimit, RequestFormLimits(MultipartBodyLengthLimit = long.MaxValue, ValueLengthLimit = int.MaxValue)] + public async Task UploadRom(List files) + { + Guid sessionid = Guid.NewGuid(); + + string workPath = Path.Combine(Config.LibraryConfiguration.LibraryUploadDirectory, sessionid.ToString()); + + long size = files.Sum(f => f.Length); + + List> UploadedFiles = new List>(); + + foreach (IFormFile formFile in files) + { + if (formFile.Length > 0) + { + Guid FileId = Guid.NewGuid(); + + string filePath = Path.Combine(workPath, Path.GetFileName(formFile.FileName)); + + if (!Directory.Exists(workPath)) + { + Directory.CreateDirectory(workPath); + } + + using (var stream = System.IO.File.Create(filePath)) + { + await formFile.CopyToAsync(stream); + + Dictionary UploadedFile = new Dictionary(); + UploadedFile.Add("id", FileId.ToString()); + UploadedFile.Add("originalname", Path.GetFileName(formFile.FileName)); + UploadedFile.Add("fullpath", filePath); + UploadedFiles.Add(UploadedFile); + } + } + } + + // Process uploaded files + // Don't rely on or trust the FileName property without validation. + + foreach (Dictionary UploadedFile in UploadedFiles) + { + Classes.ImportGame.ImportGameFile((string)UploadedFile["fullpath"]); + } + + if (Directory.Exists(workPath)) + { + Directory.Delete(workPath, true); + } + + return Ok(new { count = files.Count, size }); + } + } +} \ No newline at end of file diff --git a/gaseous-server/Program.cs b/gaseous-server/Program.cs index 7a7f1b7..9fb189e 100644 --- a/gaseous-server/Program.cs +++ b/gaseous-server/Program.cs @@ -1,7 +1,9 @@ using System.Text.Json.Serialization; using gaseous_server; using gaseous_tools; +using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Server.Kestrel.Core; Logging.Log(Logging.LogType.Information, "Startup", "Starting Gaseous Server"); @@ -63,6 +65,22 @@ builder.Services.AddControllers(options => }); }); +// set max upload size +builder.Services.Configure(options => +{ + options.MaxRequestBodySize = int.MaxValue; +}); +builder.Services.Configure(options => +{ + options.Limits.MaxRequestBodySize = int.MaxValue; +}); +builder.Services.Configure(options => +{ + options.ValueLengthLimit = int.MaxValue; + options.MultipartBodyLengthLimit = int.MaxValue; + options.MultipartHeadersLengthLimit = int.MaxValue; +}); + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); diff --git a/gaseous-server/wwwroot/images/cog.jpg b/gaseous-server/wwwroot/images/cog.jpg deleted file mode 100644 index 4b0b01e30191a0c1825555ffd25f027109127e7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90353 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 + + + + + + diff --git a/gaseous-server/wwwroot/images/upload.svg b/gaseous-server/wwwroot/images/upload.svg new file mode 100644 index 0000000..ae5997f --- /dev/null +++ b/gaseous-server/wwwroot/images/upload.svg @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/gaseous-server/wwwroot/index.html b/gaseous-server/wwwroot/index.html index c2484f3..f1c1104 100644 --- a/gaseous-server/wwwroot/index.html +++ b/gaseous-server/wwwroot/index.html @@ -6,7 +6,9 @@ + + @@ -23,8 +25,12 @@ +
diff --git a/gaseous-server/wwwroot/pages/EmulatorJS.html b/gaseous-server/wwwroot/pages/EmulatorJS.html index 457c3df..ba52a32 100644 --- a/gaseous-server/wwwroot/pages/EmulatorJS.html +++ b/gaseous-server/wwwroot/pages/EmulatorJS.html @@ -20,6 +20,8 @@ // Path to the data directory EJS_pathtodata = '/emulators/EmulatorJS/data/'; - EJS_DEBUG_XX = true; + EJS_DEBUG_XX = false; + + EJS_startOnLoaded = false; \ No newline at end of file diff --git a/gaseous-server/wwwroot/pages/dialogs/rominfo.html b/gaseous-server/wwwroot/pages/dialogs/rominfo.html index 86dedfc..773d1a1 100644 --- a/gaseous-server/wwwroot/pages/dialogs/rominfo.html +++ b/gaseous-server/wwwroot/pages/dialogs/rominfo.html @@ -85,7 +85,8 @@
- \ No newline at end of file diff --git a/gaseous-server/wwwroot/pages/emulator.html b/gaseous-server/wwwroot/pages/emulator.html index d4e9bbd..50aad73 100644 --- a/gaseous-server/wwwroot/pages/emulator.html +++ b/gaseous-server/wwwroot/pages/emulator.html @@ -86,7 +86,7 @@ function loadEmulator() { if (availableEmuBios.length > 0) { var emulatorbiosselect = document.getElementById('emulatorbiosselector'); - emuBios = emulatorbiosselect.value; + emuBios = '/api/v1/Bios/' + platformId + '/' + emulatorbiosselect.value; } else { emuBios = ''; } diff --git a/gaseous-server/wwwroot/scripts/dropzone.min.js b/gaseous-server/wwwroot/scripts/dropzone.min.js new file mode 100644 index 0000000..94e32e3 --- /dev/null +++ b/gaseous-server/wwwroot/scripts/dropzone.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(function(){return function(){var e={3099:function(e){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},6077:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},1223:function(e,t,n){var r=n(5112),i=n(30),o=n(3070),a=r("unscopables"),u=Array.prototype;null==u[a]&&o.f(u,a,{configurable:!0,value:i(null)}),e.exports=function(e){u[a][e]=!0}},1530:function(e,t,n){"use strict";var r=n(8710).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},5787:function(e){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},9670:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},4019:function(e){e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},260:function(e,t,n){"use strict";var r,i=n(4019),o=n(9781),a=n(7854),u=n(111),s=n(6656),l=n(648),c=n(8880),f=n(1320),p=n(3070).f,h=n(9518),d=n(7674),v=n(5112),y=n(9711),g=a.Int8Array,m=g&&g.prototype,b=a.Uint8ClampedArray,x=b&&b.prototype,w=g&&h(g),E=m&&h(m),k=Object.prototype,A=k.isPrototypeOf,S=v("toStringTag"),F=y("TYPED_ARRAY_TAG"),T=i&&!!d&&"Opera"!==l(a.opera),C=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},R={BigInt64Array:8,BigUint64Array:8},I=function(e){if(!u(e))return!1;var t=l(e);return s(L,t)||s(R,t)};for(r in L)a[r]||(T=!1);if((!T||"function"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError("Incorrect invocation")},T))for(r in L)a[r]&&d(a[r],w);if((!T||!E||E===k)&&(E=w.prototype,T))for(r in L)a[r]&&d(a[r].prototype,E);if(T&&h(x)!==E&&d(x,E),o&&!s(E,S))for(r in C=!0,p(E,S,{get:function(){return u(this)?this[F]:void 0}}),L)a[r]&&c(a[r],F,r);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:T,TYPED_ARRAY_TAG:C&&F,aTypedArray:function(e){if(I(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(d){if(A.call(w,e))return e}else for(var t in L)if(s(L,r)){var n=a[t];if(n&&(e===n||A.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n){if(o){if(n)for(var r in L){var i=a[r];i&&s(i.prototype,e)&&delete i.prototype[e]}E[e]&&!n||f(E,e,n?t:T&&m[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var r,i;if(o){if(d){if(n)for(r in L)(i=a[r])&&s(i,e)&&delete i[e];if(w[e]&&!n)return;try{return f(w,e,n?t:T&&g[e]||t)}catch(e){}}for(r in L)!(i=a[r])||i[e]&&!n||f(i,e,t)}},isView:function(e){if(!u(e))return!1;var t=l(e);return"DataView"===t||s(L,t)||s(R,t)},isTypedArray:I,TypedArray:w,TypedArrayPrototype:E}},3331:function(e,t,n){"use strict";var r=n(7854),i=n(9781),o=n(4019),a=n(8880),u=n(2248),s=n(7293),l=n(5787),c=n(9958),f=n(7466),p=n(7067),h=n(1179),d=n(9518),v=n(7674),y=n(8006).f,g=n(3070).f,m=n(1285),b=n(8003),x=n(9909),w=x.get,E=x.set,k="ArrayBuffer",A="DataView",S="Wrong index",F=r.ArrayBuffer,T=F,C=r.DataView,L=C&&C.prototype,R=Object.prototype,I=r.RangeError,U=h.pack,O=h.unpack,_=function(e){return[255&e]},M=function(e){return[255&e,e>>8&255]},z=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},P=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},j=function(e){return U(e,23,4)},D=function(e){return U(e,52,8)},N=function(e,t){g(e.prototype,t,{get:function(){return w(this)[t]}})},B=function(e,t,n,r){var i=p(n),o=w(e);if(i+t>o.byteLength)throw I(S);var a=w(o.buffer).bytes,u=i+o.byteOffset,s=a.slice(u,u+t);return r?s:s.reverse()},q=function(e,t,n,r,i,o){var a=p(n),u=w(e);if(a+t>u.byteLength)throw I(S);for(var s=w(u.buffer).bytes,l=a+u.byteOffset,c=r(+i),f=0;fG;)(W=Y[G++])in T||a(T,W,F[W]);H.constructor=T}v&&d(L)!==R&&v(L,R);var Q=new C(new T(2)),$=L.setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||u(L,{setInt8:function(e,t){$.call(this,e,t<<24>>24)},setUint8:function(e,t){$.call(this,e,t<<24>>24)}},{unsafe:!0})}else T=function(e){l(this,T,k);var t=p(e);E(this,{bytes:m.call(new Array(t),0),byteLength:t}),i||(this.byteLength=t)},C=function(e,t,n){l(this,C,A),l(e,T,A);var r=w(e).byteLength,o=c(t);if(o<0||o>r)throw I("Wrong offset");if(o+(n=void 0===n?r-o:f(n))>r)throw I("Wrong length");E(this,{buffer:e,byteLength:n,byteOffset:o}),i||(this.buffer=e,this.byteLength=n,this.byteOffset=o)},i&&(N(T,"byteLength"),N(C,"buffer"),N(C,"byteLength"),N(C,"byteOffset")),u(C.prototype,{getInt8:function(e){return B(this,1,e)[0]<<24>>24},getUint8:function(e){return B(this,1,e)[0]},getInt16:function(e){var t=B(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=B(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return P(B(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return P(B(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return O(B(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return O(B(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){q(this,1,e,_,t)},setUint8:function(e,t){q(this,1,e,_,t)},setInt16:function(e,t){q(this,2,e,M,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){q(this,2,e,M,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){q(this,4,e,z,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){q(this,4,e,z,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){q(this,4,e,j,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){q(this,8,e,D,t,arguments.length>2?arguments[2]:void 0)}});b(T,k),b(C,A),e.exports={ArrayBuffer:T,DataView:C}},1048:function(e,t,n){"use strict";var r=n(7908),i=n(1400),o=n(7466),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),u=o(n.length),s=i(e,u),l=i(t,u),c=arguments.length>2?arguments[2]:void 0,f=a((void 0===c?u:i(c,u))-l,u-s),p=1;for(l0;)l in n?n[s]=n[l]:delete n[s],s+=p,l+=p;return n}},1285:function(e,t,n){"use strict";var r=n(7908),i=n(1400),o=n(7466);e.exports=function(e){for(var t=r(this),n=o(t.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,n),s=a>2?arguments[2]:void 0,l=void 0===s?n:i(s,n);l>u;)t[u++]=e;return t}},8533:function(e,t,n){"use strict";var r=n(2092).forEach,i=n(9341)("forEach");e.exports=i?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},8457:function(e,t,n){"use strict";var r=n(9974),i=n(7908),o=n(3411),a=n(7659),u=n(7466),s=n(6135),l=n(1246);e.exports=function(e){var t,n,c,f,p,h,d=i(e),v="function"==typeof this?this:Array,y=arguments.length,g=y>1?arguments[1]:void 0,m=void 0!==g,b=l(d),x=0;if(m&&(g=r(g,y>2?arguments[2]:void 0,2)),null==b||v==Array&&a(b))for(n=new v(t=u(d.length));t>x;x++)h=m?g(d[x],x):d[x],s(n,x,h);else for(p=(f=b.call(d)).next,n=new v;!(c=p.call(f)).done;x++)h=m?o(f,g,[c.value,x],!0):c.value,s(n,x,h);return n.length=x,n}},1318:function(e,t,n){var r=n(5656),i=n(7466),o=n(1400),a=function(e){return function(t,n,a){var u,s=r(t),l=i(s.length),c=o(a,l);if(e&&n!=n){for(;l>c;)if((u=s[c++])!=u)return!0}else for(;l>c;c++)if((e||c in s)&&s[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:function(e,t,n){var r=n(9974),i=n(8361),o=n(7908),a=n(7466),u=n(5417),s=[].push,l=function(e){var t=1==e,n=2==e,l=3==e,c=4==e,f=6==e,p=7==e,h=5==e||f;return function(d,v,y,g){for(var m,b,x=o(d),w=i(x),E=r(v,y,3),k=a(w.length),A=0,S=g||u,F=t?S(d,k):n||p?S(d,0):void 0;k>A;A++)if((h||A in w)&&(b=E(m=w[A],A,x),e))if(t)F[A]=b;else if(b)switch(e){case 3:return!0;case 5:return m;case 6:return A;case 2:s.call(F,m)}else switch(e){case 4:return!1;case 7:s.call(F,m)}return f?-1:l||c?c:F}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterOut:l(7)}},6583:function(e,t,n){"use strict";var r=n(5656),i=n(9958),o=n(7466),a=n(9341),u=Math.min,s=[].lastIndexOf,l=!!s&&1/[1].lastIndexOf(1,-0)<0,c=a("lastIndexOf"),f=l||!c;e.exports=f?function(e){if(l)return s.apply(this,arguments)||0;var t=r(this),n=o(t.length),a=n-1;for(arguments.length>1&&(a=u(a,i(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:s},1194:function(e,t,n){var r=n(7293),i=n(5112),o=n(7392),a=i("species");e.exports=function(e){return o>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},9341:function(e,t,n){"use strict";var r=n(7293);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},3671:function(e,t,n){var r=n(3099),i=n(7908),o=n(8361),a=n(7466),u=function(e){return function(t,n,u,s){r(n);var l=i(t),c=o(l),f=a(l.length),p=e?f-1:0,h=e?-1:1;if(u<2)for(;;){if(p in c){s=c[p],p+=h;break}if(p+=h,e?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;e?p>=0:f>p;p+=h)p in c&&(s=n(s,c[p],p,l));return s}};e.exports={left:u(!1),right:u(!0)}},5417:function(e,t,n){var r=n(111),i=n(3157),o=n(5112)("species");e.exports=function(e,t){var n;return i(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!i(n.prototype)?r(n)&&null===(n=n[o])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},3411:function(e,t,n){var r=n(9670),i=n(9212);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){throw i(e),t}}},7072:function(e,t,n){var r=n(5112)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o={};o[r]=function(){return{next:function(){return{done:n=!0}}}},e(o)}catch(e){}return n}},4326:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},648:function(e,t,n){var r=n(1694),i=n(4326),o=n(5112)("toStringTag"),a="Arguments"==i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:a?i(t):"Object"==(r=i(t))&&"function"==typeof t.callee?"Arguments":r}},9920:function(e,t,n){var r=n(6656),i=n(3887),o=n(1236),a=n(3070);e.exports=function(e,t){for(var n=i(t),u=a.f,s=o.f,l=0;l=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=r[1]),e.exports=i&&+i},748:function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:function(e,t,n){var r=n(7854),i=n(1236).f,o=n(8880),a=n(1320),u=n(3505),s=n(9920),l=n(4705);e.exports=function(e,t){var n,c,f,p,h,d=e.target,v=e.global,y=e.stat;if(n=v?r:y?r[d]||u(d,{}):(r[d]||{}).prototype)for(c in t){if(p=t[c],f=e.noTargetGet?(h=i(n,c))&&h.value:n[c],!l(v?c:d+(y?".":"#")+c,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;s(p,f)}(e.sham||f&&f.sham)&&o(p,"sham",!0),a(n,c,p,e)}}},7293:function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:function(e,t,n){"use strict";n(4916);var r=n(1320),i=n(7293),o=n(5112),a=n(2261),u=n(8880),s=o("species"),l=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),c="$0"==="a".replace(/./,"$0"),f=o("replace"),p=!!/./[f]&&""===/./[f]("a","$0"),h=!i((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,f){var d=o(e),v=!i((function(){var t={};return t[d]=function(){return 7},7!=""[e](t)})),y=v&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[s]=function(){return n},n.flags="",n[d]=/./[d]),n.exec=function(){return t=!0,null},n[d](""),!t}));if(!v||!y||"replace"===e&&(!l||!c||p)||"split"===e&&!h){var g=/./[d],m=n(d,""[e],(function(e,t,n,r,i){return t.exec===a?v&&!i?{done:!0,value:g.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:c,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:p}),b=m[0],x=m[1];r(String.prototype,e,b),r(RegExp.prototype,d,2==t?function(e,t){return x.call(e,this,t)}:function(e){return x.call(e,this)})}f&&u(RegExp.prototype[d],"sham",!0)}},9974:function(e,t,n){var r=n(3099);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},5005:function(e,t,n){var r=n(857),i=n(7854),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(r[e])||o(i[e]):r[e]&&r[e][t]||i[e]&&i[e][t]}},1246:function(e,t,n){var r=n(648),i=n(7497),o=n(5112)("iterator");e.exports=function(e){if(null!=e)return e[o]||e["@@iterator"]||i[r(e)]}},8554:function(e,t,n){var r=n(9670),i=n(1246);e.exports=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return r(t.call(e))}},647:function(e,t,n){var r=n(7908),i=Math.floor,o="".replace,a=/\$([$&'`]|\d\d?|<[^>]*>)/g,u=/\$([$&'`]|\d\d?)/g;e.exports=function(e,t,n,s,l,c){var f=n+e.length,p=s.length,h=u;return void 0!==l&&(l=r(l),h=a),o.call(c,h,(function(r,o){var a;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,n);case"'":return t.slice(f);case"<":a=l[o.slice(1,-1)];break;default:var u=+o;if(0===u)return r;if(u>p){var c=i(u/10);return 0===c?r:c<=p?void 0===s[c-1]?o.charAt(1):s[c-1]+o.charAt(1):r}a=s[u-1]}return void 0===a?"":a}))}},7854:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},6656:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},3501:function(e){e.exports={}},490:function(e,t,n){var r=n(5005);e.exports=r("document","documentElement")},4664:function(e,t,n){var r=n(9781),i=n(7293),o=n(317);e.exports=!r&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},1179:function(e){var t=Math.abs,n=Math.pow,r=Math.floor,i=Math.log,o=Math.LN2;e.exports={pack:function(e,a,u){var s,l,c,f=new Array(u),p=8*u-a-1,h=(1<>1,v=23===a?n(2,-24)-n(2,-77):0,y=e<0||0===e&&1/e<0?1:0,g=0;for((e=t(e))!=e||e===1/0?(l=e!=e?1:0,s=h):(s=r(i(e)/o),e*(c=n(2,-s))<1&&(s--,c*=2),(e+=s+d>=1?v/c:v*n(2,1-d))*c>=2&&(s++,c/=2),s+d>=h?(l=0,s=h):s+d>=1?(l=(e*c-1)*n(2,a),s+=d):(l=e*n(2,d-1)*n(2,a),s=0));a>=8;f[g++]=255&l,l/=256,a-=8);for(s=s<0;f[g++]=255&s,s/=256,p-=8);return f[--g]|=128*y,f},unpack:function(e,t){var r,i=e.length,o=8*i-t-1,a=(1<>1,s=o-7,l=i-1,c=e[l--],f=127&c;for(c>>=7;s>0;f=256*f+e[l],l--,s-=8);for(r=f&(1<<-s)-1,f>>=-s,s+=t;s>0;r=256*r+e[l],l--,s-=8);if(0===f)f=1-u;else{if(f===a)return r?NaN:c?-1/0:1/0;r+=n(2,t),f-=u}return(c?-1:1)*r*n(2,f-t)}}},8361:function(e,t,n){var r=n(7293),i=n(4326),o="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o.call(e,""):Object(e)}:Object},9587:function(e,t,n){var r=n(111),i=n(7674);e.exports=function(e,t,n){var o,a;return i&&"function"==typeof(o=t.constructor)&&o!==n&&r(a=o.prototype)&&a!==n.prototype&&i(e,a),e}},2788:function(e,t,n){var r=n(5465),i=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return i.call(e)}),e.exports=r.inspectSource},9909:function(e,t,n){var r,i,o,a=n(8536),u=n(7854),s=n(111),l=n(8880),c=n(6656),f=n(5465),p=n(6200),h=n(3501),d=u.WeakMap;if(a){var v=f.state||(f.state=new d),y=v.get,g=v.has,m=v.set;r=function(e,t){return t.facade=e,m.call(v,e,t),t},i=function(e){return y.call(v,e)||{}},o=function(e){return g.call(v,e)}}else{var b=p("state");h[b]=!0,r=function(e,t){return t.facade=e,l(e,b,t),t},i=function(e){return c(e,b)?e[b]:{}},o=function(e){return c(e,b)}}e.exports={set:r,get:i,has:o,enforce:function(e){return o(e)?i(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=i(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},7659:function(e,t,n){var r=n(5112),i=n(7497),o=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||a[o]===e)}},3157:function(e,t,n){var r=n(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},4705:function(e,t,n){var r=n(7293),i=/#|\.prototype\./,o=function(e,t){var n=u[a(e)];return n==l||n!=s&&("function"==typeof t?r(t):!!t)},a=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},u=o.data={},s=o.NATIVE="N",l=o.POLYFILL="P";e.exports=o},111:function(e){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},1913:function(e){e.exports=!1},7850:function(e,t,n){var r=n(111),i=n(4326),o=n(5112)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[o])?!!t:"RegExp"==i(e))}},9212:function(e,t,n){var r=n(9670);e.exports=function(e){var t=e.return;if(void 0!==t)return r(t.call(e)).value}},3383:function(e,t,n){"use strict";var r,i,o,a=n(7293),u=n(9518),s=n(8880),l=n(6656),c=n(5112),f=n(1913),p=c("iterator"),h=!1;[].keys&&("next"in(o=[].keys())?(i=u(u(o)))!==Object.prototype&&(r=i):h=!0);var d=null==r||a((function(){var e={};return r[p].call(e)!==e}));d&&(r={}),f&&!d||l(r,p)||s(r,p,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},7497:function(e){e.exports={}},133:function(e,t,n){var r=n(7293);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},590:function(e,t,n){var r=n(7293),i=n(5112),o=n(1913),a=i("iterator");e.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,r){t.delete("b"),n+=r+e})),o&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},8536:function(e,t,n){var r=n(7854),i=n(2788),o=r.WeakMap;e.exports="function"==typeof o&&/native code/.test(i(o))},1574:function(e,t,n){"use strict";var r=n(9781),i=n(7293),o=n(1956),a=n(5181),u=n(5296),s=n(7908),l=n(8361),c=Object.assign,f=Object.defineProperty;e.exports=!c||i((function(){if(r&&1!==c({b:1},c(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=c({},e)[n]||o(c({},t)).join("")!=i}))?function(e,t){for(var n=s(e),i=arguments.length,c=1,f=a.f,p=u.f;i>c;)for(var h,d=l(arguments[c++]),v=f?o(d).concat(f(d)):o(d),y=v.length,g=0;y>g;)h=v[g++],r&&!p.call(d,h)||(n[h]=d[h]);return n}:c},30:function(e,t,n){var r,i=n(9670),o=n(6048),a=n(748),u=n(3501),s=n(490),l=n(317),c=n(6200)("IE_PROTO"),f=function(){},p=function(e){return"