深色模式

设置页面为深色模式, 可定时开关

目前為 2024-08-10 提交的版本,檢視 最新版本

// ==UserScript==
// @name          深色模式
// @namespace     https://greasyfork.org/zh-CN/users/1196880-ling2ling4
// @version       1.2.0
// @author        Ling2Ling4
// @description   设置页面为深色模式, 可定时开关
// @license       AGPL-3.0-or-later
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nOydd5xlRZn3v09VnXPu7TDTM0OGXcV11+yqu645rhkDScAlI4IEEVRUFAkisIKAIwiSkwJmEGFIAhIFUUSCCJLTzMDM9EyHe885Fd4/6pzbt6d7hm6YAXzX5/OpmXtvn1CnzlNPPc/vCSU8QwohZMBrgDcA/wW8EtgQmA2kz/S6/6D/U1QAi4EHgLuAm4E/AreLSP5MLijTPSGEsB6wPfAR4D+BxjO58T/oH7QCagO3ABcDZ4rI49M5ecoMHUJYC/gCsBOw5nRu8g/6Bz1DehI4DThaRBZO5YQpMXQIYVvgYKJK8Q/6Bz3X9ABwoIic/XQHrpShQwi9wFzg06uoY/+gf9CzoVOBz4vIyIoOWCFDhxDWAX4MvHM1dOz/G1q2bBlPPfUUixYvZungUpYNDTEyPEwrzynygtJafPCEEFBKkRhNlmY0m036envo6+tnYNYAs2fPZs7s2QwMDDzfj/RCp2uALUVk/mR/nJShK2b+FfDG1dixvxvK220Gly3lb/ffzz333Mu99z3Egw89woMPPMjgsiHaeU6e57TabdqtFnme48sSnAPvAEscagVKg0mQNCXLUrIsI2s0aDYaNBtNZs2YyYb/vAEv/qf1eclLX8LL/u2l/Ou/vISZM2fSaPzD/q7o98DHJ2PqCQxdqRkX839YMi9YsJC/3X8/d955N3+87Tb+cvc93PXXe3hq4ULQGoIBH0AEQognaY0ohVIKUXFYBUApQvU9hDDWvI9HCPEazoHz4BWoeJ5IILiStdeaw8tf9q+89F825A2v+3de95pXs+GLX8y6667zPIzOC4auAT6yvPoxGUOfwv8xndlZy113380NN9zENdddzx133M0TCxbw5PynQDRkGSppoJTBCxB8bNQDWA9jmHDtIEJQ9bfJFsTQfTASNEEcEgICiAS8K/BlDnkO4pm19lqst85avPblL+cd73g7b33zm3jVK1+BSZJVNCJ/N3SqiOzc/cO4EQ4hbA+c8Vz26PmioaFl3Hbbn7nmuhu4/PLLufXPdzM0EvDtNhiDzjJE6yhhUYRKZYjs54CSqaKeQaZ2XDyq5v4A+EqAO4SAjhyOcyW+LKB0mDShr7fJa175Mt7znnfx/ve8m9e+9tXMmDFzGqPxd03bi8hZ9ZfOSIcQ1gVuAv7p+ejVc0W33nY7v75oHvMuu4K//u0+Fi9YiKQpJusjBI3WmkAgIIgorLOEQIehARCP4KZ8T5kouCelIDLG/GHsJGFMWktk8XgIAYUQgseWOYy26Zs9wOtf+2re99538ZEPvZ///I/XT7mff6f0APAWEVkA4xn628CXiaM1bQ/iC5kWLlzIvMuu4JcXXMh1N9zCosVLorGWNUiSFJTBBwElUb91jgAoEXwIXcwlnf9kEvViIklUHabM0OC7pXl9XhdzKwSRqp9GENH4ssAYjaCwZU4YHQURZs8e4E1vfAObb/YJPvrh97HW2mtPrSN/f/RtEfkqVG8ohLA+cCv/n3kA77zrL/z4p7/g/At/ze133IVu9BC8QrRBEoN3laQTQwgWtCAIIp4QPMHayGUEurgLRCHoKfVBQogG5MqOqa8sglcyXhUPAhL7RVCoWoADHo8oFdUi69CiCTg0AtahEPI8B9vmP161Pp/YZBM22XwzXv2a105xBP9u6EngdSLyeM3QXwe+9fz2adXR7266hTPO+hG/vORKFj76BCQGlaYEQCuNDwHvPUopqKRdtxQc47DJGDFASGITSxAPeJDKUJQAQVNBFajgMd5FRARPkKjO+C6ujYZmVGlE1MQ7dq0QHfnd0TziBOv0VUCJIgRf/SlOEJeXYAvW2WBdNnrfu/jMp7flTf/1n89ofF+gtL+IHCohhCbwG+Atz3ePni3dcMPv+MHJp3HRpVexePFiMA1Is45UqylMyqjToGBiE0cQF5mZMeQDNDXurEJA179LlPRBiKpM9Tn2RogMO1Hyr6i/MkVjMwBGN/E2xxcFYOnrTfjYh97HHp/dmbe99a1TfvQXMN0I/LeEEN5IxPT+blH72267je99/wdc8Ot5LHpqKaanJ8oynWE7TLYqSUFQBAljzEwt5SNjdiQuERsJlWkixHOioRkl9hgJgplwt2fN0N6jgyZtZjhbErwFSsqRIdZYYxYf+8gH2WvP3Xndv79uOoPwQqM28E4JIewCnPh89+aZ0P333c8pp5/BaWedw4L5T0KSotNmfNHKdFSLqb74qVNlEkqtW1cMVzNeUICOqoeE5WCO6vjgxz5LPekm182fLUMDBOfBeZI0QacK226DeGzRBgmsveZstv+fT7HbLjvz4he9eMrXfYHRrvL36EhptVqc/cPzOPaEk7jnvvuxPpA2mng01gVEKYIP+I7uOp5WBYOPSdZKYagEtCBI6ABtVLYc44CjIBVDjzWpwSVZ9RIaHxAfMI2MMm+jtMIkhjJvk2Ypvmxjg8cDL1l/fb669+fY+lOfpKe3d2rXf+HQqRJCuIG/I/35+htv4pDDj+KKq67GBRAUWbNJ6T3OgTIJIHjnKiNt4jWePUOHyhgcgxwEUKIJzleCOqCVwUsgqABeCEqB9Ygy0fUtgeikiWaiiBBWg4QWAOcJAiZNsdYSggMkGo31Y9gSrEPj+MB73sn+++3LW9/65ukMzPNNN0oI4XFg3ee7J09HS5cOMvfY4/j+SWezcOFiVCNDSUQTPJXQ60jF2iHtV4BUTKTpMY0n4Bjz6kWdWSMEa8myjOAcaEPpCpzPwStM2oCg8B5QOjKVODooCVIhJM+mb1OjMO7UmqkjEqPLNq4oWWet2ez2mR3Y5/Ofo7+//xnf6zmkJySE0Aay57sny1MIofPCrr/+Rg478iguvnge6D50o5fa/xOgCymoqPZ/TAPNmDZDi+8wn1SdUARSY7BlTrOZUhQF7aFB+mY0Gc4dPVkPDoP1tSs9evsQXzE2q5GhPfUEDBNO6/4hYMShApR5Gx0C7377Wzjg61/hHe98W9WfSTW5FwIVihcgM0N8WXmeM/f4H7D51jtw8YWX0Jw5B9PsoxOKCePeRc0ikwUJreLejTFeiNK5WhtwtsBood0epr1sERtssCa/uepStt5yE0YXP4F4iwpRp62BunGry2qiIGOTv+vXOOnrYKsKj7cu4F3AqBSVNLnimpvYYpvPcOxxPyDPixcqMwOkEp41KLt66NHHHmO/A77JT35+PkWrpGdgFmVR4rxGlKH2lY1/SbXnL36bqssZpi8FA1XoaFAVK3qMVmg8WjuGn3yEdV+8IZdf8mte9bJXUPiCHXbcjXPPOoPmzBfhxOCiFYlTrtN3mSg+Vw3KMZktEcZQmm5fkhZBofHed0Jkg7UkKrD5phtx+LcOYIMNNpjyvZ9LmuiWegHQddddxyabb8UPzzo3Gnp9/Yy2ChyC0poxCawQBFV7zIj/S/BIBxabIkn3NaZycL1KxGg80IQgBGcZXryY9V68IRfPm8fLXvZShkcexyjPOWeexg477E5r6WN4W1ZGIJV7e3l4b3VRFcVXjY9UsYQqxKYJiAcXHGmjQfAh2gcmJaiUH57zMzb/1HZcd911z0Ffp08vCAndrS+fevpZHPadudx/z/2o3l7QBm89aFMJk8lw5fDslYxgKty4y/Mn1aQQutzZIF4RJK4SUTIH8CUaS3vJAjZ8yYu44spL2PCfN6BsjRCCRZRBqQyT9bHTDjtz+pmnk81YD5ImRcsiaROPRal8Al+HECrWW14tmc5Tr0iah/FXrN+FUoSyRHREZEQpksTgbIkrctZZdx0O/tqX2GXHrcef9zzTC4KhAZxzfOvwI/nO3OMZXjZM0jsDFzwexZiVp2AayMXUqY7PMBVD1+hDlGbx/pU7OwhKUoIXwEEoSXVAiaW1eD4v3vBF3HD91ay77hqUrRFU8JAYdBBGWy20aZD1zuTTO32W004/hXTgn1E0CKZJ7toIre6Ijap7oUsxWNUMvYLxWAEprSEEfDtHEsNX9tyRww45YNIYlOeDXhAMvXTpUvb92kGcdvY5ECDJGhTWgaiKoSFCS6rLw7aKqfbuiWecO7u+d8edLeAUSmlQDiMeLY7Wovm86rWv5orLLmKdNWfSGhkkMQbvLEmakLcLGr095K0SnTRQusmOn9mds844lWzgRVgHrpo3y4emjn9FzxNDV30QpTqS2DuH5EN8etutOOboI+nre/4dMc/7tHr4oYf49K57csoZPwKEZqOBszaGQHao/ryamBkqHdaO4cLjUqNC9VVVUtwj2pG4AoWjtWgBb/yv/+TqK+axztpzKEaHCcFHRIOYP5imBlcUKBUQLMG2OPP0k9htz8+RDz6AVjlJEvGwIHpcG9PZu0NZn2M5VDFxnRMJoKvMnlNO+yGf/swePProo89tnyah55Wh773nPnbf46tc8OvLyZIUApQ2erA6S2y3sbZa32EdU9Edm0EFySkkVMH6eLRWKNem0UxpL36cN775jVz06/NZY85M2oOL0FqRiAIBpRQeoZ0XxLC/mCOIWMp8Gccf+1123WNPiqWPU+bL6Lpx9VlVqtYYSaVRP5ckUhvkELzvMLYyTZK+mfzkpxewyx5787f77ntO+7U8PW8Mfeddf2HX3b/EvEuvQ5IMkgS0wSGd/zvmynNha0itLy8f/aaQAFqpmFnoLFoFtAosXbyQd7/3vVxy0QWsOXsGo8uW0OhtELxDJ0nM4kZhGv2kzT5s6UjSBCXgXQlYbDnED447lj322hWGF8d7eBflcZ1VLuOZOsrq556hRca0+5qhHQrd6CGdOcC8y65ip1324C9/ufs57du4fj4fOvSdd93Frnt8keuv/xNp1o9PLC6UHWPIdxs/nRHsfJj0ms/Wwo6u7DFvGgh4oaE1IQSsc2hRKBGUcowufpS3v+vdXHjBz+hvprj2SKxwgGCMxjuHyjLQDS697DLe/a53onEEZ0EJRoELAesjwzYaM/j8F77E9757BjQz0t4ZuNIhOsW6UEl3jwRXpeqGLvtiKrRqjMKJl1VAQCSAs/h8lHe97U0cP/coXvnKV0zjnquGnnMJfc/f7mWPz3+R62++BdPboPRtnPcENJ7KCBTpUhmFSb0Cq5qkjgGJqIoEQSGR6YoCIwGRElGO0SUL2ehjG3Hh+T+jv5FQtofRqe7Aa3nuGLWAnsEx3zuBD33wE+y25xcw2SxM1guiIiOjoq3gHe32IHOPPoYvfGFPGB2E1hANoxCbo0yF7tT0vJvxy5MQggJlUI0efnvt79h9n3255957n/Oe6IMOOuig5+pmDz/8CLt//itcef3NJEkCwePTmlm7JGPXf10impVJmVWDgdZoRtSZlQgSPIlR+OAItkXeHmbjjTfiJ+ecQV9/k7I9EjNSlID3iDYUQeibsQbHn3gCn99zH7IZa3DLjdfx6Pz5fOLjm6AU2LLE+RjI5EOIGSy+4MMf+Rgjy5Zy7TVXY7JGZP6ucegoYh13+XSebdVTRzWqvokSVJLywN/u5y9/vYd3v+NtzJz53JVUWO0MXQPug0sG2XPv/bjw4iuRAKq3ibU5Yhw4BdIdlNNt1UPHubESevYM3QXNBUVdLkBEcN4hlJTtYd73wf/mvHPPpCcVWsODGBXQWYotCpQSgjI0e2fzveNP5HO770k2Z12s12S9M/n9dVfxwEMPs8kmm2G04HwJtW4qYEQheYsPfHRjlg0u4dqrL0eyXtDRCxlt5BC90Z0+T+f5Vj3pjuFe3UNivqSI5oGHH+KhB+7nQx94P41G9pw4X1Y7Q4sI1pbs+6WDOPOsX4JJSXqalOVIZGaTQ2gCplr2J1tPn34QVjxQK5fs4++hxv0fTUIwBorhpXzgw+/n3J/+mNR4fHuUZrMnqpB5m0QLog26OYcjjjqSL+79edScdfDWYEwTHwJps4c//O567rrrTj65xRYxiKk1gklTvI8ue2VzKHM++PFNGck91/3mKkLWw/jESN/V56lSt3a5PK79zJlMV17aUBmtAVBKxy0cFNx5x+0sWrSIjT78wZiUvJrpOVE5Dv7WERx97EmoRgPRBi9RIosYgjUgpgLuVzW+aoCkA9+qUMUuiI9ZflLr6xWK4CIOrAUy8Whf0FCekSWPs/FGH+EXP/sxDQUJDqWFoixRSlOikKwXlc3im98+gq9/eT9k9j8RrEKSBFu2USoGVamsl9v/+Af+fPe9bPHJrUizjGJ0BKNjTIWThILoSv/Qhz5EaUe49vJ5JFrFoKGQEHxC9MDYTizGGCYUOp7FbjUlqSo9eUlAUkCT6ASFI/gYVyJKV9k+dVBSxexCHB+lq7GSakUVFCXK6MrhJWB0FQuu8d6h0pQ/3HwzVoT/ftc7VuG7nZxWO0OfcsaZ7H/goZQuIEkSHQfdwT2SwGpJZA1Eqa86k0XqVKeqlEAUr9ULCgFVxSxkAi5vkanA8LJFbPXJzTnrrNPINBT5CCGUJFowxjA82ibrmYExfRx8+OEc9LUDMQNrIjojTTO8t2RGCAS0SfABGv2zuP3mG/nL3+5jk09sjEkUZdHCI4hO0Qq8twgF73v/RyiLIX575ZWYpEEIBp32VlO/rNaRmqRLHoxJXgESSjyaIEkUICLQbpElguDQSmJ0XZagg6cK5yBWehCUEpTEhUIqo10rRZpp8pFhtElQJuZxolSVvBCxeLTmxptvYf015/CG16/eRNzVCttde911bLvzbjz0yAKytIkNqoqOiFBP9M6xGmIzKqoyWur8vZqhY5RbBX7VyIb3GG3AWbJEQ9liZPApdtxuG44/bi5ppmgXo9HTFwpS8VivSPrm4D18Yd+vMPfoufTMWZuy8JRFgQJ83gajY7GZYCBNyZpNtFGMPjWfzbfYlPPOPQsJJa7MCd6iVNSrPQHnPI2eNfna/l/n8EO/TTZzXYJLcUrhdJ2LOEaTucmjhC6wkuIlqwKtPA0jtJ98JIapJKZaoXRVAngldktdfTLGmiL9vZikiSts5dmsqo6Eun+BkLd48XrrcMZJx/Oud6++wrarnKFrxf/Rxx5jk62255abbqGndya59Uia4p2PhVXqAZOqhOzqoI5eHZfhsRpx0jWxKqaXgLEtksSQt1r40aXs9OntOf64uWSZoT06iDbgvCeVgC9yTM9MUBl77bs/xx79XXpnr01eFihv2WbLT/K6V7+c4XaLEiHLmohKePChxznhhJNo9jQheFqDC/ifbbfjpJNPpDdTtIYWkjWb5KMjpM1G1FCDYNI5fPPQQzlw//3pm70+eVCUEvMnx7+A7uCtWvEIGClxpHiyaIgGj2oP8fJ/WZeengalswSto2fU2acd2kAslaZ7Z3LPfQ8y1GrF5GCVjKksBKTC9xWB0La87jWv4oKfn80G66+/WozE1SKh83abnXbbh3POPIdk5gAEIc0atEaGCUlCoCt5VRz4Ol5hFdM4t/mYVqnqaqISl2WPhmDJtCMUbYqhQbbbflt+cPxcms2E0eFBskYK4mjnOYkoUp1C1sfn9tqX4046C9PoxQdBGYXKh/jVz8/jgx/8AFDgg0UkQUj44x138x//8RaSpEHWaOK8pbXkCTb+1Db85Eenk8gIraFlpI0UnCXP26TNHnwQ0mwNvnHAAXzrkENIZqxJaform3cMNusu9VvbJKqyGxwJgRREUN4SWku44w/X8cpXvYKiNUIp0bjrUapjStd6eXcMRz2mOksZ9gkf+PAm3HjNtai+fkKV8OC71DxCZGgJGjs8zNbbbMGpJ3yXrLHqk6VWi2g8/cyz+dkFl6BnzulkO5et0Uri1NnOVVutToLlo+bomE8iEtOgvItYswRsPkoxtJRdd/sMp5xyPFq5GDWXKpwvKcsSkxjSZi+F1ezymT047rhTUM0BrO7FJz1Yp9AqxRUlhJJi8ElssYyhwScByNujUf9MMgrrQSU0Zm/A+eeey8c22RJbepp9/YQglN7RaDbBW3AFrlzCId/8JocccgDlsqfAFnFJ967Sa2ubYHk3eXdcTP27R3yBEQ/tYbAttG1jQk6wLUI5Cq5FKEfAjlZtBClHUOUIUgxDPkSR5+iKeZWPiQPBd1VmDTVWJCAG1T+Dn/3yYk487SxWB61yhr7xpps5+PCjKFoFIQhOBO8DhVK0rWUiB3fFO69y6kJNKm+EoNBpQihLFAEtEn2UrsQNP8Vn99iV7809BkKJVh6tidiq9yiTkKW9LBseZefP7sPJp5yFmrEGXhpgmlFH1hkORRkEJEFpIQmWniwOtVaAd9jg8EpTerBBoWdtwKUXXMQWW26LCxmoFGMyfPAoibsC+OCwxRL23/9gDv7mgTAyRChGSDSo4CKTdpAIHY05oiXnFbHenfgKbo9RgDZvgfYoKTDKIbYg2JxQ5gRXYm0bZ0twJaFsg22Dy+PnvFXVI3HgbAUY1QgIYyhJtS5aQJmMfLTNN799DNded8Mqf+OrlKEHly7lGwcdzvz5iyFtdswwX6cXSXedjDGv3GqjUF+/njQxIdWVJVoJSgKpDuDa5MueYJ8vfom5Rx2BDhZbtrGuJPj44gOaNOljeKjFZz+7Nz/86S9IZsxGZ2llBxSgPaIcgkOS+FJVmsVCL9W8muxpfYWQJXPW4pe/vJjNttgGR0ZQDULQWOcR0SQA3pGPLOCAbxzAYYceCCNL8aPLUN6CLWMV1eUNunFfu4KwOjpFqJgvrp4egyQpeVmitcHaEoxGGYMowbkYcYhmnM7ereF1y60aX8IHfFGQDsxk0cLFHPqdYxkcHHwWL3girVJumvv9k/jNVdeh0iZKV0hGTROEsFTW9mrSnzs3ra9dMbWPGYA+eLQWinwEO7SYfb/8VY4+8tvR2Pc5RoExmiRJ8B5Sk/HkwkVsvMmWnHvOeRitCd5SLl0ErcWxDS8ijCzC2VGMjlBdWbpqcRi33lfGXteeK8HhQqAxe30u+PlP2HyLrTGml6TRDzrBuYibhxBQicHmS9nvK/tw2KEH4trD4EuSRE1APcYorOBz3adoUwSlKREsgk4beIkqliiDC4INoNMsFs2ps92reHEJE99kBx0PgkkMGo8tS0gzLr3sKr53winTfqsro4l1p54hXXf9jXz/pFNBDKITnLdjU3ZSZhZi/TdhrLbbqqYaXur6jEV8QGUJthilbI/wla/ty/8e+k1sMYotc7RyaBOTcZ21ZKbBcKtkt89+jj/ecgf//KKXVnWZY5A7EqLjBF/hzppmJggepQ2EqH7FvlQrRcS1qMs4RqmpKUODnjVfxq9/eQGbfnIrzjn7FJqNXmze6hiysdyYg2UL2O9r+1GWJQcedAjSNwfJemJ62LgxX4HDqsuFXvsGHKAbPVgbVTIbAr4sKVqjDMwawLZbWCJun6QpytKF809uEkWbJa4MrkKYjDHYsuSEU8/i/e99F29506rZcG2VMPTIyDCHHXEET85fiO6ZDUEjWqpyU9CpnUygA5PVqkCIHq/VYR1KZZB4QsdQEpOCt4gryZctZuvttuZ/Dz2Esj0MPkerEJ2Gtoz6ttJ4r8DBccedSJL20GgqAiUheHRHsXKgFc5ZXFHQ6O1ltLUYcQ6jEsYthlVlnCBx0sesdQ+i8ZJQlGU0FH/2Y7YqRzn3nDPp6WlSjA5hkhRbOpT3EHIYfpIDDjyArG+Ar375GwQMZA0IPi71MpbdPZbAoGIXglTe0piEEGujKrKkwXEnnMR3jjwCoxWt1jAf/fCHOPH476OTBt5ZxFR1BKEzeUQ8mii545uPmHQFxeALi68M2ADoZoP5jy3gsCOP4Sdnn0Kz2fOs3/kqUTnOPu/nzPvNjZD145XC4WPJ1rqQeKjUi1BJ5FDr0xakQEJABabcZKoNh1CgsKhQoCgQmwOeoDQkPdzwhzu56MrrSBp9eNXABYNHoxoZTkqs5NgwTNooWHPNBjNmBBJjaRpHXwo9iaKpY9x0htDb28eM3hmEtiUlpWFSUKGzd0pH1ajcxwGNF41XJgb1hFFCKPEBmrP+mV9dMI9NNt2RkRFP2jOLdp4j2iKJh95+rHh8sZSvfHFPjjjyGyg3CKNLUMEjXgjSC9IHPoNQT6w6+ybq+/FdhCg9KzNnaPFSFjz6BEPL2ixeuIRFi0dRSU/Uo0OJKoYxUhBwVXF1hfMJ3uvq2TyoWIuaAMErFA6tQbSKd3YgjV7mXXE9Z53781XBis+eoe9/8EGO/v7JMWJOp11FCLuWuY61241oBMCClHQ7w5+uMcXj4rG1h7Ay1IKD4AgEvPVkM+fwwF/uZeddP8+vLvstWaMXZRoEMRR5DkoQDcp4tHEEP4oKOZo2KpTREPQltRTy3uFbbRAh0QaxLnoIuwsi1s9Qx0PUcSSiI7JFgeBwPuCcoTnzRVx26Tw+vsk2DC5r09M3B5VobHBYF1BpivMFZb6Ifb/wRY447AAohsGVJMaggibYWr3rtlf8ci1KgdrR0Zs1EcmwTlBpP6gU66EoSpQEtHjwJb7jFRS8j3vVRGjcx/jxTs2+qHaI1Hh27JNKMlyr5NgTTuOBBx96xnxY07Nm6JNOPYt7774HsozxasNUDL1u6H6KTSIqMJUWRE1oaBMDFLTGliXJwADzH3mEXXbalWuuvIY0bRDKQDPtITghFAJOxUAjZ8AqghesCjgJWO1xqqp1ZwDlsTaHFIL2uGBXUj9moqHmReL1VJzmFk/PwPpceflFbLzxZixdNoRWfSjdQIngrIt6uiiGhhbwxb2/zJHfOQI/tARXjqCTeiXsLspeC51a9oTOTgO1suDxhNDC4vHFCO2iTeEcQQyl1zhJQBI6kSRCpScv/26X16y7RJMIvixI+vr4y1/v5bQzfjgFnlk5PSuG/sOtt3H6j34MOkGU0ImVmKY6PFUGreGtqYroCBep8a0yRuuMalGGxpw1WDB/IZtvuhWXzrucRu9MyhyEDCUN8BkSMsSniM8IGKyAVVH2W1EUSiisjzEWirjsakGlZlrWQfMo3+UAACAASURBVFBjWplT0WlsA/QMrMtvr7qczbbajqUtj0lmYkvQJqNs5aigSJWibC/hS3t/niOOOhw39BTlsvk0Uh9VkC7RoDrwfLRvdLAkPpbSBWj2pqyx1lqsOWeAvllz+KcX/RNpkmKMQZTGiyLWWYJn4yALPuCDxxeWU886h1v/dNszu1BFz8oo/P4PTmbhY0+ge2Z2JQhNAkQ+XyQwtotV/ZvU21mCCKW1BGtpzhhgaHQp2+/wGc4952ze89/voDZmlidFk2RcTHJ1TFrfxwKW4aFlNFL9DAZ5rIBjvLpCGUNjzov5zbzL2eijm3PpxRfS2zuTsjVEkmSIdxVU6Gi3l7DvPp+nnbc44MCDaQ9bssYALviOcbw88KEqe0e8pyiWssP2W7HpZh9H6ahqOB/tEG+j4axQdbjGlCkgY2hPhYeLVrjg0Y2MJx6fz3EnnMypJx437RGr6Rkz9PU3/I55l10JyST+eJnGjI1G98SVaZVQrbuOZ8pQxToEkQi/OYfTiqyvn4WDy9hy+x3ZYftt6GlmWFeiRVVV+UGCwuHw4uLE6MaXnSMES9keZetPfYo3vP712PayCsWZXreREItEVRNwtIhReM011uf6K69mk8224sKfnEGWZDhf4L3DKInMARTFEr7x1a/S09B8+ctfo2ylqGYvLngkqK5+V+G1lds8+kpaNBJP/9qzKp1YoZVidHgZqY7eTm8tNNIYodfBmseGfGxXmbHxD3UptervEDo2l0o0rjRcfMmVXHfDTbz9rW+a3phV9IwZ+vsnn878xx9H9XZL50gqhJXvszquwHD92Mtjp9OjyU5dUc7dOM21epmWgFMKmdHPk4ODHHnkUWNoTD3jOtKlMnCDGq/mdFz7Be98x3/zhtfX9fKm8RDdq4pyEBQ+qCoNyxNsQA+sw+UXXcRHP74xF110IalJGR0ZjVtzGEVwOUqnDA0/wRf33pf+3h523f0rGJ9gdIYoIVhPUCbW6NMNUFDYOGkSV8Ro13yEGJkHiKYnjVF64mwsM+9dZMh6r8Qw5nMIYWwJiBG6NShQPaZIB4EngLMBnTSYP/9JTjjlzOeWoW+46WYuvvwqSHsQZeLGPHVHnyZ4T2S8VOvM4knOm14S6NTF+2RX9dZFqaiAZi/S0xdzBMNEm0B7QfkkWgxSlV0QSJTEWId8BKPT6uhpmCmhe1JLpRZURlw1whFRDqRrrMMVv7mCj37sE5z/y5/Q099P3hqKIcpaY8ucLMlojy5kl8/sQVkm7PWFL+OVw/T2gxiMychLCE6wFkzSpLBl5eeqIhKryRWlb6jGQ1EfYZIEU73PLE2xEihtscJJXBv29XsYU1ADIgppNLn4squ5/nc387Y3/9fUx66iZ2QUnnH2eSxdtASVxFy4MY/cWPcme566WElNwfuYKU1V0GW5NvGX2PQkbfLz6WRZdDdZvkGs2aaq5NjKMgtOYqx2UGP/BxUdEj7gA7gQDU3nK3DQj41BPcDT0qR8NyNDDalJ9X+s+B/hs5lrrsvll1/GxptuxqJFi8l6etBpEoW7UlU+pKE1/CR77L4Lxx/3PWbNGiA4T5o1sa2crKcfSXtIemagsl50oxfdHED3DGCaMzHNGZjmTHSjD532oLNeVKMP1eyHRj9Ka4wxoDV5q4XLi/h9Elo+4g/GvoZKOCidMPjkEk7/4Y+nM2odmraE/vMdd3LhvMsjvqoNQpVDRjczT25M1XELNWMrE1OBZJKtg6PqKxO4YQIQJEwq3aFGRJb72yTqvQi4WucLtWs51p2uM7LrczsfVFeMRvWefPCIOER5dJXUKrJS5WsFna7uUQVHSGfjzvovgkkS8rINSnPLn/7Ew489wZw11iTPh8nSFK0N+Wi7kz5lWyPsuvN2/P7WOzj1xFMpZ87C9A/wyMKn6JvRDy4w2m4jWnXl43arDaEzDqE6IE0N1grLlg2CtaT9TdpFjisK0JO8/3H2TPfEj795qrHOGsy74mr+fMedvPbVr5rW8E2boX/88/OZ/8QCaDQhVHXaVA1NVUwwph1NpLpy5cgo5EOMQwkm0IquMoElmRzvtDBBw6//tqIr17qejmXJxp1fD74l7l5loGvXKkcJ5PGvfhQoQIqV3m9iz+rnEMZXWo2/xfCjGH3XHlzMi//tZZx93pm89t9fT14OYbJG3OkgL0nTHoq8xGiFaTQ5/ZRT+fnPfkq2xhrk7YJEG7bdejvEliAKrwTnFEha3aPCrSWOY6jdiNVSJ0qRupyhVk5jxgxsnscVMEmxfnS5MZsELaouH+iyU1CQCI8/8hg//fn5q5ehn3xqMb+4+DdReOgKgxSIdZIjE/tKIqpKzwriqg12QMSgRWOHBnnNq17G5p/4CGU+3KmWFN2xY0JVqRhz4GRsuRKvJt22YTKSySQ0EfuccKyieoGdE2Of1ZgeWb8TkVAFYNT1OyKVRQ4q0MxS/u2lLwEfc+wklFPrLwEVbLUfioyhAt6jkiSWEXOWLEloPfUIL3/lv3HBBb/kX1/6b+T5KOIlZlrHuClc0SJVKaoxkx+efQ677/VFQqOfMgRUkoLWPLlkEJMZvC/xtkRpg/dtskaDwlqwliSL8SUQoudPVeMqAeM1SAPnqj4GjyvzaCiGCtno7Baw3NN2FuBuVbQSIEH41bwr2WuPz7LmGnOmNH4wTYY+/+JLufv2u6AnZh13HP9dWdu+6qAJUXsM4nESN8AMwRMcULT5zze8mgMO/DowSreUG1vmuh+/+3PKZLP92VMAJoPXVrRKTNaHrthrO0K7KGP+6ZS6KxEHrraLC3UQF8SxKyxGBZRWtBY9wmv+/XVc8MuT2XDDfyEfGUYhmCSNap0vEDxGRYdXMZpz+hnn0W7l9PbOIi8cOIcvLNI/C1uMotMUrTQhlJjU4KvME9NoIM6RZb1YZ6MKJQ6qGI5SGoAgOmCr+oSi6mjC+r12B6YtN7LSLRJCR26ErMmfb/8rF15yBTtts+VUBhCYBkOHEPjFry+d8oXHs2TXG62kX6vVJpQj2HwQJ4YggvaVXOrsaVllWhCHxCkwYXzifk163N4r8dzpbbYz2UQKldE78djJLl1XsZcqk9x0bICpcHSoFgVdpZSOqTsi0S1ttGJ00cO85nVv5pKLfsF66/UzvHQBPT2zIQg+WLyL0FtEYAQjCuc9OtHorEFR5NS71YpRhKKNSRKCK8BbEq2R4LFAmlWbdCJgC4Kq+1WpBqKqBbAjZ1fyfNMTQkobvFjOv3AeO269xZSTaaeMctxy621ce+PNkKRPf/BKqH7o4D1BVKfmcMdYC7UDXaG0wSiN0ZpEa1Klq3iBWoetmtSfu4NtKinSdVzoPn65FkLAOfDVlmaxgYheQZMJv2llYlx0ZUjG7YSmvv9LDPesch7HfkEFjzae0UUP8da3v4vfXnU56623JmWxlGZPhivbeFdED56p1D4Zm6KoOO4ubxNCiOUaqlIFyihs3kIFi8KRL11MWbTRlRGolUaMIShdIRGKIFWE4GrchiKEAFpx7fW/49bbbp/yeVPu0a8vuYKRRYurpLhnShLLQUncujiEWDhbKcHoyNxiDMoYlDL4AN5TpUEFcBVWqRNE67GmTDXQMq5RQXE18F9/9kEmNESjdIos12IU3FgLokEMohJEmbjFnEpAJZWLOEr1UMVOTLeOc20rhGoyaBxaHO0lT/D2d76Hyy+7iFkze8hHhzE6mohJI4tQXp5Xq0QnqgbfqQwVn1EnCc7ZmKfoHd6WpFlCOTpCJoHDv3MEr3n1K8mXPAXB44MjJZDI2JN0G86ri4ItIQQGn1zExZf+ZsrnTUnlWLp0KZdecXWE6lZVHQUBURqldcUErrPpeyNpxJWg3iSoo3TEjx2NpPty0+pXmPBNqNPBVn5sp/PdaMS436vVoGzjyhKRML4s3dN2TQEuSnjvUVjywfm89/0f5ILzf0pPpsmHl5BkujJuBWdLlChMXx9lPjw2jTrGZYxzRml8CGgdJ2JpCxJjKJYuQkngmO8exc47bMdmm23Kxz+6MXff/mfS2evELG4x8ar1PjeqcplPc8JOlUQrgrWA4tfzLmOv3XdmxhS2Z54SQ//5rru5/c6/QroCdWOqzBQCrkpxNyaJTocASuLvohIS02Tx0iEGB4fwXqJVXVfXD4EgSWUwTWUgJ+/XZN0NtTNjvAq9/Aeibl73ZQx1D9VxKnjAsu5ac+hrphUzT/Glh4Axgi9ipX98Tr70ST6+ySacd+7ZGCxFawidKBCPR+NdxaCieeKxx1lzrZkIVSmuyo6QrrFQFYO74NBaUQ4PkhjFqSefwLb/syUjI0vZ8J/X4+KLz+djH9uEO/90G31rbUB7ZDQm/LoAaULI8xgJrfQK/QDPhkQkxnoHz1333Mftd9zF297y9O7wKTH0JZdfxeiSQWRG/woNralTbUBUOp6AuFhbLSCopI9jjjmMU047k6zZV0neOgDdE0JWdXtq/ZiUpSdw9JhkXf6MMAn3B+8I3kZISnQlCQP4ApNoxOYcd+zRbLTRx3CtJVPW0kTAFTlZlmDbI9hli9hiq8054/RTMeKwZUGqFcooSlsiSUqaNIEGX953X2b29/D1Aw6gKBejQtTjJUQDtgrHqv6NTG5Hh2mmCWeceSqbf2IjWiPLSBSUrWVsuMH6XD7vV3xi40/y+5v+QM/AHHJbkjZ6KNotVBI9ksGvnnzQ6IADjGZo0RIuueLqVcPQZVlyzfU3QZKsAmaGyeA4VWHFRSW9n1j4FPPnP47pmYOXumBrJam9IbCy7OZIcTFekYSe7Hc/qfk22QuLJmvcQzFUmSbRq2lRymNcjjIZ4GLQzqTOnYkdVkaRBEso29hlT/I/227Laaf8AAklRXuEZjNDiaKdtzCNjNwrEt3g0MO+zZHf+Q7fOfIoQMdYizCm6Y5B8WMOjjrm5pwfn8cnPvRuinYLExy+tKSpomgvYt111uCyeRfy4Y025ne/u4Xe2WvSGhki6eulaLcJ2qwWALUeEO8rpMAYrr3xZsqyjIXyV0JPy9C333U3f7z9rqhujIuSW3Xkfcw7S6pQ1L6ZA0AvujkjOiaAjmQPblpL3KQ+xcmkbpBORdjxx088NqYNODwGh8JHHznGAGULVXhcEJyv7jWV/orgSkumHKOL57P1dtvzwzPPADeKdw7TzLCuQGsTCySqhF7dz9cPPoTDDjoA6CFrVPsEBoXg0bUG1aleNFbiK8Y8eR568H6Ed4MrsbYkaxja+VK0TsmHAwOzBrji0ov5yMc35ZqrrycbGICiwGhF6esKo6uHrTujZjR/uO127rjrbl7/769Z6TlPuxje8sdbGR1uT+XQcdStt0V1odY0J75cI7FUa/3eYwXLgA0ah+lqKTZEAN8GO6Xml2tuBce54CdFP6psxHHNB0UIJmbAiCHmWyVYp7BBE5QBpdGqifWBTimszpBUS3+3V7Ia39HF89llj704/dRTyNtD0QMoHuctSZKSlzmNRoaWPvb+6n4cdtDBJD1rARpXrSZxC7p6uOMHv/xElbjzwN677cK3jziSrHcGzWaKlDkNAgmOVBx2eIje/h4umXcR7/3A+8kHl8SaJsQC7RMsXlkx/j8dimXa6usohodGuOXWPz3teU/Lpdfe8HsYHQYzuT++M2jd/BogiCVQRmnhE8RmSDAxBi5U9SikilYTB4boUQRKH337AU0d6aa8xrhaYnYnl66gVfptUOM3sYzfJ+YaBpGx9KfuFvzEhsPj8FgEi4QS8SU6OMTV20xUAywCIUeF6IWMXmANDlKTEGxBqh3ihmDoST631z6ceNxcxMcE0zQz0Z0tirywmGwG0M9ue32Oud/+Hnrm2pgsBeXIGpXDpHJKReiyeheVcR2IUJwLces53TeLr379AA4/4kjIBnBJHzT7cSrBG0FUSXtoIc2s5OKLzmOTzT5KuWwxRV5GG8KHamewKhSiLLsq9Y9nirEY6ZW3GFEoVVPR8CwsV11307Nj6CfmL+TW2/8KiQYTKiNjuTaOqcdaIG4uiVeIS1EuQ/uk2iG2GlwVosTD41zMuoi90iAJPgjio7TRLmBchPZi7bSnaXVGNZMw+qQNOtsid7dJ6igE5auaGg4JBSqUKEqML0nxSJnHlCaIgxSKDkPXJR0y08COjNLX00DKYcLwQvb98l58b+7RlHmb4MqY3xdsNbyBJOtD6X522fML/ODYk2BgPbzKsDiQAlEx9QuhwuIhqECoHVES8BITd13wWAHd04tu9PO1r3yDr33rSEyjH2f68KZB7iylG0HrNsXIE2Smxc9/diaf2PRj+FYLRdwi2rtqZVBCmqYV3DaRoWumfro2VuZBgRhQBkTzx9vuYv6Chc+coR96+FEefvQxaDbBTjMMsnLfBgl41ZUZ3YnvjYaViEW7DO17UKEZz6yeX8QSVE5QOU63saaF4NDBT6kp75EpNjXFa+rgkSDRXU+s4eE6PkFN7RoO9UwPEJNy62AtAE9Rtumd2cvw4CLykWG+tv83OOKwb9MeGaEo2ihTqQoubhVhslhKYIcdd+bk7x9LMrA2yHIBPytc6cdUms7OMUEhQaGDptnoJZ0xi8O/sR977bs/RjVITBNvFSppEjykPX3kIyMIws9+dh6bbrkxfnSwik+HJASksLgQkE489CRCY9pUMUNieGLBQh5+5LGVHr3Su/zh1j8ztPCpyorw08LQfcdzV/9Su50jTlt/V1gIJkrxqvB5tMpjRaLajR1UiVMxjHHqhWbGXuXKWn3cVK8bqS6UHleDqE9Xy7zUx1UvQ5lK165VZk9qhKGli6E9wrcOOZhDDvoGthhGKUuzJ256H0RReo9O+ilK2G67nfnRGWeRzd6gwuKnRnFuxaeN2SZR+gUfsNbRynN0kpINrM2x3zmMvfbZF6UapFkfSEqSNWkNjaITQzGyFEPBj885lU/vsCXl4gVRBSvzmKQbAsG6LhtqLDFiujSO3Yxh2YKF3PI0bvCV3uWPt93RiXudLGB75VRt+1Ark7V07mwOX3sAx7pdQ0nSSTsa+/uYXtvl/XqaVrPqqjquc3wnjazLBSyqSu2PDBOfOsImvuMMqm0oR2t0KUmwHP3do/n6V79Sla/NMdojvsR7jwueRnMGI+2CbbbdiXPOPod09rqEULnbpyFgxoxEqZgrDmgQjVIJwYEPiubA+hz33WP4zGf3RHSDNO3DOkWj2Yttt0EcrZElYIc55eTvscc+e+GWDRLER8O+KEiNGSs0G7pFynRoudVHBFzgD7euvMzBCmG7vJ1z/0OPQJpUBU0sY/JsKtRlRHZvCl/pplKPcCDqomIrNABUxfzSjQKEuPNTnCRT68F0be3poU/18xg6BRjxHcYN1coS40RMrNZJ9VrdMELGscf/gF123oGitSxWIsIRVECJjvpoNovh0SG22ebTXHD+xWRz1qP0mmCjmTE9EFjGyvqGelJqXOFI0hTnyhhPrRWN2Rtwyokn0sgaHHPU/5KkPbh8mCzJINH4VqtSQQvmHn0ojTTlqG8fiupfg0ZqKG0JqPjaJUKFdN7l1N6KCtUYinSEBFnGfQ88TFEUpCvwWq+QoQeXDXH33x6I23NB3KyvnLqjYlIPW7CUZVn9XeGdAskgbUHwVW1j8L4AHMo7hAxXZVeHIAQ1VvVnuYuv6FGmTJNeYcJ1465RIhbxCp0oytJ1mKtjoVdJASKV+uXiddrtEQBOOfl4dtpxB3zRQojqhVEmxhg7S9oY4MklT/HpHXfjwgsuxMxah9JW8FuS4LyLaIL3nYAvUfHF12lu0e2tKlWpMsSDI0kyrPX4ACSawtsKqajOt45s5joc9725DC5bxik/mEuW9eHyEUJRVqlXlqKIRvF3/vdAmqniW4ccQs+MWWgxMaschaQJqirH4KYjMSZ7GUnCvfc9xODSZay15hqTnrZChv7LPX9j/vwn4w5O05Z1lXHfBUMDcR88NOgUFxRBpTgczg4jOuDxVYeiyqGIdRuEKmA8RCeGX94YIlrY43+gE6U3lXFc0RNOvK6gvUNcgaS9lO1RdJIRkE5lze6r6irCr7ARgUg1nHjicey0407YfITgbKw6FQLWebyCrDGbRUuWsOUW23LVFVeSzl4X56uoQYBQlyoe37dJH7OCHp0v0YlB69jPRClyF5MJpMoWChXcaEzMjmnOWpcfnnEWzlm+P/dIZvb3EuwopSuisqUETYktHN88cD/SRHHAgQdjGv0kjT7QaVUfWxO06oormQ5VwkEAUTw+fz5/+eu902fov93/0NgyEUIFoE5d5Rhn5BPlmvfQyBrYQUffjNkYyTBZBtRRVPHoGQOzgIJ86ePVPetuauo8weUZcPKhqnHNZ06TTB0sRaevNNaEJAHnY2jthJvFUNlGI6VoDfKKV7yUN77xDdh8Kd7H0FmUwtvo2Mkas3h8wRN8aqvtuObq60lnr0fpojDohAB0aAqGYagnpcO1h+np68P6QNluoRo91eY+9auOZbmMSuPEVJpsYA3OPftHjAyPcMZpJzJrYBahPYhzDqMN3o7iAxjVwze+sR/aaL6+/4FYH2jOGEC04Gxd5mLqKsdY/2Xciof33PfAg7zr7W+Z9PAVMvT9Dz4C1scYDmy1zE99fqmx1LCubdyE3AKNfu578FFOOP2HBF+iEsG6EoWitzmD666/hf/4r3fwjre9nfbIcKf4uFaaMpYPnOTBxw9UIEaWTZlWcOjy+YexPnuslNc7cza//9Pd/PaGP5A0mwRXTvK6Iq7qWiNoo+kxCWV7OG5Mb32U4JIwUg7RN3MNHl2wkI99dDP+dMsfSWatg3MKMWkMD6A2XW1ctXj6ZAvnPc3eft7+1jdz9ZVXMDqyDFGatNlDOxbHGzdRRIR2PhozgDwYlZD0r8Gvfnkh21jLmWecxBqzZ+BagaIsyFSJKLDFMEY8X9vvi5g04StfPYDW0iVkM2ZhUo31caWYapjv2OLeheeLgiJE224FtEKGfvCRx8C5ji7WucsUJ1jcxks6rNcJurcW09vH1dfewNWXXhEzJ1QaI/mViU6c9hDHzJ3L3nt9tuuKljFUYfoL16qnOMEPPfK7/Pbyq/BGL9er+PdgXZUJHcs9lLZAGU2wOUoZEBgZXkbfwNrcd/+9/M+2O/GnW26lZ+aa5BZM2iC3ZeVsinCnovLSde4Dtfd1PHIUNzvSIXDAwQfw2IInOP2kU8lmr4mtMobGAqd8FD7ekzQMygby0qKTDJ01UGoOF184j2222YHTTz+JdddekzxfirPLUCoGi+WtYTCeL+yzN1nvAHt//kvkI8NkzRl4pSr8e9qmemxRQkHwPPjQwys8esUS+oGH4kPWRb3qkphTYKbOfK+kevR0xdmmTAIKdCKE3jQaTSpBmZTg4m5UNi/I8xYAreGF1S5PHqV1zHSpNnYUFeMXlNLRxTwuYi7QwYqfdhbGJbk+Trp+Dx7EGLx1aB2zaJRWMS64MUDealXMVAf+VIurxPuqJGZMJ6JRiQbXxnswiQIP9v+xd95xklTl3v+ecyp09+SZjWQWERYQAQOYERWQKDkJCAgiiC6m60VBUbnKRV8UFEQJKkpSURAFhGvAhIKCOQuC5A0Tu7vCOef945zq7pnp2e3Z3WHRex8+xWx3VzhV9dSpJ/5+WLr7F/LAA3/l4EOO4te//QtB33zqBggCUp344ICrnXB7d1V+1gqk8KnxqEK53A0orBEIaREmd2ZEXsNiuPKyS+nr7uKiSz+LQRF195FmrmRWhiE6zZBhDHmORiCDkNy4mLIQktLQfG6/9VaOOvZkrvnSF1i4oBedJa4Iy0IQBWRZDZNb3nbqSUSR5LQ3v5W0LgnLFd/Aa1z/qFJYYxzqVhtS+yIp16QB9Dqo4e8P/nPGO9k2OLhy1TAjIyOeUUB7DRU+q91Z6jIX+MV6NbPeBLLo3GKswqoYI2M3Tu3I1ZUMwVofusuJwhxJihACk4dIi0OBx6KznECFrhhHSA+qAlIZpDKgwCiJUWryIuXkRUkfms19DYpPIeMqh10VowRCtA0xWviePOcY0bqOlY3xgCTNckQYk+WWLIcwKrsogBHUk5ww7uNPf/oTBxxwCL/+1R+gZx65iLAqBKMRZEiboUyKMgZpBOgQYSJXoqoVlgiTSH72s18BgiAokWfOcVShwKRjkI+T1ke48OMX8Pa3vRlqY2TVcaTxxbipJQh7kCZE6MDX3bi3vMFBSSS5JZ63OT+448ccfOhJPPToGFH3RiB7Iaig8xylcjBjjI48wJtPPI7PXvYJl9qfGEUYQxAEDp4iTRF5Thg65tlpOlS8iUUOMgGZ+eSeZHi4ysqVqzpX6BUrV1Gt1miQj8+ZtLwep8MTuU8tHx1YrCQ3AlSIVBHImNxK5+hYQWYkmXb8f1YbZJ4jtVuE/xvA5MVasKpBHaxFjCbGoLBSkOcaIRW51shAYHQTZ8M06qW9PTb1elkLRhOFAYGUXtEEmTaUe+dz/69+zWv3P4jf/u6PlPoHKarjLNb1A9ombYUW0i1SYgzoNMUKUNbSNTjApy/6FO/5z/chVEBc7iLXFpNYpHSU1ALQWY0LPvJRzv7gB7DVcbAZSilkoDBZHWzuOu2Fe0BdzbdEqQAVKHSWEg308bMffo9DDj6Khx56iLjchRSCXLvwpUAQlyqMj6/g5DecxJeu/gJKOAImYW0DZ4QwdIxYa7SrC5NDQBhQrVZZNTzSds22JsfIyCi1Wm16aeAGF4sNYoJIYbVFlmLy1BB1VXBUE812LYtBNpFMpuzGTvuspGtjmtRQZSxKuouU1OtIJbA287kenwvUhfkj2gLYKCXJTU6OIktToqhMPUnp7pnPL+6/jwMPOoJHn1xBqW++S4/bVofXvXYnJan8eEUgEblGBRJtwOSG0sAQ53/0PMar43zsox+i1N1HntQRxhCFhjxL0D5uc857/xOB4IPnngdCEkQlRClEPIiYCQAAIABJREFU11PvcDYxqgH3MAtBpAJ0llMeHOK+e+/hdQceyJevvoKl22+DsSFCGtCaQFisUoyNruSoIw5ByYDT3/1+lq9Y4Rp10xRVKnkYuVlIEFCt1hgeHm3/c7svR8bGqNUTWil2nzEiAh55fDlGOxtZyNCxraqA1oZa4wvcZRuFblevq1GYRq+iW4SAtF6lu7vMQH8PVrjktwokhWuhjXblAT5TOO1YxqCEs0GjKKZaS+jtW8DP7rmHgw87ikefWEFY7sVGZdKJCR/3h0KBW/pOaL7N3DiiUoRJamj/5rAIykOb8OmLPkW1WuXST38SKWO0zQhJnA1vDCZLwFrOPfu9aGs577z/RguL8shJ1srCSGyI9M2xmc6JSzF5ktI72M9999/Phz/8Ya6+5vMIwGSaoOAKN5YwUCS1OocfdiDfuPNHXHvl59HWopTCpM6U7NhNtICUVGt1RkZmodBj4+MkSTLbXPCcSOsIhBTUM81hx7yBp554ymElBzEyDBqOYqOhVoDQIG0r0p6Ytk8nlly4qjn30YLQCGkZW7WKE487kg9/6Bx0VnPImrluZI2KzuuZwlHCz3RZmqLCEr19A/zo7p+y/0GHMbxylLB3CGxArhUiriB0teXBKpS5KG/152YdTIJNa4RhgFGOhk5FEUYKuoY24qrLv8h4PeWqz11GV6kHXa27qltrUEKidUKeWj58zvuIo4hzzv4AqrsXaw2GUlPJJGAFRueOIjUIqdcmCAPF6FOPscceL+OCj1+AyXOMNgTKwyR42zxQISIu8YH3f5Brv/AFVLdD3TIF7NtsFNpf4yRJGJuYaLtKW4WemKiRpakj2FnP0r6bwduNPmXrCuTdjOS6I1yntVDOMfvLXx9k+WOPQRDjQMdDf7LNZloXt4zcKRaF5Y167RkGJ3w2TvpEktAwtpyVw6NIYjQ1jE5QGqxt6afTGmP9AzVlkhaAEhKrBFHUwx/+9Hv22ucAquN1gt4hMi3ccbVBqNZmVknBWiWUc3a1MSgJwmh/rSLqSQ0VR2ipMLkmUwItA0RPP1/58nWMT9S44rKLWTy/G5MmSGlJs9xhoOiUtD7K2e95NyoQvPe9Z0MYE8YROrfOebPSlVgFAVJrlLAQSuqrHudVe+7F9dd8lqGhQbJ6lTAIscY56rmGsNQFqsw57/sAHzrvQ9C1EILQYW54gKGmD9KR9oB0dny9nrRdo63G1up1yHJXv/F0SCMa2AwLNlxE/5V7DhxwSlzpQlZ6CMMY6+mVhfCvyaLoSVgs7vXZsIlXMwRXF22xUjTqoaQ0pBNjBEHkxyQQpjk7NwZaVAm22y94DGxnNgyPjFEdHkX1DqJ98Q4A02zw4jq4+IrUDtlI6JQ0q0OWEYQ9hEEEGEdHoV34UBtLEMTonn5uvelbHFOtct0XL2XBgo1Ixlc6IMakTqjcw5vWRzjrnW+nUg5557vPIquNEZe7/Q0w5EJg0xQVhpi8RjqynEMPO4zPXf4Z+nsD0loVrHFOLIpMW8K4C2TEWWedzUc+8mG6ehdSD0tonTf6LF12chYtW0X0Lsuo1eptV2lrJKdJ6ugVNqDJ0TASpgzBANq6NLo2rhFVG8i1JTeQa0GuBZmW5LlBa402Bm2LCmuB8ehGrUuBr6G1JteuyXVq2aMD+J99In2SmqoAQk851HgYDNOgc22RFbSgcxfGtBnpqidYdvobOffD55CMP0kgcqxOsFYTlctYbRHKNR6EYZlS/yDfu+O7HPX6E3n8yaeIu+eR5zlRGLj4r82RNqNeH2HZ6cu46MKPQVIlqY5gTeomCOuoorO0RjryBEccfRRXXfk5ervdg2F9FlMqxy6rggpCRrz7P97HRz5yPj0Dm5FoiTFrU8vRevH89UozN+m2kbZTcJploAuMitnfwDkVP1MXHTGF0hmKOgo/S1vA5t50EDTYA9oGPnxVWqPtx9nrCMd86+dI52BO7TZdk4jm/sE5h8U+RFGfYHWjBryxe+utJgyhBGU1E8OP8+a3vJn//ugHCamgRxM++KH3E/cvQipBWp1wFCG58wbSNCMMJGFvH9/9nx+z/0FHcv21X2CzjeaT53WwCdYawlIXJk2o157itFPeiAkqvPtd78FaS5rUiEplrDFk40/xhhNO5pJP/T/KlZCsNopSYJQgCBTViTrlSh8yKLNs2bv45EWfJuhdSE1LbFjB2nyWCFdtxAJGk6XtIYrbztCue3gdn6b1JK1Z9+KvS6JIV/Lo/90MbTWXQBoC6pCPY/MJTDKKScYQuuqW3C1S19DphIuJes4KY93sDs1EVTPlOTXebKf9u+mGCk8mP/lqCnAxWdskvZRYv55sPAhSCDCWiVWP8Na3LeOSiz9Blo6Q5k9x7gfex4UXXkwy/DgmS1Fx5CmqNEZnBHHsXufGEg0t4N6ffJ9ly95JpqHAbxZSklRHEOSU4oAkneAtJ76BZcvOoL5qOXEcY/KMZNUjvOnUM7jkkosRaNLxESzGVxhCnmm6ensQUvKud76Tiz59CWG5BykDwrCCtQqxrlEzIXwo2ZLr9sxiMxjJrfUA/vKLGWK660ssk8qcpVeAwgu2ws/JLbphiwZYWhxCvMLjUDVDkdJbKpPUawTKG+MFALnfkTaGSqWbzAqSNEFGLutVwJaJwr73TZtW22bgQShQIQ3+vaIFa5Kja9vUB06uSXFp3sJIdLO1lAKdpWQTj3LWWR/kvPPOJqmtcEhMWoPMWbbsLRBIzjzjrdA1D0GEjMuYLPWTf04QBdRXrmLxpltz5tvfRilWmFqKCiT1eo24UkFnmjw1xKUhvvOjn3DN1V9CdXVhsxrp2Cre+tZ38LGPfQRpcw8xLJyzK3LSLKVc6SfL4F3v/A8+efFlhD39WBWTa0tGjsW4t9CUWXIm+9lOXbfQv4a/0n66bavQqtEO0To9zqVCu1nI6Y3xiY6iZ883bFlbtN0irPPyHTqE8vHfxEUlkEgbI4igWucV+76Sc99/LtWxYeJA4NgGNAZfBC9cerrU28t1N3yNSz51JUKWQAuCICIXznGyGIznlJEmo+A6TFPtOttRWLQv+CmunUvfS+mw5ABvWri2Lesf1kbdS/FwCtcLb43BZBOc99H/x1n/cSY6q6NQiDzESMjSCSwTnPHmNxDFitNPOR0qG6MSQbncT1ZdiSoH1Fc8wiYbL+Er11/Nbi/alerIQ1TKIfW0hhGQ1nNk0EVY6uWuH93NUUcdy/CqlVTimPGVT7DsrWdw4YXnkU2MeWIlCOKKC9WRUO7uZaKas+wd7+Pyz12N7FlIXjA8KIA6CN/N06n/1/omLPTPmEYUKQjbz8Vtvw1DB5Qy7SmZUxGT/jQrx1a/hW38bTU3vNiMjRcu5MXP39l/TlyIr7HvwgZ3fCl3//Q+qCaIWLh6Ee8QFSFES+Zm3hZiUSkNlEM36/vZeGof3azmAVNQGDsnKq5084IXPh+Aei0hiiRKSV+K6TJ42qScdvKbCMu9nHLsqZiyIK3nRLFiYsWjbL3tUr56zfXsuPMOjK56jFK5hCEnKlUw2mBM7JT5Bz/kkCOOZeXwMFEcU6/XWbBoI84+5xzyNPFRJFccZo0kSxOC7gqJFpx2xpl88covoCpDyCggy/0dchxxOCyntRTvGzXDqsGMTFttjZo4jl3G6hnmD85eJLWJMQAmxoedl14bxqSj5MkoeTZGlo1Srbm6AGuBKEaKouzTPyrCk7pb37kuDcamACT1KkysIJSWQIoGp7Zz+AI6bg4trrX0FX4eDD6p1Tn44CP5/l0/pqu3D5BoXG2FwBLFIdZkZGack19/FJd+7lJ0bRhp6kysepSlO2zLLd/6OjvuvD1pdZhSJfZuQkCmwRIRlQf5/l0/5KhjTmT5ylGi7n5QEVIGdFVc+M6YHBUIrNWun9FmxL1d1DLJCSefzhe/eA1h/0JsWPIRIidifc6Jhb0ZhkQzYNy1vdrlUuy6MP7lNVojfJ9iIF0MWYkmgoZqoGr4LnRjIM0RVhAGoWsMtqYxz1qrnUmkBLIUotNh3nzqKSzafEvSsWEEGtng0HUxWdupQgvhzS0DwiVJpHQx9/GJGvvufxC33X4nYamb1LhiLKEkOk8IFOh0glp9mFPfeDRf/NLlJNUneO6O2/PNm7/Gs5c8C10fRUrtAGzCkCy35JkljIf4/l13cfgRx/LoU6OE5T6kCFBWYLQ394wmjAKnyMW1EhZ0ximnvo1rr7qGoHcIG8SgQleW0OIAtmsBXWsxBsKAUqkNJTczKHRXVxeqAGfcQLJWT3WREGx8YRpQtkr52cK3kwlfXyy9UgPIIjPnb6Z7rRWRB58MkBZs7ivTDEu3eTZ33PEtNl+yOdnICpT3AQqnr+O2I2tdb2HxVlCKPDcIFdDV10890xxw0KHcdPO3qFR6HTSCcdvoPAObEsicNBnl2GMO5YbrruHKKy5hqy23IKktRylNEAiiUJEnGYiQru7FfOuOO3jdYUfz1Mpxoq4+h82XaiwSYy1RGOJ6cF1ZgQoEOk8RgeKJJx7jxptuR/QvAuEcQLRtwf5oGnbrpNQNS9JCrgnDgK5Kue2qbRW6p7uLUhw7xP4NJA1ftuheFqKZTGwnRcpcikkdzM2Qm0EKx1niKvMK7r2mp13UMBcYbM7vk1R6uoEQg3R03tJx1xqTkyZj7LD1Er5/561svc1W1EeeQkmLsRpMUdvWgTQm6GaNA0q5fjyhECrGqpBDDj+S6268yXVhaxcSVEoSBgFZWiWUhmxiFYcdcRi7PH9n8toq4sB1ihit0ZlBhiWi0iC33HYbxxx7AiMTKWFUcY0HUYxRCp17lFdrMNZgTAYmR+vM+1YCRICq9GCtcqgGInQVg4GkWX4w+3uPP3/RDGe1RDgsURTR29sezb+tQvf29DizYwPO0JPFtgTk7dSfnBRhviLEWHxqvSjQ8rnoJLctCu1WdLkb5Ujju3q59dbb+eMDfySOe0FGWOsgv4IwREpBvT7BFhsv4Af/czs7PGc7qtUxCvAMPatO50JRZGNMFkjTHCVDVFiCIOaoQ4/kqi/dQFjud4qOA0APQkWe1ggDga2NYOvjrvJN5+RZjhUBuQhQQS833nwTx7z+eEZWjhGGJQ+XbMjrNRcpkDh7WVoCr6CuCccrqXH4Ia4zQjWBQqT0ESDbskxx1juQaQmYogZHCMql0uwUur+vl3K5zOTa3A0ta3i4puc2gGZ/uLu0fgYuYsCTyOJbt/GoT1YQxGXuu/dXHHXU8fzuz38lLg2QZyCDmCzNEVYTh4raxDiLF83nu//zHbZashkrnnoCwBdUdS5TwckdfYSz6bPcEJYqVAbmceIbTuKyz12FCnoQInTonzonDF2ZZ5E2txbX8hRXMBpK5UFuvuUW3vCGUxgdrxP3DSFVQG4diKMMXRlsGCmszdEmQ5sMGUis0QgpfSmpRMoQ5bugRSPF6UEup92v9eAaeuutXC4x0NfXdpW2V3tosN/ZKBvQ5Fg/4voOAQeW6BfHhqU8NIBnssJnpAVuhhSCHAhEQGVoI+6/534OOPBw7vvN7wkrA2S5RilnxybVKnEUoOsTzJ8/xK3fuomddt6BTI9h29BcrFl86M+6lL4SAisVwrduGWMpdfdy6imncullVyCDEsbKxnk0d+PrtK0gqRvC8gA3fPVrHPP6ExmrZnQPLSRPXP+gwCBDgBSs8dEhzQfOPYehwXmkSc3BfUnhjiMESsZII1zcRWgHRt/ozXRx5IIIqmO4q9WKi0VXKmUGBwfartFWoQcHBujr63Ue5TNQ7JS/k5JAUzKcujgFqfDeDQU+XQGsWMSwi7yGERaDRMiINHe9i5WBefz9gX9wxGHHcP8v7ycqD5JlrnE2jiJ0WkdYTV4fZ8mWW/DsbbZ2JJizxgRsOSUfJzcI6rUEkI7uLojRMiDqXsRpp57CHXd+j1KpnyzTLsLQkrW0VqBURKm7j2uvvY7jjz+JxArCShe1sSoyilxXi82xNkdKyLIaVmd85Wtf4Zgjj2NsYhXKAzE6sCCHelUudREI38BsXAq/cLqn3p11k5Z7awz9fX0MDMxihgbYaovNm979pJ3OsdjJH6xtscGEoOgNEaKA4y2cD9FQVpdGdlnDSpeLo0ZRBYIYG5URUZdbwgoyrBCVuwGBcd23blubYU2KkZLcQKIh7OrjL/94mIMOOZx7f3o3pe4hcu2K7WUgQTqMf60T/+zYWcMQi6J2u+VC5BZXoee/NlmOtQKT1znn3A+z6267kaQThFHk30TOzMgNCBVC2MPnrriK4088hcSARaGtgqBElmv/oFuEydBJFYXmppu/waH77081GSZUylufyvdMB8i4m4cfeYx6VtQlu8GJNhPLmlNk08VD4tNMfklnMVjNVltuOuN2MxY8b77Fpi6rJgKfYcsRMu54ZDP5k22rrVo8/KKeoVHgb/xrzn3pTs0YQqkRNgGl0QXSvy/udAj7dYKumHt/cR9HH3scWeYQPQUglHNgZBEms5ZS7xC//M0foauMijKyeh03awdoLBC64F53hQcffYpDDj2eG756Hbu+6AXkyRiQosjRwiKlgjwjtMrbsM1IShGqKW7VpMvQCCsKmrXdTgKrEYEkT+roPCck4ez3vo2zzno7xmi0qRMGrtMkNxptBVKWsGHId7/7A950+mnIoIQKyuREEFScggQBpONEYei6wHXOzV+7kb322oN0bJhI5AglIAMjHLtMXOnn4X8+wusOO4qJWhVKpcllFzTP100u+PloNu5x7l80CkwLZ7jM2WLzRTNuN6NCL9l8Uxe8bY0izJUF0kmY1v814LootJuJdBGtaATy/ZrWEnb18es//J1f//pPzSfMtNi0kyqdJPT0EZYq5GmGUCFWm0aLVetIKj39PL58JXu9dj9u+MqX2fM1r2Z8/ElCJQmkmx1lEEFumoVNHZ1rE4LYtr4ZhUYEITavI4xjyfr4Jy/gLW85Ea0z8rzukitaY4zxwQCJxaGALt32Wbxmj935zm13EvRGLuuZe5pkIO4uM/HYQ/QM9fDVb9zInq96FcnoGGFYzI4OlEZnmlLfEI888ih7vWZf/vDHPyMHF3VeoD9LKQoOWkJUEMUs2WLzGbeZ0eR41pabN0r1kFOaNDegFOFIa519KGz7B00gqOcgSr1EQ4sRvfMQPUOooY1Qg4uQAwuR/QuQffORffMJ5i1EBiE61Q4ewTjeEBe/Es0FSZpr4u5eJjLN6w45nFtuu5Xu7gWgIqwMyVPt8Jb17GaA5ku7JWLgk0NSuJLNtDbKpz/9Cd7yllPIkwnqtXHXtIslz3P/RnP1HsZk6KzORhttxLXXXM2++7+WfORJSrEiMClhIFAhTKx8iqGF8/j6177Knq/ag9roSoLYJVAsFm0hR1HqW8xDDz/E7nvsxR/++BfivnlzpswzihQ8a8kWM/880w9Lt3kW8xfOA5P72O5cjG724pIO0tvT0hNMFpCxbpEWX0QUYGVEmmisUVDqQYsILWOMB7kxMsLIGJ04/pYgipEIR59WKHNr4ZN1FXqJEZS6ekmN4PAjX88XvnQ1cdSHQRKWujHaIsLIl1p2Lk0YYgsYpHX96LVVTyJFzhVXfobTTj2BvFZDCkspDhxKq3U9gCpwNQ5GZ0ShQqKpjw8z2N/DtV++mkOOOILakw+hAoHKa2S1MQYHe7j5pq/xqle8gomJFZRiSZ6MIyOFkO6NEVeGeODBB3nZ7nvy1wcfody/kMzOHdd34xK0Xr48Z8HQAEu32XrGTWZU6IH+XrbbZgnkmbfLZ42w3bnMYrdSCBQCJUBJh5uh/GvdFcq3LMYBm4RRiAgU5ClCZ64v0GjQuWs1SxNfqyDI0zoCg5KOak61WZCgA0ndGKJKD5m2vPFNp3Ll1Z8nCnvRuQWlGjHgSXdldedaFPe7zIXjfRGadHQFYSj44hcu58QTjieZGMOYOlanDgbXm1FRqYIKAoQHhnHlloYoVmRJjZ7uLq787KW87uCDqa/8J1l1jMWDfdx+y028eNfdqFaHCYQFkxJFLrxZTzOi8hD/+MeDvGKPvXn4sRXEXX1kmWEuyeslTWvQiYUs4dlbLaF/hhg0rMaGjqKIrZdsyQ++811XiJN7ksU2E0771077O9d2XYuLmU5zGooUtq8wtgaT54yPDpNOjEEYuxBA5OBsHaZ4EQM1zgfQ2tHEeUcQoxsdxzTWh7Tut1OK1OIe5CCgralV8FsLS24cuxRZxknHncDIihUse9sZ6Mw6bkFn3E7JWM5Qnm4MUiiMMQRKIk1GOjGMCizXX3c1Bx14IDp1RUZYDdKB0VsZEYa93HPvT1i+fDmv3fsAkmTYFeBjCaxBCklWH6W3t5vPX/VZjtOae++5h2/e9FV23nlnqtWVRMoTCkmoJwkiF1R6FvCXv/+dPV6zD/985AnCrj4yCwRhA4q304zybMyTxmRQRNoEkOc8e+slM6L3wxqYZHfZaXvAFdfPljRobaX5xm1GOxp12RbyNGWnHZbyxBOPI8MSRgagc5SSk4l6CmDDwlpoOLdtjonLDtKCEVFs0o4a2TZMMG/tGo+OrzMu+uTFbLbJxhx80P5o7ezasEPvXgiBNTmhAGEM6ehKolhyw/XXcuD+B5AlI5g8RSnpao6TDCEDolIvv/vD7zjqmBP529/+xnXXXcsRhx5Kmo4hilyp1SipSKvj9PX28dnPfIpVq1ax7dLtGVn1OL293ViduqZiBKiQUnk+f/rLX3j1Xvvzz4cfJegZRCM8r6O/SnNkQ9uWGyGsj34pxfN23nG1261eoXfcgZ758xibGHXEmxvUJ3TQsJWS4tovX4EKXdIj14YgCpAqaAT2XZG9L0ZqU+bVLnxkcMSckzXaNtqwWsXhzlmw0r0aC/tdWKrVcarjoxijHRhMsa/OThGhM7p6exh+9AHCUsRN3/gae++5F7Xx5YRhQFyKAUutWiWIyoRxP/fffz+vO/Qo/vHw4wTlAY459mR0bjj6yMPBJuis6hD8pSAqxaQTwywYGmThvHlMjKygp6cLnaUYk6EihbEh5biP3/7h9+y5z+t47OHHiQbmkefeN8bSgI6aI2n1JCwGMk3P/CF2ec72q91utQq9+aYbs3jxQsZ+v8KBumxI8a8gYTLmL+gnqScMxGUQkjzXSBV4osoCbMa2nz0aGbh2P0x3Kdrh/wtPCNR0GgMX9hOCgZ4uxOIFVGtjCClQQUDBHbN6cennKBAMP/p3uvp6uf3bN/OSF7+E2tgTxJUyVudobTDCIuOIMOrn5z+/h/0OOISnVoxSHpiP1po0G+eYY09mfHScU045EcgIA+9m6pwgCsnzGlJI4lLoIW1ByoB6NaGrdx6/+dOfecUr92bVylEqQ4uoJznGR71EExACvWa6+LUWgXPwjRCQpyxetJDNN91ktdusdjSLFs5n5+fuwJ9/+9s5jnL4TN/qpjOBnx5yTFYjCMDkNYe24PjEMN6Rcp0lFiOUMyWmSJO6d/IQOnsFCfB0yK5HTlEotBEuISKMJQwdLLDNcwfBNfNJUby6ZSCpjwzTPzSPO++4leftvBPJxCrCKEQndYd25Auhens24Ze/uJd99z2QFWN1ou4B8lxgbUDUPUBWHeFNp51BrV7jbW99MzYfQSoHcWCNRhZ2vHARIWPBaE1X7yLu/93v2f1VezE2kVDu6SdJcgfva10Y0QqLJHcPtp17MCKB48rZ+Tnbs3jRwtWuu8ZSsFe+9EUOEmyGyrT1IUK4el3rLxhKFgQJHvlIFgatazj1dRPGZCAMCoOwrl7XGleTgMn9/qYPui2mNQYpnJnSXMyk2cgtziGzBZFoY7Z2/xY+hGayHKVUI7HS7tJZo1140eaoAPIVTzE01M8dd97O83beiYnR5UjpIi5FWelErU5vzyZ87647eNkr92LlWI1ypQeQDj5XuCrBMC4TlHtYtuxdnH/BxxFBCZ0btDaNfkQpwOYZ2mqMsUSV+fz85z/kpbu/mpHRKlHki55CZ+b4UTeWdWOvWYO0XDBrLYQhu79k1zVutsbH64W77EilZ4DqRB3C9ifQltZtBmeh3bpCu1lKKIOxuYOnMgJQ5LZMqAxCazAJVioIokbRkcDRkxWYeG46DJpjsG1s4DaVXy4DPhU4sM16OMYBKwtP2/eiW/fvUEqEzglFgM0KRlWN8jHbIr4hha9JkdohFw2vZLPNN+HmG2/iuTs9h9rYSoLAokLnsoZxQJIJeroW8e3v3MHBhx1HkkVQKVG13qaVGshd7YcAogoQ8p5zPsZTw+N89LxzUUFKVhsGmSGEIIgkqRZE5SG+873vc9ChR1Md18juPuq2QG6qT76fVqKJZ7yfjWs/7RrPYkYsohwSMJbuvm52ff5Oa9xsjQq9w9JteP4uz+Gu7/4Yq1Rb+oB1FgFKOngvlIJc0+tjjWGpi0A429ha7bHs2oTSOo4cimnwYu3qKtYwXIrCZdOCr1E4hjo3rn7ZJARSuLEjG1YTgDWZI7zMcuq1MZYs2ZJv3vQNtttmKcMrnqK3vwI6dVEWKUgTQ1we4hu3fJvDjziaXERQ6lp9lMFaRBhileDj53+M6vgol3zyQuLKEFl9JUnuQo6l8hB3fO+7HHTokVTHE2T3EGtHwbb+pMhnCYAsZecdn88O2227xu3WqNBhFPKSF+7CXXf8ACHbd9quq1hr0LlGKuXSzTLgy9dczz0//xl5UkdJT2phNUYrb4ZM2kP7GYEijjl53WmIl9bhsrV7WKeZv0JgbI62jsSoQZVsXdJFm5w8rfOud7ydF7xwN/LxFQSBahgdxWOgBFidkY4Os83Srbjx69ez3bOXUhsfprevi6Q2RhRHWCPQGuLyEDd8/UaOfv1JaK2IuiqkHWUhLVIpVN8gl170GcbHxrj8s5cQlfrR9XFKpQH+5/vf5YDXHUY90ZR6B0n0M6PEwQWaXIz/5S96AWEH4KEdWfR777kTYeIQAAAdTElEQVQ7n7j0Smq1KmKOEEml7yFL05RSXz8/vvvn/PiuuzxLFj4OrsGWvCM2VTpP7sw0c3c0JVlw/XIFe2zLQ6AsJFUQcMwxxwAKEQRYX1/t3i3OXlfCUlu1gmdtuzW333YLm2+6OdXRJ4mjAExCFIXkxvUTRlE/X7r2Wt5w0mkQlghLZfKilrSTIVsQKiLom8/VV11NkiZ86YtXUioN8J077+DIY0+gPp46dixdnOQzQ2yW0TU0yN6vfmVH63eknc/dYTueu8O23P2ju+cEYldI6cBLtEaFARocLlpXH5lJkS2MSc6rbmcDr6MdP4t6FdfE5aBrWyOmEgPlOsIkxKUyLtLieB6NrwZ0PqKmNvwkuzz/hXzjxhvYdNNFJNXlxCVF0TRWsFzFUT+XX/V5Tn7jmyHqohR2kWrh8ag7jAUbi9UCGZWIhzbihi9fT1Tq4sijjuL1R5/I8HiNcGAeWWJ9I8Tcxpg7kQbPe5Kw4667sOP2SzvariODuK+3h9e++hWgJoPJNuCa1pf4lp0s1xgLmbYYo9C5wBjpm1MdLNfUpd1/VlisKP7axmeDnrZoNMZOX3SbJbeGzAi3aOkXRZoLl6Axze41d0xBnvtYtDGgE165x+7c8s0b2XTTxdTGhwmiwL2NfCwtCGJK8QCfuOhiTj7ldCh1E3f1Ui9wu4Xw1a9i0tJWlCIXiizTZLklHNiIa79yE/sdcChjSU4Qd6M1WOU629tHgZ5+kVKCCtjrVa+YsSl22jad7nyfPfegZ2iw0ZbV2pW8zlK0xUtJpg1CONBuYyxY4eHufHexwL/yWxfb5ruZfrNtFrdPi562tNunMyGKNtRivlYgfDu/beLbGaMRUnj7L6M2McYer9ydG66/hsUL51EfH3HoR1nmCCyFb+IVFf7r/PM5c9m7kaVugriLTFtQAUa35/pe3fW1RTe5UK6GXASIIAYZulBfgcm3rnC360mskOh6nb6hAfbd+9Udb9exQj9vl+fy0he9ENLJyJ3rSyyuSbVZ3N66f0HRNIqPGbfGQ6d/nu1iZr+Phh3tHgjh2aoK4k1PfOgq9iQOFNxkbL7ZYr5ywzXMmzeP6sQoKhCYPENKQZZlyKBMEA3wofPO473veT9R/zxUVMFY6Sv3irj3LLstRHN9dyklKOWTQcVVtpPW25AipITc8OJdd+F5O62+fqNVOjaIhRAcvN9e3HrLbWs1wNWJmeHhaDJYNYP6jTBZ66tBeBt4bV8XojCfpn8v2sSsrTQgUzCBj3A0Q4nWE/sI/4AYnaOFQBiDTmpssngh1grS2gjlUkRSr6OURGOJKt1Amfec837O/9D5hAPz0NqRg9pGgqa5b9vx7bMuISRaHuDGv11Y0Z2vRTALEp85FJs6rO6DD9x3VvHrWQWVD9xnT7bZfil2Bn6L9SUCfLOo/7e/IdJqpJUI45hO3aLc50nfzXJpbK+mfz9t/dA7LJl3yrxZUhghkx5CV4ud1ieQkcRa7cgnJURBiM4yolKMNtqRxYuId77nvZz/XxcQ9Q5gM+uaXCfVohsEmVPQWUSKBbr5MBRsWi1vN9F4WDa8QwiAtTx7+6UcuO9es9psVgo9f94ghxzwWsA28ZznQmxr1La5CIyjHbayZVFTPq/lwiz2BTRe/aJprjQU2kKhbDZziEbSK62wBpu5hIlBkCYppUoFGcScsextfPz/XeTQP2UEYezs3aKvUeCQUAtfYBbS4GuZtuBnZtuyztMtk49prQGTc+iBr2X+0OCs9jTrGNyRB+/HFVd9mSeeWoGM4hbKd8cTony1m0bN4tJMOaFp1oObp7Vwx2lXutg2bDebJ66dyTHDfoUJUXoQIzOsyEFkzomxikAppFUuQ4ijL8tNxR1C54SlCJNloCw6zSn3DKK15fTTz+Cyy66C/sWk0hUrufh73owkWTAEmOK2zUKpdbu5qyV68bTMy9bzL/qn3oU+NQZfc1NEavKU+YuGOObgfWd9iFnnsZ+z/VL2328vSBK0dvwaDs2TSand/xMnRjueb2MMYRQ7xKUwROfGV7JlvPHU07nss1cQ9g76hmS8bf5MsGbXo0x5s9ii+MxT8zWW1HLg/vuwXQep7qmyVoUZJxxzGL0L5zl0zbyTWt//veJwPzRKyobjmVlBUOoiTTXHn3gKn7/ii0S9Q6jIJWP+fcW2+eQV2ptzNrf0DC3g+KMOX6sjrJVCv3jX57PfnrtDWm87i8zEGf+/Uaw1Pr7sIikqjAmCEmNjCUe+/gSuv/YryJ5BdNBFPX9mhMzmSqQtnP2iUqMlxOn9F6oZ+71mD1662wvW7hhrO7i3nHICvfMGPZ9hkWRpcvr9nzhRUmJzR3KkjSAIS6RGcsjRx/L1r3yVcHABstQNWiCDEv/WU4EwDsKt4RIELiGFQCIxaU7/gnmcfsqxa32Itda8F+36Ag494LVg8kk7sawetHSu0qpt9zurXfuUyJRU8rT9zlLhTK4xeU4QhIRByKrhUQ4+9Aju+PZ3iOdvTGYEearRIpgZmKZR6z1lWVcp9jFpn2LaNVhdHLjddZ/xnnrKDQvNmnRjCcMIqXNIUw7a7zW8ZLfnr/UprdNUetrJx7Ng0TxMnjVOen2Xdzxd4jLJHSiJtbM6P6UcQai1Fhl08Ze/PcCtN38L2d1HmlsQAcgAPHjO0y5TjzmXQ/DK0VB466g3TJZhJSzceBGnn3LcOh1inRT6eTvvxHFHHwbazBoh6F9XZnfHhVRIpRwBEZBp7QiZPCJRI5Xf4Gb595Xp4DGAsFhp0DrjDccezPN26TzNPdMx1klOe+Mb2HqbrSCptdRg/F/srhCjHZNW8YoNlEN0FbTyv2ikzT0b1/+Ga1eYOg7LxNRrLN12CW86ce1t50LWWaG33GJz3nHGmyAI/+1nGCezP0djCgvdOc54J9HlJ10dtUQjnlEUIHMkrZfPGkQYQBRw5ulvZMstN1/n3a+XcMSxRxzCa179CqjVZ9cI2YlMas5sZszW98PT+d6mvTOb34np+xLKFeqrojHCAkr5Qv+CvB4HkvPvHOEAQDSxL8GVs46Ns/drdueYIw9dL0dYL+0nlUqZc979Vu79xS8ZXjlOEASOI3uqzKTrtkAsaq1fxoUEveOAECgRYLLc0bYpRZonLl2qJFYXr+uWLpK2Rhu0Vd+ZnNkZNjdYrIhaIgWutiMTdZRKEMrgoAU0QkGmM+IQx+VnQ3QWuEL9IsopfarVdD7HzJT5bvu1bPPDDPdjVpGnmXynNtc9syHN+yMhSRhcsJizzjydSrk97+BsZb31U710txfy1lNP5NwPXgCBdAQycnqGZSpMoQVPjunKLyk6S4zBCENYLjs+aus6VZQKwFqHDmoNMgwxOvNY1m6PRU2yg+KaEr4TtG2GLfSpExNW4FiftD+a9Tl/d5skosC6AYIwxNqcLHNfRAowOaUoREvhKxkcGqoQAik6ZPCd4S0lPG/M1HM2ok23+0xhyFm8ZVWb9k6XO5luPjmiLN/EYA2WnLe9+Xhe1gHeRqeyXhsEzzz9FH7847u587bvQNwGIVI4NNHWiygA05pa9G1SSAkGRw0hQ6JyhTTLXAheSLK6x2LLckxab1HEgnWpIH+cPox26jKbRmdpBZLQWb8tzAGWHEmGBaQIwFjyLCcIBYGndzOZBp1gsqp7SIX1ZaguPquN7NgvlG1WNJb2Sipn2Ok6moh5u+cBaHeVHbW065ahnrLH3q9h2eknrtPxp8p6Vei+3l7OPevt/P1Pv+GxJ54kisIWRcVNwNPy+RYlJEWBmbvB0t0AEdLVO8jIqlGqSeoYmIwhCCRJrcYmGy8gqY1hKhJhcz/BF2YHflafXObqlGbdnC+JRJnAddeIom5MoLWDSOipVJwnKF0yJddJA8VUSU1XV4ixNSKlQAqk9JV1wpWwdiodGlNu3RmaiKeaFwJcbXaH0u54rqG5zS/KPaxZmrNwq4354Flndtwr2KkIOwcdkP98+CGq4yMopShojYu+wXYXq6h1ANsEYkFhg5DcBJz5zvdwy023oio9RIEiGZ+gHCu+973b2GjREFla9eRn1j80DkTRFNBiU259W3XudKISIA1I7WBljfD9KUI6mDKdIq1m8cL5lOKAJJkgjByakzGSNDU88eRyZIHl55FSkdrNljKiUxe1nQ09o0LPtG4b3BIxm5zCtOvms6sUc5j13wpSk3gMPctA33wWL17c+XE6lDkB2dhk083QyRhpdYwwjMjyHIEDURft7OoGyr2vlRUCbQSplcTlPiIBJHXC3kG0zhr1tJtutIhFC4bAVMHkNIperGM69dUwnQ16Roe1nSdlGg+oN8qd5S4Lz0uikzG0rhHGDnZBClcLXClFLHnWFv4a2EY6GOs7vqWvGV7bQc80P019ioVfdx0O5Y7X5jut0do9oLKRQbZoadBao4IKYbx+Z+ZC5gw6UgZljBkhqY1jrSUuV6iOj1KK4zZFhKKhpMLDDwhVQoiIpF51M21cxlqcTRq42TBL6mTJONLU3AxtcEpmA4wQSDE7hW77+pzm3Ahn3pD5plWnzM7pko0ZVwiJEMbPVhHGOg4XQ46sZ9408lnC4joI0J2CozPLFExHZpYb0zRkKfA1HdNDJU3UYtswM4zHUBFCeGoO62B+TYJUMfF6imi0kzlTaKECwq5B0upKAiWpJwlBFJG1mUEcuiZe+dyt0nkdqyRRuYcojCDN0MZS7u4hGVuByTx7YBiQ1YyzwQulFAJD4Jw0a+ioWWwmvZ/WsSAw/gVQpK0LRP/WiIr1neSWwEMwuPYsicMtRXhwdmyjEdeuZhizGnNH5zGTiOnXy13Uxu9Tf7LCukyovwZW+AccKGo3cmPQVlGuDE6ncF6PMqfgvlGpgjGa2sQwYejwHxrWRYtoGYAUCDJk0QwkHKhNqrVbPwgRUlGv1UAorLJkOidNM5RUDlgGZ3sbX5YoCru6w7ms7VptvjSEWNuSKGn8nW6PtrrB3lhpUQ2BoGhL8iimnWqpnV1WbDadRHZqDqF4iba5GM5ycVe+QTAqLFZ6ElThwqcaSamrnyCau9kZ5lihAeJyD1JKolK81oeLu7shy9CZxqUrBFEcsmjxIqI4BubGHvs/WV+SkWeaICzN+ZHmJMrRTm6/4zauve4ayuWyg3iyzXnL+ESH8nFcaS1CSqSMSUzEt7/zAx56dCValJGBQORVusqSffd8BX0VRSQtUgofFw7RIkQTIGwCBR1EYZvOQFOhjIsvT/tpSvxWALkIyQgp+AEKa8nFWQtLtHAYc6xMmTp7u4iMs5NEgaZaZEnXNJ02c1AdiRVgVOdTtGlzjQS02NDN12yjWH9KLbRraDCkacrhhx3BPnvPvuF1bWTu+QS8LN12ex56bIzv3XoDELpYM4VHUYSqWp0kL0pBuYQsl3GE8u71PFo1XHv1N3x0o9VZaXWXCuyJ1t9tyzqzdq1ajtEul9yud7qT8MDUSHmnY1gf0iaKU3BoWGgaNsV9yfw6xeYt170RisRFbhhnz/0OZPulO6ynsa5ZnrYZGuCfjzzGSWf8B3f86KeIPCeMIozOkUa5icmNyMd2Ldq2ZvpsazCk9RTc/xvRgZYffQdIUCqRpzWCQJF7CjbRwhDrOtZX35nRKkXCZrq02X4G29NFEjq37yeL264tV8xs9jLDrS9saMfK65RUKekYwQRkPkQqlCKyxVQkGghY2mqo1dhrr9257JP/zeabbbpO45yNPK0KDfCXvz3AyW95Fz/42S9QOkfGMTrJm/UVYlIgqwOF9r+2OY1ABljtSHKMriMU2KTuJ52WOJ1nsOo4Ddxoy5my/kxeZbvvZ4Hv3FbWRxuWMVPOw8fWZcFp4xfhC4qEJCiXMNLF3GUQYJLMRTLANywYbK3Ky17xYq669EK2WrLluo1xlvK0KzTAb//wJ05fdhZ3/fjnBJGjTNBtKBBcX6D/tvgzi+GK3KCMRes6W2y5GYFwdRVGJ/6pKUwHgbEujromHXH5lBmUqU1BTpE/mWpVSNl5zUb7cVhvfq3tDpx/0DYljm5kW52pL8AqwlKFB/75MKkFqWLyPKOVAdgYA/UJXv6y3bjs4o+x7TbPXvsTXEvZIAoN8Lvf/5Ez3nE237vz+9BbcXXDjQio9Mm4QkGas+lMNcNTb4wFYiHRE1UG+7u46ZYb2WKzReTphJ+hW21u6UDB1/VSzFSq2tY6Ea2+VXMonRwGP7HOZDK0Wb/dOs0G2Oa1sFiHU90QBUhUGDM8VuW4E0/h3l/ch6h0IYXCGpdMElqjaxPsvvtLuPTC89l226dfmeFpdAqnyvbbbctnLvooy951Nrf+z3exYeDoG4x2hE5B2HK/1mxrtstuae9kRlHAlpsuZsH8AUwaImVhu0CBxz+7iW4GJVWtiP7Fqra94s30Kljnh2qG72fcbZvXB6b5arESjUSFJXr6elBWQ54hrEXrHIHC6hzShL33fhUXXXAeWz9rybqdwzrIBlNogGdvvRWXXfzfnHn2B/naDTdiA0VQKqECha5nGOWGN+lyN97hk6Xtq9MYpLQYa6jXqti8jJBg0zoO4ByXyXPcYW2SMO07vAvk/KnDEHrKgyHAmPapZFV0rbSsa41d50pAIaa7oG4yb3/N2pv9pvnMWkGOQGtDWsvJswQCidEGIQLIM0gTDjn0QC78yPvZdA1Mr3MtG1ShATbddBMu/+QFDPT1cvnlnydP6lipUHEJMm/LrYWhaAEZBphMkeU5SIkIQvKJMaQsbOUCgT9AUNQkTzVd2imYaB8DnjpxextUtCMtNd42beTKHddh23VnIe22n2l3Mx3LervYXSKDQiID9+8wjMAIgiAi1wZMwslvfD0X/Ne59K3nUtC1kQ2u0AD9fX185v/9N4vmzeNjF11CvVpH2hQllXfCvXVtWxRgDVKsmeN4/jSGer3mS1o11jjSH8dDK5uz7hQx0wxdpwjtg3btHCymp5Jx/IZichhnxnVnIzMBv7fnLG+/rhDShSaNR3yyOQEh0pfIkiSYyBDHMe88802ce9a7ZlVDPZfyjFBoay1KST509nvYcrPN+OCHz+cfDz9GWC47i65hCcxu6sryHAJFWIoYnDefUmlu6wj+3SUsFWE+yWaLF/Oed53Om046BqBZ976BZYNFOVYnd/3opyx75znc9/NfILq7nbMIODKeJpZeq7S7mA7gJWOoL+b1Rx/Mwr4Y8gSrNQKBIcSICEsIZAjyKUGH9skLa617yqYcUq7j7Lo+ZKY+wXZja6Sqp/iE1hqEdM0YSoKQEhWEVKuaiy/7PIs32oxPXHAeu7/8RXN4Jmsnz0iFBnj0scd5x3++n+u+/m1nS4cxVsVIoRHGsbgWiu1e1a28IU6ECMEK10Q7Pga6gP6dmiYXNNPkU2WmoFc7mWndp/MSzzRLTk3Lt3v4/KtQlHBdvsZ1pucpMAEq5ojXH82FH/0IixctXJ+DXm/yjFVogDRNueSzn+dDF1zEyuUjoEKkaqW18QotChvRNELWrvjHxVCba05NkzNpP53JmkKIkzNv7emZ14+0q2Gy1rQ9nUAUD79ouRaT7Xf89xKFkAKduqyqrVUZXDTI2e9exmknnUAUtWmAfmaIFdbaOhBv6JFMlVa1+NHd93DOhy7ge3f9BLRFxXFjrclY1LbxHeCr2No4ajM+w+v/2V4Teue6yGxqnJXHVWhCHk9+yK33UaRQSK3ROnOTRL3Kq/d+FR/4z7fzkt12bWy34a3ltjIhrLWPAuu/W3E9y/DICJ/41Ge4+LNXs/Lx5YhyyaF6isLkmL5NO0q2mWVuXlTrnW23VTo5Pd+gLFqyrs3S1mInRQkAYC3S5BirGZo3wNtPO4m3nHoSvT0bPiTXgTwirLU/AZ551v0M8sOf/JzzLvgEt9/5fcg0slwC6fmbXD7Xm9f+RrbZR/sZc+4srzmx6mZKNLoDTltV4aoYHS6Ge3PZohjJClzlloV6HRloXv2Kl3DOWe/kJbu9cP2Pfe7kp8Jaezlw0oYeyWykWq1x9XVf4cKLP8ef/vBHCAJEGCFU4DLNeY4IQnev2mTenk6TA2Z6gNZd2r6AZsj+SePQpxDSY4ZI12HumylMtQ7GsmS7Z/Pu047j2KMOp1KpzMm451CuENbaU4DLNvRI1kYe/MdDfPqyy/nCNV/lqUefBBUiooggDEEGGKMxjYjImmR2yjxXvvRMgDBtZSY0pDaihMRolyhRUmKzDISrMmR8gvlbbMrxxxzOm994HEu22Gxth7+h5U3CWvsC4C5g7hu+5kju/eV9XPq5z3PzrXew/J+PQ1xGRpFrSO14dvz3VWghPIeJ0dg0Q8URWidQqzEwb4iDD9iH0045iV12Xjew8Q0sdeDlwlobA3cCL93AA1pn+cnP7uGSz32BW759JyPLV0IUQxh0qNT/vgqNEJD5OHueQ1qnf9F89tnzlZx+8gm8+F/LTp5JfgS8RgBYa/8T+K8NO571Jz+5+x6++OUb+Pq3v8uTjz4GgCiv6QX0b6zQFqgmIGFw3gCHHXIAxx95CC/ade3JeZ6BcpYQ4iOFQm8M3AfM37BjWr/y69/9keu+9k2+9s1b+fNv/wAIiBy/ybokV9pFEtaXdKzQgtUnbKx1zl/qWqS23m4phx20H0cctA87br90/Q34mSFPATsLIR5pXBFr7UeB/9hwY5o7eWr5Sm761m18/eZv86Of3MPoqmHIcujuQQYKhMQag/AYzcZoHJyXQBXwXl7hpYVcSHSnDaozIPPbdoCIgsas21qeKotESKNSCxASYx1guhBg8wwZKMfpktQBS99AHy976W68bv99OGDfvZg/NNDZmP/15HwhxHugxf231i4E7ga22ECDmnOx1nLvL3/Ft26/k9vu+AG/+s3vqI+MQrkL4enXTO5BH/3s11RoJwIHHq7b4LxNF1dv0q4PskAbak2Tuxi68ts015UIV+5qrYO8lgIhA7SQ2DSFwKMvjY3RNW+AnZ6zlFfv/hL2e+1reN4uz31GVMHNoTwI7CaEeAKmxLOstccBX9gAg3raZXRsjF/9+rd8+7Y7+fHPfsF9v/sz46NjkKQuRhsGjgtFFmnilmzajIVMM0hHiDBF7UkAmMmb+DeHEBJhHYg6aQLkUClTqVR43nO24+Uv25U9X/lydtpxe3p7ezsf37+2HCeEuLr4MO3RtdZeAaxfWPVnuGRZxm9+/0fu+eWv+f4P7+aXv/oNjz76OOPLV7pERBQ7li9V4NlpoNP4doerCZxCmwhRALULi7SOw48shTQFIehZMI+NN5rPTs/Zhpe/eDd22/UF7LDdtoRhuHYX4F9XPiuEeFPrF+0Uugv4NvDyp2tUzzR57ImnePChh/nl/b/hF7/6LX/524P88c9/Z/mTKwDryIx0YZpIN6ML4VkHZMNhEwhXrdYKgmNb/9J03qx1vBi5N2WU3x+WBQsH2W7brdlm62ex047bs9NztmfzTTdm8eJnZgnn0yR3AfsIISZav2w7d1hrFwHfBP6t4jprK2masGp4lN//6a/89YF/8MCDD/GPf/yTvz/4D4ZHRqlWa9TqdWrVGkmakKUZZJmL+RpfVwxO2ZVyM30cocKQKI6olMuUyyW6ShUGevpYsuWmbLHZJizZYlO2WrI5S7d5FgP9fUTRM64ockPJPcABQojHp/4w48vQWrsYuB542RwO7F9eVq1axYpVw4yMjDI8PML4xATVWo16rU49SUizzFG74Tq9wzAkjiO6KhWnxJUu+vt76e/rZXBggMGBf9tIxPqSHwKHt1NmWIN1582Pi/hfZlP/nzxj5UrgrVPNjFZZbTBVCDEhhDgJOB544P+3b4c2CARBFIa/aQENFZCQIDB0QBEEQQuUcV1QBB1QAAkaARp/mEXsYeHuQBzJ/n4nIzYvmTfzftxcodCWCzYRsX33mekQPGh86p2s1qPv+isUWnGXVbl6+cyf6Oy4p5QmWGOFhQHGtwp/TS0PfQfsI+La5XHvFVJzpTfDHEtMMZbVe7ApysKgeMgqfMMZR/mm6BQRdZ+CT0HL9Kq33gUGAAAAAElFTkSuQmCC
// @match         *://*/*
// @run-at        document-start
// @grant         GM_setValue
// @grant         GM_getValue
// @grant         GM_registerMenuCommand
// @grant         GM_notification
// @noframes
// @compatible    chrome
// @compatible    edge
// @compatible    firefox
// ==/UserScript==

(() => {
  "use strict";
  function verify_time1(newVal, oldVal, base) {
    const arr = newVal.trim().split(/:|:/);
    if (2 === arr.length && 2 === arr[0].length && 2 === arr[1].length) {
      const a = +arr[0],
        b = +arr[1];
      if (a >= 0 && a <= 24 && b >= 0 && b <= 59) return newVal;
    }
    return oldVal;
  }
  function getNumVerifyFn(min, max, rangeLimit = [1, 1]) {
    return (newVal, oldVal, base) => {
      if (!(newVal = +newVal) && 0 !== newVal) return oldVal;
      if (!1 !== min && !1 !== max) {
        if (rangeLimit[0] && newVal >= min) {
          if (rangeLimit[1] && newVal <= max) return newVal;
          if (!rangeLimit[1] && newVal < max) return newVal;
        }
        if (!rangeLimit[0] && newVal > min) {
          if (rangeLimit[1] && newVal <= max) return newVal;
          if (!rangeLimit[1] && newVal < max) return newVal;
        }
      } else {
        if (!1 === min) {
          if (rangeLimit[1] && newVal <= max) return newVal;
          if (!rangeLimit[1] && newVal < max) return newVal;
        }
        if (!1 === max) {
          if (rangeLimit[0] && newVal >= min) return newVal;
          if (!rangeLimit[0] && newVal > min) return newVal;
        }
      }
      return oldVal;
    };
  }
  const keyBase = "ll_pageDarkMode_",
    info = {
      keyBase,
      settingsArea: null,
      isDarkMode: !1,
      isCanRun: !0,
      timer: null,
      interval: 5e3,
      otherSettings: {
        oldDarkMode: {
          value: !1,
          base: !1,
          key: keyBase + "oldDarkMode",
          valType: "boolean",
        },
      },
      settings: {
        isAutoStartStop: {
          value: !0,
          base: !0,
          key: keyBase + "isAutoStartStop",
          desc: "是否开启定时开关功能",
          type: "基础设置",
          valType: "boolean",
          compType: "radio",
          valueText: { true: "开启", false: "关闭" },
        },
        startTime: {
          value: "0",
          base: "0",
          key: keyBase + "startTime",
          valType: "string",
          type: "基础设置",
          desc: "深色模式的自动开启时间, 0表示关闭, 按照24小时制书写, 格式为 xx:xx, 如: 20:00",
          compType: "textarea",
          compH: "30px",
          verify: (newVal, oldVal, base) =>
            0 == +newVal ? newVal : verify_time1(newVal, oldVal),
        },
        stopTime: {
          value: "0",
          base: "0",
          key: keyBase + "stopTime",
          valType: "string",
          type: "基础设置",
          desc: "深色模式的自动关闭时间, 0表示关闭, 按照24小时制书写",
          compType: "textarea",
          compH: "30px",
          verify: (newVal, oldVal, base) =>
            0 == +newVal ? newVal : verify_time1(newVal, oldVal),
        },
        startStopWay: {
          value: !0,
          base: !0,
          key: keyBase + "startStopWay",
          desc: "定时开关深色模式的方式",
          type: "基础设置",
          valType: "boolean",
          compType: "radio",
          valueText: {
            true: "仅在设定时刻进行开关",
            false: "根据设定时间段任意时刻都可开关",
          },
        },
        isShowTips: {
          value: !0,
          base: !0,
          key: keyBase + "isShowTips",
          desc: "切换深色模式时是否进行的弹窗提示",
          type: "基础设置",
          valType: "boolean",
          compType: "radio",
          valueText: { true: "弹窗提示", false: "关闭弹窗" },
        },
        onlyColor: {
          value: !1,
          base: !1,
          key: keyBase + "onlyColor",
          desc: "深色模式下是否仅调整颜色而不使页面变成深色 (此时'颜色反转'设置将失效)",
          type: "颜色设置",
          valType: "boolean",
          compType: "radio",
          valueText: { true: "自定义颜色", false: "深色+自定义颜色" },
        },
        invert: {
          value: 1,
          base: 1,
          key: keyBase + "invert",
          valType: "number",
          type: "颜色设置",
          title: "颜色反转",
          desc: "颜色反转的程度, 深色效果主要与该设置相关. 默认1, 浏览器默认0, 取值范围0-1",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, 1),
        },
        brightness: {
          value: 0.9,
          base: 0.9,
          key: keyBase + "brightness",
          valType: "number",
          type: "颜色设置",
          title: "亮度",
          desc: "亮度的大小. 默认0.9, 浏览器默认1, 取值范围0-∞",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, !1),
        },
        contrast: {
          value: 1,
          base: 1,
          key: keyBase + "contrast",
          valType: "number",
          type: "颜色设置",
          title: "对比度",
          desc: "对比度的强弱. 默认1, 取值范围0-∞",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, !1),
        },
        grayscale: {
          value: 0,
          base: 0,
          key: keyBase + "grayscale",
          valType: "number",
          type: "颜色设置",
          title: "灰度",
          desc: "灰度的程度. 默认0, 取值范围0-1",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, 1),
        },
        hueRotate: {
          value: 0,
          base: 0,
          key: keyBase + "hueRotate",
          valType: "number",
          type: "颜色设置",
          title: "色调",
          desc: "色调的旋转变化. 默认0, 取值范围0-360",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, 360),
        },
        saturate: {
          value: 1,
          base: 1,
          key: keyBase + "saturate",
          valType: "number",
          type: "颜色设置",
          title: "饱和度",
          desc: "饱和度的高低. 默认1, 取值范围0-∞",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, !1),
        },
        sepia: {
          value: 0.2,
          base: 0.2,
          key: keyBase + "sepia",
          valType: "number",
          type: "颜色设置",
          title: "深褐色",
          desc: "深褐色的程度. 默认0.2, 浏览器默认0, 取值范围0-1",
          compType: "textarea",
          compH: "30px",
          verify: getNumVerifyFn(0, 1),
        },
        autoDarkMode: {
          value: !0,
          base: !0,
          key: keyBase + "autoDarkMode",
          desc: "是否自动恢复页面的深色模式 (刷新页面后将自动恢复之前的显示模式)",
          type: "其他设置",
          valType: "boolean",
          compType: "radio",
          valueText: { true: "自动恢复", false: "手动开关" },
          groupTitle3: "自动恢复",
        },
        autoDarkModeWay: {
          value: !0,
          base: !0,
          key: keyBase + "autoDarkModeWay",
          desc: "自动恢复页面显示模式的方式\n左选项: 可确保同一时间段内打开的每个页面都是同一个显示模式\n右选项: 可确保同一个页面打开后是上一次该页面的显示模式",
          type: "其他设置",
          valType: "boolean",
          compType: "radio",
          valueText: {
            true: "恢复上一次使用的显示模式",
            false: "恢复当前网页上一次的显示模式",
          },
        },
        website: {
          value: "*",
          base: "*",
          key: keyBase + "website",
          valType: "string",
          type: "其他设置",
          title: "应用的网站",
          desc: "以下网站可启用深色模式, 多个网站请换行书写, *表示所有网站都可启用\n【示例】*.bilibili.com/* 可匹配B站\n",
          compType: "textarea",
          compH: "90px",
          verify: function verify_notNull(newVal, oldVal) {
            return newVal || oldVal;
          },
        },
        notInvertNodes: {
          value:
            "img, video, .h .h-inner, .h-inner .avatar-container, bili-user-profile",
          base: "img, video, .h .h-inner, .h-inner .avatar-container, bili-user-profile",
          key: keyBase + "notInvertNodes",
          valType: "string",
          type: "其他设置",
          title: "不反转的元素",
          desc: "不进行颜色反转的元素, 每项用 , 分隔, 可书写css选择器\n【可选】\nh1, h2, h3, h4, h5, h6, p, span, ul, li, i, svg\na, img, form, input, textarea, button, select, option, label, audio, video, ....",
          compType: "textarea",
          compH: "90px",
        },
      },
    };
  function setValue_setValue({
    value,
    base,
    key,
    verification = null,
    getValue = null,
    setValue = null,
    getVal = null,
    setVal = null,
  } = {}) {
    getValue && (getVal = getValue), setValue && (setVal = setValue);
    let newVal = value,
      oldVal = getVal ? getVal(key) : localStorage.getItem(key);
    return (
      void 0 !== base &&
        null == oldVal &&
        ((oldVal = base),
        "string" != typeof base && (base = JSON.stringify(base)),
        setVal ? setVal(key, base) : localStorage.setItem(key, base)),
      null !== newVal &&
        ("function" != typeof verification ||
          ((newVal = verification(newVal, oldVal, base)), null !== newVal)) &&
        newVal !== oldVal &&
        ("string" != typeof newVal && (newVal = JSON.stringify(newVal)),
        setVal ? setVal(key, newVal) : localStorage.setItem(key, newVal),
        !0)
    );
  }
  function getValue({
    base,
    key,
    valType = "string",
    isReSet = !0,
    getValue = null,
    setValue = null,
    getVal = null,
    setVal = null,
  } = {}) {
    getValue && (getVal = getValue), setValue && (setVal = setValue);
    let val = getVal ? getVal(key) : localStorage.getItem(key);
    return (
      void 0 !== base &&
        null == val &&
        ((val = base),
        isReSet &&
          ("string" != typeof base && (base = JSON.stringify(base)),
          setVal ? setVal(key, base) : localStorage.setItem(key, base))),
      (valType = valType.toLowerCase()),
      "string" == typeof val
        ? "string" === valType
          ? val
          : "boolean" === valType || "number" === valType
          ? JSON.parse(val)
          : "object" === valType
          ? val
            ? JSON.parse(val)
            : {}
          : "array" === valType
          ? val
            ? JSON.parse(val)
            : []
          : val
        : val
    );
  }
  function getData(settings, getVal = null, setVal = null) {
    (getVal = getVal || localStorage.getItem),
      (setVal = setVal || localStorage.setItem);
    for (const valName in settings) {
      const setting = settings[valName];
      setting.value = getValue({
        base: setting.base,
        key: setting.key,
        valType: setting.valType,
        getVal,
        setVal,
      });
    }
    return settings;
  }
  function setDarkMode(isDark = !0, isTips = !0, modeTxt = "") {
    if (info.isDarkMode === isDark)
      return void console.log("已启用深色模式, 不再开启深色模式");
    const settings = info.settings;
    info.isDarkMode = isDark;
    const id = info.keyBase + "css";
    let isAddCss = !1,
      dom = document.head.querySelector("#" + id);
    dom ||
      ((dom = document.createElement("style")), (dom.id = id), (isAddCss = !0)),
      (dom.innerHTML = isDark
        ? (function getCssHtml() {
            const settings = info.settings,
              invertText = settings.onlyColor.value
                ? ""
                : `invert(${settings.invert.value})`,
              otherCss = settings.onlyColor.value
                ? ""
                : `${settings.notInvertNodes.value.replaceAll(
                    ",",
                    ","
                  )}{\n  filter:invert(1);\n}`;
            return `html {\n  background-color:#fff;\n  filter:${invertText} brightness(${settings.brightness.value}) contrast(${settings.contrast.value}) grayscale(${settings.grayscale.value}) hue-rotate(${settings.hueRotate.value}deg) saturate(${settings.saturate.value}) sepia(${settings.sepia.value});\n}\n${otherCss}`;
          })()
        : ""),
      isAddCss && document.head.appendChild(dom),
      !modeTxt &&
        settings.onlyColor.value &&
        (modeTxt = `'${settings.onlyColor.valueText.true}'模式`),
      (modeTxt = modeTxt || "深色模式"),
      console.log(`${isDark ? "开启" : "关闭"}${modeTxt}`),
      isTips &&
        settings.isShowTips.value &&
        GM_notification({
          title: "深色模式",
          text: `${isDark ? "开启" : "关闭"}${modeTxt}`,
          timeout: 3e3,
        }),
      setValue_setValue({
        value: isDark,
        base: info.otherSettings.oldDarkMode.base,
        key: info.otherSettings.oldDarkMode.key,
        getValue: GM_getValue,
        setValue: GM_setValue,
      }),
      setValue_setValue({
        value: isDark,
        base: info.otherSettings.oldDarkMode.base,
        key: info.otherSettings.oldDarkMode.key,
      });
  }
  function setStartStopTimer() {
    const settings = info.settings;
    if (!settings.isAutoStartStop.value) return;
    const startTime = settings.startTime.value,
      stopTime = settings.stopTime.value;
    if (0 == +startTime && 0 == +stopTime) return;
    const autoStartStop = () => {
      const f = (function isNeedDarkMode() {
        const settings = info.settings,
          startTime = settings.startTime.value,
          stopTime = settings.stopTime.value;
        if (0 == +startTime && 0 == +stopTime) return -1;
        const t = new Date(),
          curT = 60 * t.getHours() + t.getMinutes();
        let startT, stopT;
        if (0 != +startTime) {
          const tArr1 = startTime.trim().replace(":", ":").split(":");
          startT = 60 * +tArr1[0] + +tArr1[1];
        }
        if (0 != +stopTime) {
          const tArr2 = stopTime.trim().replace(":", ":").split(":");
          stopT = 60 * +tArr2[0] + +tArr2[1];
        }
        if (settings.startStopWay.value)
          return curT === startT || (curT !== stopT && -1);
        if (0 == +startTime) return !(curT >= stopT) && -1;
        if (0 == +stopTime) return curT >= startT || -1;
        const f = (function isTimeInRange(t, startTime, stopTime, rangeLimit) {
          const curH = t.getHours(),
            curMin = t.getMinutes(),
            startText = startTime.trim().replace(":", ":"),
            stopText = stopTime.trim().replace(":", ":"),
            tArr1 = startText.split(":"),
            tArr2 = stopText.split(":"),
            h1 = +tArr1[0],
            h2 = +tArr2[0],
            startT = 60 * h1 + +tArr1[1],
            stopT = 60 * h2 + +tArr2[1],
            curT = 60 * curH + curMin;
          if (startT < stopT)
            if (rangeLimit[0]) {
              if (rangeLimit[1]) {
                if (curT >= startT && curT <= stopT) return !0;
              } else if (curT >= startT && curT < stopT) return !0;
            } else if (rangeLimit[1]) {
              if (curT > startT && curT <= stopT) return !0;
            } else if (curT > startT && curT < stopT) return !0;
          if (startT > stopT)
            if (rangeLimit[0]) {
              if (rangeLimit[1]) {
                if (
                  (curT >= startT && curT < 1440) ||
                  (curT <= stopT && curT >= 0)
                )
                  return !0;
              } else if (
                (curT >= startT && curT < 1440) ||
                (curT < stopT && curT >= 0)
              )
                return !0;
            } else if (rangeLimit[1]) {
              if (
                (curT > startT && curT < 1440) ||
                (curT <= stopT && curT >= 0)
              )
                return !0;
            } else if (
              (curT > startT && curT < 1440) ||
              (curT < stopT && curT >= 0)
            )
              return !0;
          return !1;
        })(t, startTime, stopTime, [1, 0]);
        return f;
      })();
      -1 !== f && setDarkMode(f);
    };
    autoStartStop(),
      info.timer && clearInterval(info.timer),
      (info.timer = setInterval(autoStartStop, info.interval));
  }
  function verifyWebsite() {
    const url = location.href,
      f = info.settings.website.value
        .trim()
        .split("\n")
        .some((item) =>
          (function matchUrlWithWildcard(url, pattern) {
            return new RegExp("^" + pattern.replace(/\*/g, ".*") + "$").test(
              url
            );
          })(url, item)
        );
    return (
      f &&
        !info.isCanRun &&
        GM_registerMenuCommand("切换深色模式", () => {
          setDarkMode(!info.isDarkMode);
        }),
      (info.isCanRun = f),
      f
    );
  }
  function updateShow() {
    getData(info.settings, GM_getValue, GM_setValue);
    if (!verifyWebsite())
      return setDarkMode(!1), void (info.timer && clearInterval(info.timer));
    info.isDarkMode && (setDarkMode(!1, !1), setDarkMode(!0, !1)),
      setStartStopTimer();
  }
  const baseCfg = {
      state: "",
      isEditing: !1,
      hasSelectedPage: !1,
      param: {
        id: "ll_edit_wrap",
        box: document.body,
        classBase: "ll_edit_",
        w: "500px",
        h: "",
        contentH: "450px",
        bg: "rgba(0, 0, 0, 0.15)",
        color: "#333",
        fontSize: "15px",
        fontFamily:
          "PingFang SC, HarmonyOS_Regular, Helvetica Neue, Microsoft YaHei, sans-serif",
        zIndex: 11e3,
        resetTt: "重置所有设置为默认值",
        isShowMenu: !1,
        isScrollStyle: !0,
        isResetBtn: !0,
        isOnlyResetCurPage: !1,
        showPage: void 0,
        isIntervalRun: !1,
        interval: 1e3,
        page: [],
        callback: {
          resetBefore: null,
          reset: null,
          confirmBefore: null,
          finished: null,
          interval: null,
          cancelBefore: null,
          cancelled: null,
        },
      },
    },
    cfg = {
      version: "v1.2.0",
      isEditing: baseCfg.isEditing,
      hasSelectedPage: baseCfg.hasSelectedPage,
      timer: null,
      interval: 1500,
      param: {},
      tempParam: {},
      allData: {},
      oldData: {},
      lastData: {},
      baseData: {},
      controls: {},
      doms: { page: [] },
      editText: {},
    };
  const css = function getCss() {
    const param = cfg.param,
      cBase = (param.page, param.classBase),
      baseStart = `#${param.id} .${cBase}`,
      fSize = param.fontSize ? param.fontSize : "14px",
      css = `#${
        param.id
      } {\n  position: fixed;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  z-index: ${
        param.zIndex || 11e3
      };\n  background: ${
        param.bg || "rgba(0, 0, 0, 0.12)"
      };\n  display: none;\n}\n${baseStart}box {\n  letter-spacing: 1px;\n  position: relative;\n  width: ${
        param.w || "450px"
      };\n  ${
        param.h ? "max-height:" + param.h : ""
      };\n  margin: auto;\n  color: ${
        param.color || "#333"
      };\n  background: #fff;\n  font-size: ${fSize};\n  line-height: normal;\n  font-family: ${
        param.fontFamily ||
        "PingFang SC, HarmonyOS_Regular, Helvetica Neue, Microsoft YaHei, sans-serif"
      };\n  border: 3px solid #dfedfe;\n  border-radius: 10px;\n  box-sizing: border-box;\n  padding: 14px 8px 10px 15px;\n  overflow: hidden;\n  overflow-y: auto;\n}\n${baseStart}menu {\n  font-weight: bold;\n  font-size: ${
        parseInt(fSize) + 1
      }px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0 8px;\n}\n${baseStart}menu-item {\n  margin-bottom: 8px;\n  border: 1px solid #dfedfe;\n  color: #9ecaff;\n  background: #eef6ff;\n  border-radius: 6px;\n  padding: 6px 10px;\n  cursor: pointer;\n}\n${baseStart}menu-item:hover {\n  color: #65aaff;\n  background: #dfedfe;\n  border: 1px solid #dfedfe;\n}\n${baseStart}menu-item.active {\n  color: #65aaff;\n  background: #dfedfe;\n  border: 1px solid #dfedfe;\n}\n${baseStart}page-box {\n  max-height: ${
        param.contentH || ""
      };\n  padding-right: 7px;\n  margin-bottom: 8px;\n  overflow: hidden;\n  overflow-y: auto;\n}\n${baseStart}page {\n  display: none;\n}\n${baseStart}page.curPage {\n  display: block;\n}\n${baseStart}comp {\n  margin-bottom: 8px;\n}\n${baseStart}comp:last-child {\n  margin-bottom: 2px;\n}\n${baseStart}tt {\n  font-weight: bold;\n  font-size: ${
        parseInt(fSize) + 6
      }px;\n  margin-top: 4px;\n}\n${baseStart}tt2 {\n  font-weight: bold;\n  font-size: ${
        parseInt(fSize) + 4
      }px;\n  margin-top: 3px;\n  margin-bottom: 7px;\n}\n${baseStart}tt3 {\n  font-weight: bold;\n  font-size: ${
        parseInt(fSize) + 2
      }px;\n  margin-top: 2px;\n  margin-bottom: 6px;\n}\n${baseStart}desc {\n  line-height: 1.5;\n}\n${baseStart}comp-tt {\n  font-weight: bold;\n  font-size: ${
        parseInt(fSize) + 1
      }px;\n  line-height: 1.5;\n}\n${baseStart}comp-desc {\n  line-height: 1.5;\n}\n${baseStart}rd-arr {\n  line-height: 22px;\n}\n${baseStart}rd-arr label {\n  margin-right: 6px;\n  cursor: pointer;\n}\n${baseStart}rd-arr input {\n  vertical-align: -2px;\n  cursor: pointer;\n}\n${baseStart}rd-arr span {\n  color: #666;\n  margin-left: 2px;\n}\n#${
        param.id
      } textarea {\n  width: 100%;\n  max-width: 100%;\n  max-height: 300px;\n  border-radius: 6px;\n  line-height: normal;\n  padding: 5px 7px;\n  outline-color: #cee4ff;\n  border: 1px solid #aaa;\n  box-sizing: border-box;\n  font-size: ${
        parseInt(fSize) - 2
      }px;\n  font-family: PingFang SC, HarmonyOS_Regular, Helvetica Neue, Microsoft YaHei, sans-serif;\n  /* 保留空格 */\n  white-space: pre-wrap;\n  /* 允许词内换行 */\n  word-break: break-all;\n  letter-spacing: 1px;\n  overflow: hidden;\n  overflow-y: auto;\n}\n#${
        param.id
      } textarea::placeholder {\n  color: #bbb;\n}\n${baseStart}ta-desc {\n  margin-bottom: 3px;\n}\n${baseStart}btn-box {\n  display: flex;\n  justify-content: flex-end;\n}\n${baseStart}btn-box button {\n  font-size: 16px;\n  line-height: normal;\n  color: #65aaff;\n  background: #dfedfe;\n  outline: none;\n  border: none;\n  border-radius: 6px;\n  padding: 8px 16px;\n  box-sizing: border-box;\n  cursor: pointer;\n}\n${baseStart}btn-box .${cBase}reset-btn {\n  position: absolute;\n  left: 15px;\n  bottom: 10px;\n  color: #888;\n  background: #f4f4f4;\n  margin-right: 15px;\n}\n${baseStart}btn-box .${cBase}reset-btn:hover {\n  color: #666;\n  background: #eee;\n}\n${baseStart}btn-box .${cBase}cancel-btn {\n  color: #888;\n  background: #f4f4f4;\n  margin-right: 15px;\n}\n${baseStart}btn-box .${cBase}cancel-btn:hover {\n  color: #666;\n  background: #eee;\n}\n${baseStart}btn-box .${cBase}confirm-btn {\n  margin-right: 7px;\n}\n${baseStart}btn-box .${cBase}confirm-btn:hover {\n  background: #cee4ff;\n}\n`;
    return param.isScrollStyle
      ? css +
          "\n.ll-scroll-style-1::-webkit-scrollbar,\n.ll-scroll-style-1 ::-webkit-scrollbar {\n  width: 8px;\n}\n.ll-scroll-style-1-size-2::-webkit-scrollbar,\n.ll-scroll-style-1 .ll-scroll-style-1-size-2::-webkit-scrollbar {\n  width: 10px;\n}\n.ll-scroll-style-1-size-3::-webkit-scrollbar,\n.ll-scroll-style-1 .ll-scroll-style-1-size-3::-webkit-scrollbar {\n  width: 12px;\n}\n.ll-scroll-style-1::-webkit-scrollbar-thumb,\n.ll-scroll-style-1 ::-webkit-scrollbar-thumb {\n  border-radius: 10px;\n  -webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.05);\n  opacity: 0.2;\n  background: #daedff;\n}\n.ll-scroll-style-1::-webkit-scrollbar-track,\n.ll-scroll-style-1 ::-webkit-scrollbar-track {\n  -webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.08);\n  border-radius: 0;\n  background: #fff;\n  border-radius: 5px;\n}"
      : css;
  };
  const editArea_html = function getHTML() {
      function getCompHTML({ info, active = "", id }) {
        let type = info.type;
        if (
          ((type = {
            menuTitle: "mtt",
            title: "tt",
            title2: "tt2",
            title3: "tt3",
            desc: "ds",
            radio: "rd",
            checkbox: "cb",
            textarea: "ta",
            mtt: "mtt",
            tt: "tt",
            tt2: "tt2",
            tt3: "tt3",
            ds: "ds",
            rd: "rd",
            cb: "cb",
            ta: "ta",
          }[type]),
          (id = 0 === id ? "0" : id || ""),
          0 === info.value && (info.value = "0"),
          !type)
        )
          return console.log("不存在的组件类型"), !1;
        let title = "",
          desc = "",
          ctrlTt = "";
        switch (
          (["tt", "tt2", "tt3", "ds", "mtt"].includes(type) ||
            ((title = info.title
              ? `<div class="${cBase}comp-tt ${cBase}${type}-tt" title="${
                  info.tt || ""
                }">${info.title}</div>`
              : ""),
            (desc = info.desc
              ? `<div class="${cBase}comp-desc ${cBase}${type}-desc">${info.desc}</div>`
              : "")),
          type)
        ) {
          case "mtt":
            return (
              (info.value = info.value || ""),
              info.value
                ? `<div class="${cBase}menu-item ${active || ""}" title="${
                    info.tt || ""
                  }">${info.value}</div>`
                : ""
            );
          case "tt":
          case "tt2":
          case "tt3":
            return (
              (info.value = info.value || ""),
              info.value
                ? `<div class="${cBase}${type} ${cBase}comp" title="${
                    info.tt || ""
                  }">${info.value}</div>`
                : ""
            );
          case "ds":
            return (
              (info.value = info.value || ""),
              info.value
                ? `<div class="${cBase}desc ${cBase}comp" title="${
                    info.descTt || ""
                  }">${info.value}</div>`
                : ""
            );
          case "rd":
            const name = info.name || info.id + new Date().getTime();
            (ctrlTt = info.ctrlTt || ""),
              ctrlTt && (ctrlTt = `title="${ctrlTt}"`);
            let radio = `<div class="${cBase}rd ${cBase}rd-arr" ${ctrlTt}>`;
            if (void 0 === info.value && info.radioList[0]) {
              const obj = info.radioList[0];
              info.value = void 0 === obj.value ? obj.text : obj.value;
            }
            return (
              info.radioList.forEach((item, i) => {
                void 0 === item.value && (info.radioList[i].value = item.text),
                  void 0 === item.text && (info.radioList[i].text = item.value);
                const value = item.value;
                let tt = item.tt || "";
                tt && (tt = `title="${tt}"`);
                let selected = "";
                info.value + "" == item.value + "" && (selected = "checked"),
                  (radio += `<label ${tt}><input ${selected} type="radio" name="${name}" data-val="${value}" data-cpid="${id}"><span>${item.text}</span></label>`);
              }),
              (radio += "</div>"),
              `<div class="${cBase}comp ${cBase}ctrl ${cBase}rd-box" data-type="${type}" data-cpid="${id}">${title}${desc}${radio}</div>`
            );
          case "cb":
            const name2 = info.name || new Date().getTime();
            if (
              ((ctrlTt = info.ctrlTt || ""),
              ctrlTt && (ctrlTt = `title="${ctrlTt}"`),
              void 0 === info.value && info.radioList[0])
            ) {
              const obj = info.radioList[0];
              info.value = void 0 === obj.value ? obj.text : obj.value;
            }
            let checkbox = `<div class="${cBase}cb ${cBase}rd-arr" ${ctrlTt}>`;
            return (
              info.radioList.forEach((item, i) => {
                void 0 === item.value && (info.radioList[i].value = item.text),
                  void 0 === item.text && (info.radioList[i].text = item.value);
                const value = item.value;
                let tt = item.tt || "";
                tt && (tt = `title="${tt}"`);
                let selected = "";
                info.value.includes(value) && (selected = "checked"),
                  (checkbox += `<label ${tt}><input ${selected} type="checkbox" name="${name2}" data-val="${value}" data-cpid="${id}"><span>${item.text}</span></label>`);
              }),
              (checkbox += "</div>"),
              `<div class="${cBase}comp ${cBase}ctrl ${cBase}cb-box" data-type="${type}" data-cpid="${id}">${title}${desc}${checkbox}</div>`
            );
          case "ta":
            const style = `style="${
                info.width ? "width:" + info.width + ";" : ""
              }${info.height ? "height:" + info.height + ";" : ""}${
                info.fontSize ? "font-size:" + info.fontSize + ";" : ""
              }${
                info.fontFamily ? "font-family:" + info.fontFamily + ";" : ""
              }"`,
              textarea = `<textarea class="${cBase}ta" ${style} data-cpid="${id}" placeholder="${
                info.ph || ""
              }" title="${info.ctrlTt || "拖动右下角可调节宽高"}"></textarea>`;
            return `<div class="${cBase}comp ${cBase}ctrl ${cBase}ta-box" data-type="${type}"  data-cpid="${id}">${title}${desc}${textarea}</div>`;
        }
      }
      const param = cfg.param,
        page = param.page,
        cBase = param.classBase,
        isMenu = 1 !== page.length;
      let menu = `<div class="${cBase}menu">`,
        pageHTML = `<div class="${cBase}page-box ll-scroll-style-1 ll-scroll-style-1-size-2">`;
      page.forEach((curPage, index) => {
        let pgid = curPage.id || index;
        (pgid += ""), (cfg.allData[pgid] = {}), (cfg.baseData[pgid] = {});
        let pageFlag = "";
        if (
          (cfg.hasSelectedPage ||
            ((void 0 === param.showPage || pgid === param.showPage + "") &&
              ((pageFlag = "curPage"), (cfg.hasSelectedPage = !0))),
          (pageHTML += `<div class="${cBase}page ${pageFlag}" data-pgid="${pgid}">`),
          curPage.components)
        ) {
          let compIndex = 0;
          if (isMenu || param.isShowMenu) {
            let curMenu = curPage.components.find(
              (item) => "menuTitle" === item.type
            );
            curMenu || (curMenu = { type: "menuTitle", value: pgid }),
              (menu += getCompHTML({
                info: curMenu,
                active: pageFlag ? "active" : "",
              }));
          }
          curPage.components.forEach((item) => {
            const cpid = item.id || compIndex;
            "menuTitle" !== item.type &&
              (pageHTML += getCompHTML({ info: item, id: cpid })),
              ["title", "title2", "title3", "desc", "menuTitle"].includes(
                item.type
              ) ||
                ((item.base = void 0 === item.base ? item.value : item.base),
                (cfg.allData[pgid][cpid] = item.value),
                (cfg.baseData[pgid][cpid] = item.base),
                compIndex++);
          });
        }
        pageHTML += "</div>";
      }),
        (pageHTML += "</div>"),
        isMenu || param.isShowMenu ? (menu += "</div>") : (menu = "");
      const resetBtn = param.isResetBtn
          ? `<button class="${cBase}reset-btn" title="${
              param.resetTt || "重置所有设置为默认值"
            }">重置</button>`
          : "",
        btnBox = `<div class="${cBase}btn-box">\n${resetBtn}\n<button class="${cBase}cancel-btn">取 消</button>\n<button class="${cBase}confirm-btn">确 认</button>\n</div>`;
      return `<div class="${cBase}box ll-scroll-style-1 ll-scroll-style-1-size-3" data-version="${cfg.version}">\n${menu}\n${pageHTML}\n${btnBox}\n</div>`;
    },
    baseParam = baseCfg.param,
    controls = cfg.controls,
    doms = cfg.doms;
  function createEditEle({
    id = baseParam.id,
    box = baseParam.box,
    classBase = baseParam.classBase,
    w = baseParam.w,
    h = baseParam.h,
    contentH = baseParam.contentH,
    bg = baseParam.bg,
    color = baseParam.color,
    fontSize = baseParam.fontSize,
    fontFamily = baseParam.fontFamily,
    zIndex = baseParam.zIndex,
    resetTt = baseParam.resetTt,
    isShowMenu = baseParam.isShowMenu,
    isScrollStyle = baseParam.isScrollStyle,
    isResetBtn = baseParam.isResetBtn,
    isOnlyResetCurPage = baseParam.isOnlyResetCurPage,
    showPage = baseParam.showPage,
    isIntervalRun = baseParam.isIntervalRun,
    interval = baseParam.interval,
    page = [],
    callback = baseParam.callback,
  } = {}) {
    (cfg.state = baseCfg.state),
      (cfg.isEditing = baseCfg.isEditing),
      (cfg.hasSelectedPage = baseCfg.hasSelectedPage),
      (cfg.param = { ...baseParam });
    const param = cfg.param;
    (box = box || document.body),
      (param.id = id),
      (param.box = box),
      (param.classBase = classBase),
      (param.w = w),
      (param.h = h),
      (param.contentH = contentH),
      (param.bg = bg),
      (param.color = color),
      (param.fontSize = fontSize),
      (param.fontFamily = fontFamily),
      (param.zIndex = zIndex),
      (param.resetTt = resetTt),
      (param.isShowMenu = isShowMenu),
      (param.isScrollStyle = isScrollStyle),
      (param.isResetBtn = isResetBtn),
      (param.isOnlyResetCurPage = isOnlyResetCurPage),
      (param.showPage = showPage),
      (param.isIntervalRun = isIntervalRun),
      (param.interval = interval),
      (param.page = page),
      (param.callback = callback),
      (cfg.interval = interval),
      (cfg.callback = callback);
    const html = editArea_html();
    return (
      box.querySelector(`#${param.classBase}${param.id}-css`) ||
        (function addCss(cssText, box = document.body, id = "") {
          const style = document.createElement("style");
          return (
            id && (style.id = id),
            box.appendChild(style),
            (style.innerHTML = cssText),
            style
          );
        })(css(), box, param.classBase + param.id + "-css"),
      (doms.wrap = (function createEle({
        className = "",
        id = "",
        title = "",
        css,
        box = document.body,
        type = "div",
      } = {}) {
        const ele = document.createElement(type);
        return (
          id && (ele.id = id),
          className && (ele.className = className),
          title && (ele.title = title),
          css && (ele.style.cssText = css),
          box.appendChild(ele),
          ele
        );
      })({ className: id, id })),
      (doms.wrap.innerHTML = html),
      (function getDoms() {
        const param = cfg.param,
          cBase = param.classBase;
        (doms.box = doms.wrap.querySelector(`.${cBase}box`)),
          (doms.cancel = doms.box.querySelector(`.${cBase}cancel-btn`)),
          (doms.confirm = doms.box.querySelector(`.${cBase}confirm-btn`));
        const isMenu = 1 !== param.page.length;
        (isMenu || param.isShowMenu) &&
          ((doms.menu = doms.box.querySelector(`.${cBase}menu`)),
          (doms.menus = [].slice.call(
            doms.menu.querySelectorAll(`.${cBase}menu-item`)
          )));
        const pages = [].slice.call(doms.box.querySelectorAll(`.${cBase}page`));
        (doms.page = []),
          param.isResetBtn &&
            (doms.reset = doms.box.querySelector(`.${cBase}reset-btn`));
        pages.forEach((curPage, index) => {
          cfg.hasSelectedPage ||
            (curPage.classList.add("curPage"),
            (isMenu || param.isShowMenu) &&
              doms.menus[0].classList.add("active"),
            (cfg.hasSelectedPage = !0));
          const page = {},
            pgid = curPage.dataset.pgid;
          (page.pgid = curPage.pgid = pgid),
            (page.controls = [].slice.call(
              curPage.querySelectorAll(`.${cBase}ctrl`)
            )),
            (page.ele = curPage),
            doms.page.push(page),
            (isMenu || param.isShowMenu) &&
              (doms.menus[index].settingsPage = curPage);
          const ctrls = {};
          (controls[pgid] = ctrls),
            page.controls.forEach((item, i) => {
              const cpid = item.dataset.cpid,
                cType = item.dataset.type;
              let dom;
              (item.cpid = cpid),
                "rd" === cType || "cb" === cType
                  ? ((dom = [].slice.call(item.querySelectorAll("input"))),
                    (dom.compType = cType))
                  : "ta" === cType &&
                    ((dom = item.querySelector("textarea")),
                    (dom.compType = cType),
                    (dom.value = cfg.allData[pgid][cpid])),
                (ctrls[cpid] = dom);
            });
        });
      })(),
      cfg.timer && clearInterval(cfg.timer),
      (function bindEvents() {
        const param = cfg.param;
        function menuHandle(e) {
          const dom = e.target,
            cBase = param.classBase;
          if (dom.classList.contains(`${cBase}menu-item`)) {
            const old = doms.menu.querySelector(".active");
            old.classList.remove("active"),
              old.settingsPage.classList.remove("curPage"),
              dom.classList.add("active"),
              dom.settingsPage.classList.add("curPage");
          }
        }
        function cancelEdit(e) {
          const cBase = param.classBase;
          if (
            e.target.className !== `${cBase}wrap` &&
            e.target.className !== `${cBase}cancel-btn`
          )
            return;
          const callback = cfg.callback;
          !1 !== runCallback(callback.cancelBefore) &&
            (showEditArea(!1),
            setCompValue(cfg.oldData),
            param.isIntervalRun &&
              (resetEditData(cfg.oldData), (cfg.allData = cfg.oldData)),
            runCallback(callback.cancelled));
        }
        function confirmEdit() {
          const callback = cfg.callback,
            data = getAllData();
          (cfg.allData = data),
            !1 !== runCallback(callback.confirmBefore, data) &&
              (showEditArea(!1),
              (cfg.state = "finished"),
              runCallback(callback.finished, data),
              (cfg.state = ""));
        }
        function resetEdit() {
          const callback = cfg.callback,
            data = getAllData();
          !1 !== runCallback(callback.resetBefore, data) &&
            (resetEditData(data), runCallback(callback.reset, data));
        }
        doms.menu && doms.menu.addEventListener("click", menuHandle),
          doms.wrap.addEventListener("click", cancelEdit),
          doms.cancel.addEventListener("click", cancelEdit),
          doms.confirm.addEventListener("click", confirmEdit),
          doms.reset && doms.reset.addEventListener("click", resetEdit);
      })(),
      (cfg.state = "created"),
      cfg
    );
  }
  function getAllData() {
    function getCompItem(pgid, cpid) {
      if (!controls[pgid]) return;
      const ctrl = controls[pgid][cpid];
      if (ctrl) {
        if (!Array.isArray(ctrl)) return ctrl.value;
        if ("rd" === ctrl.compType) {
          return ctrl.find((item) => item.checked).dataset.val;
        }
        if ("cb" === ctrl.compType) {
          return ctrl
            .filter((item) => item.checked)
            .map((item) => item.dataset.val);
        }
      }
    }
    const data = {};
    if (0 === arguments.length) {
      for (const key in controls) {
        const page = controls[key];
        data[key] = {};
        for (const key2 in page) data[key][key2] = getCompItem(key, key2);
      }
      return data;
    }
    if (1 === arguments.length) {
      const ctrls = arguments[0];
      for (const pgid in ctrls) {
        data[pgid] = {};
        controls[pgid].forEach((cpid) => {
          data[pgid][cpid] = getCompItem(pgid, cpid);
        });
      }
      return cfg.allData;
    }
    return getCompItem(arguments[0], arguments[1]);
  }
  function setCompValue() {
    function setCompItem(pgid, cpid, value) {
      if (!controls[pgid]) return;
      const ctrl = controls[pgid][cpid];
      if (ctrl)
        if (Array.isArray(ctrl)) {
          if ("rd" === ctrl.compType) {
            const selected = ctrl.find((item) => item.checked);
            selected && (selected.checked = !1);
            const select = ctrl.find((item) => item.dataset.val === value + "");
            select && (select.checked = !0);
          } else if ("cb" === ctrl.compType) {
            if (
              (ctrl
                .filter((item) => item.checked)
                .forEach((item) => {
                  item.checked = !1;
                }),
              Array.isArray(value))
            )
              value.forEach((val) => {
                const select = ctrl.find(
                  (item) => item.dataset.val === val + ""
                );
                select && (select.checked = !0);
              });
            else {
              const select = ctrl.find(
                (item) => item.dataset.val === value + ""
              );
              select && (select.checked = !0);
            }
          }
        } else ctrl.value = value;
    }
    if (1 === arguments.length) {
      const data = arguments[0];
      for (const key in data) {
        const pageData = data[key];
        for (const key2 in pageData) {
          setCompItem(key, key2, pageData[key2]);
        }
      }
    } else {
      setCompItem(arguments[0], arguments[1], arguments[2]);
    }
  }
  function resetEditData(data = null) {
    const param = cfg.param;
    if (param.isResetBtn)
      if (param.isOnlyResetCurPage) {
        data = data || getAllData();
        const curMenu = doms.menu.querySelector(".active");
        (data[curMenu.innerText] = cfg.baseData[curMenu.innerText]),
          setCompValue(data);
      } else setCompValue(cfg.baseData);
  }
  function showEditArea(isShow = !0, callback = null) {
    if (
      (cfg.param.isIntervalRun &&
        (cfg.timer && clearInterval(cfg.timer),
        (cfg.timer = setInterval(() => {
          const data = getAllData(),
            oldType = cfg.state;
          (cfg.state = "interval"),
            runCallback(cfg.callback.interval, data),
            (cfg.state = oldType),
            (cfg.lastData = data);
        }, cfg.interval))),
      (cfg.state = "created"),
      isShow)
    ) {
      if (((cfg.oldData = getAllData()), "function" == typeof callback)) {
        if (!1 === callback(cfg.oldData, cfg.oldData, cfg.baseData)) return;
      }
      cfg.state = "show";
    }
    (cfg.isEditing = isShow),
      (doms.wrap.style.display = isShow ? "block" : "none"),
      isShow &&
        !doms.box.style.top &&
        (doms.box.style.top =
          window.innerHeight / 2 - doms.box.clientHeight / 2 + "px"),
      callback && (cfg.callback = callback);
  }
  function runCallback(callback, data) {
    let result;
    if (callback) {
      data || (data = getAllData());
      const func = callback;
      Array.isArray(func)
        ? func.curFn
          ? ((result = func[curFn](data, cfg.oldData, cfg.baseData)),
            (func.curFn = null))
          : func.forEach((fn) => {
              result = fn(data, cfg.oldData, cfg.baseData);
            })
        : "function" == typeof callback &&
          (result = func(data, cfg.oldData, cfg.baseData));
    }
    return result;
  }
  function toPageObj({ settings, param = {}, otherPageName = "无分类" } = {}) {
    param = { ...param };
    const pageArr = [],
      menuList = [];
    let isOtherType = !1;
    for (let key in settings) {
      const item = settings[key];
      item.type
        ? menuList.includes(item.type) || menuList.push(item.type)
        : isOtherType || (isOtherType = !0);
    }
    return (
      isOtherType && menuList.push(otherPageName),
      menuList.forEach((menuTt) => {
        const components = [],
          page = { id: menuTt, components },
          arr = [];
        for (let key in settings) {
          const item = settings[key];
          menuTt === otherPageName
            ? item.type || arr.push(item)
            : item.type === menuTt && arr.push(item);
        }
        arr.forEach((item) => {
          let desc = item.desc || item.txt || "";
          desc && (desc = desc.replaceAll("\n", "<br>").trim());
          let comp,
            base = item.base;
          if (
            (Array.isArray(base) && (base = base.join(", ")), item.groupTitle1)
          ) {
            const comp = {
              id: item.key + "-gTt1",
              type: "title",
              value: item.groupTitle1,
            };
            components.push(comp);
          }
          if (item.groupTitle2) {
            const comp = {
              id: item.key + "-gTt2",
              type: "title2",
              value: item.groupTitle2,
            };
            components.push(comp);
          }
          if (item.groupTitle3) {
            const comp = {
              id: item.key + "-gTt3",
              type: "title3",
              value: item.groupTitle3,
            };
            components.push(comp);
          }
          if (item.groupDesc) {
            const comp = {
              id: item.key + "-gDesc",
              type: "desc",
              value: item.groupDesc,
            };
            components.push(comp);
          }
          if (
            (["menuTitle", "title", "desc", "title2", "title3"].includes(
              item.compType
            )
              ? ((comp = { ...item }),
                (comp.type = comp.compType),
                (comp.desc = desc))
              : (comp = {
                  id: item.key,
                  type: item.compType,
                  tt: item.tt || "",
                  title: item.title || "",
                  desc,
                  descTt: item.descTt || "",
                  name: item.key,
                  value: item.value,
                  base: item.base,
                }),
            "textarea" === comp.type)
          )
            (comp.ph = base),
              (comp.width = item.compW),
              (comp.height = item.compH),
              (comp.ctrlTt = "默认: " + base);
          else if ("radio" === comp.type || "checkbox" === comp.type) {
            let str = "默认: ";
            if ("checkbox" === comp.type) {
              let arr = item.base;
              Array.isArray(arr) || (arr = arr.split(/,|,/)),
                arr.forEach((val, i) => {
                  0 !== i && (str += ", "), (val = val.trim());
                  let valTxt = item.valueText[val];
                  void 0 === valTxt && (valTxt = val), (str += valTxt);
                });
            } else {
              let val = item.valueText[item.base];
              void 0 === val && (val = item.base), (str += val);
            }
            comp.ctrlTt = str;
          }
          if (item.valueText) {
            comp.radioList = [];
            for (let key in item.valueText) {
              const rd = { text: item.valueText[key], value: key };
              comp.radioList.push(rd);
            }
          }
          components.push(comp);
        }),
          pageArr.push(page);
      }),
      (param.page = pageArr),
      param
    );
  }
  function saveDatas({
    allData,
    settings,
    keyBase = "",
    verifyFn = {},
    getValue,
    setValue,
  }) {
    for (const pageName in allData) {
      const page = allData[pageName];
      for (const key in page) {
        const value = page[key],
          item = settings[key.replace(keyBase, "")];
        if (!item) return void console.log("设置的数据对应的对象获取失败");
        let verify;
        for (const name in verifyFn)
          if (settings[name].key === key) {
            verify = settings[name].verify || verifyFn[name];
            break;
          }
        setValue_setValue({
          value,
          base: item.base,
          key,
          verification: verify,
          getValue,
          setValue,
        });
      }
    }
  }
  function finishedSettings({
    allData,
    settings,
    keyBase = "",
    verifyFn = {},
    isForcedUpdate = !1,
    isRefreshPage = !1,
    callback = null,
    getValue,
    setValue,
  } = {}) {
    if (!isForcedUpdate) {
      if (
        !(function isValueChange(type = "auto") {
          const param = cfg.param,
            curData = getAllData(),
            curDataStr = JSON.stringify(curData);
          let oldDataStr;
          return (
            "auto" === type &&
              ("interval" === cfg.state &&
                param.isIntervalRun &&
                (type = "interval_current"),
              "finished" === cfg.state && (type = "auto")),
            (oldDataStr =
              "interval_current" === type
                ? JSON.stringify(cfg.lastData)
                : "base_current" === type
                ? JSON.stringify(cfg.baseData)
                : JSON.stringify(cfg.oldData)),
            curDataStr !== oldDataStr
          );
        })()
      )
        return;
    }
    saveDatas({ allData, settings, keyBase, verifyFn, getValue, setValue }),
      callback && "function" == typeof callback && callback(allData),
      isRefreshPage && history.go(0);
  }
  function showSettings() {
    const settings = info.settings;
    info.settingsArea = (function createEdit({
      settings,
      param = {},
      oldEditCfg,
      updateDataFn,
      isNewEdit = !0,
      isSyncOtherPage = !0,
      otherPageName = "无分类",
    } = {}) {
      let oldSettings, curSettings;
      updateDataFn &&
        isSyncOtherPage &&
        ((oldSettings = JSON.stringify(settings)),
        (settings = updateDataFn() || settings),
        (curSettings = JSON.stringify(settings)));
      const editInfo = { settings, param, otherPageName };
      if (oldEditCfg) {
        if (isNewEdit)
          return (
            oldEditCfg.doms.wrap.remove(), createEditEle(toPageObj(editInfo))
          );
        isSyncOtherPage &&
          updateDataFn &&
          oldSettings !== curSettings &&
          (oldEditCfg.doms.wrap.remove(),
          (oldEditCfg = createEditEle(toPageObj(editInfo)))),
          isSyncOtherPage &&
            !updateDataFn &&
            (oldEditCfg.doms.wrap.remove(),
            (oldEditCfg = createEditEle(toPageObj(editInfo))));
      } else oldEditCfg = createEditEle(toPageObj(editInfo));
      return oldEditCfg;
    })({
      settings,
      param: {
        bg: "rgba(0, 0, 0, 0)",
        resetTt: "重置当前页的所有设置为默认值",
        isOnlyResetCurPage: !0,
        isIntervalRun: !0,
      },
      oldEditCfg: info.settingsArea,
      updateDataFn: () => getData(settings, GM_getValue, GM_setValue),
    });
    showEditArea(!0, {
      resetBefore: () => confirm("是否重置当前页的所有设置为默认值?"),
      confirmBefore: () => {},
      finished: (data) => {
        console.log(data),
          finishedSettings({
            allData: data,
            settings,
            keyBase: info.keyBase,
            verifyFn: settings,
            callback: updateShow,
            getValue: GM_getValue,
            setValue: GM_setValue,
          });
      },
      interval: (data, oldData) => {
        finishedSettings({
          allData: data,
          settings,
          keyBase: info.keyBase,
          verifyFn: settings,
          callback: updateShow,
          getValue: GM_getValue,
          setValue: GM_setValue,
        });
      },
      cancelled: (data, oldData) => {
        saveDatas({
          allData: oldData,
          settings,
          keyBase: info.keyBase,
          verifyFn: settings,
          getValue: GM_getValue,
          setValue: GM_setValue,
        }),
          getData(settings, GM_getValue, GM_setValue),
          updateShow();
      },
    });
  }
  const settings = info.settings;
  !(function main() {
    getData(settings, GM_getValue, GM_setValue),
      (function getOtherData() {
        const settings = info.otherSettings,
          autoWay = info.settings.autoDarkModeWay.value;
        for (const valName in settings) {
          const setting = settings[valName];
          setting.value = getValue({
            base: setting.base,
            key: setting.key,
            valType: setting.valType,
            getVal: autoWay ? GM_getValue : null,
            setVal: autoWay ? GM_setValue : null,
          });
        }
      })();
    const f = verifyWebsite();
    !(function registerMenu(f) {
      f &&
        GM_registerMenuCommand("切换深色模式", () => {
          setDarkMode(!info.isDarkMode);
        }),
        GM_registerMenuCommand("设置", () => {
          showSettings();
        });
    })(f),
      f &&
        (settings.autoDarkMode.value &&
          info.otherSettings.oldDarkMode.value &&
          setDarkMode(!0, !1),
        setStartStopTimer());
  })();
})();